Redis基本使用

Redis结构:

  • string 字符串
  • list 双列表
  • set 集合中每个成员都是字符串类型,类似于list,set可以自动去重,无序
  • hash 类似于java中的Map<String,Object>
  • zset 与set不同的是zset是有序的,因为有序集合中每个成员都会关联一个double类型的score,Redis通过score实现了对集合成员的排序

String

Redis 使用标准 C 语言编写,但在存储字符时,Redis 并未使用 C 语言的字符类型,而是自定义了一个属于特殊结构 SDS(Simple Dynamic String)即简单动态字符串),这是一个可以修改的内部结构,非常类似于 Java 的 ArrayList。

struct sdshdr{
     //记录buf数组中已使用字符的数量,等于 SDS 保存字符串的长度
     int len;
     //记录 buf 数组中未使用的字符数量
     int free;
     //字符数组,用于保存字符串
     char buf[];
 }
 //Redis string 将字符串存储到字符类型的buf[]中,并使用 len、free对buf[]数组的长度和未使用的字符数进行描述。

当字符串所占空间小于 1MB 时,Redis 对字符串存储空间的扩容是以成倍的方式增加的;而当所占空间超过 1MB 时,每次扩容只增加 1MB。Redis 字符串允许的最大值字节数是 512 MB。

SET key value [EX seconds|PX milliseconds] [NX|XX]
其中[]内代表可选参数,其含义如下所示:
EX seconds:设置指定的过期时间,以秒为单位;
PX milliseconds:设置指定的过期时间,以毫秒为单位;
NX:先判断 key 是否存在,如果 key 不存在,则设置 key 与 value;
XX:先判断 key 是否存在,如果 key 存在,则重新设置 value。

List

数据结构:快速链表(quicklist)。一个列表最多包含 2^32 - 1 个元素(约 40 亿个元素),当列表弹出最后一个元素时,该结构会被自动删除。当数据比较少的时候Redis会使用一块连续的内存来存储这些元素,连续的数据结构被称为ziplist。数据量较大采用快速链表(quicklist),因此采用了链表和压缩列表相结合的方式,也就是 quicklist + ziplist,结构如下:
在这里插入图片描述
常用命令

LPUSH key value1 [value2] 在列表头部插入一个或者多个值。
RPUSH key value1 [value2] 在列表尾部添加一个或多个值。
LINDEX key index 通过索引获取列表中的元素。
LREM key count value 表示从列表中删除元素与 value 相等的元素。count 表示删除的数量,为 0 表示全部移除。
LSET key index value 表示通过其索引设置列表中元素的值。
LPOP key 从列表的头部弹出元素,默认为第一个元素。

Hash

在这里插入图片描述
数据结构: ziplist(压缩列表) hashtable(哈希表),党field-value长度较短且个数较少时使用ziplist,否则使用hashtable
常用命令

hset key field value 给key集合中的field建赋值
hget key field 集合field中取出value
hmset key field1 value1 field2 value2...   批量设置hash的值
hexists key1 field	查看哈希表key中是否存在field
hkeys key 	列出hash集合中所有field
hvals key 	列出hash集合中所有value
hincrby key field increment 	为哈希表key 中的域field的值加上增量1 -1
hsetnx key field value 将哈希表key中的域值设置为value,当且仅当域field不存在

Set

数据结构: 整型数组(intset)与哈希表(hashtable)相结合,当集合内保存的所有成员都是整数值并且成员数量不超过 512 个使用intset结构。否则使用hashtable结构
常用命令

SADD key member1 [member2]  向集合中添加一个或者多个元素,并且自动去重。
SCARD key 	返回集合中元素的个数。
SDIFF key1 [key2] 求两个或多个集合的差集。
SDIFFSTORE destination key1 [key2] 求两个集合或多个集合的差集,并将结果保存到指定的集合中。
SINTER key1 [key2] 求两个或多个集合的交集。
SINTERSTORE destination key1 [key2] 求两个或多个集合的交集,并将结果保存到指定的集合中。
SISMEMBER key member 查看指定元素是否存在于集合中。
SMEMBERS key 查看集合中所有元素。
SREM key member1 [member2] 删除一个或者多个元素,若元素不存在则自动忽略。
SUNION key1 [key2] 求两个或者多个集合的并集。
SUNIONSTORE destination key1 [key2] 求两个或者多个集合的并集,并将结果保存到指定的集合中。

ZSet

数据结构:

SortedSet(zset)时Redis提供的一个非常特别的数据结构,一方面等价于Java的数据结构Map<String,Double>,可以给每个元素value赋予一个权重score,另一方面他又类似于TreeSet,内部的元素会按照权重score排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

zset底层使用了两个数据结构
1.hash,起到关联元素value和权重score的作用,保障value的唯一性。可以通过value找到对应的score值
2.跳跃表,目的在于给元素value排序,根据score的范围获取元素列表

常用命令

  • zadd key score1 value1 score2 value2… 将一个或多个成员元素及score值加入到有序集key中
  • zrange key start stop [withscores] 返回有序集合key中下标在start 和stop之间的元素,带withscores 可以让score一起和值返回到结果集
  • zrangebyscore key minmax [withscores] [limit offset count] 返回有序集中所有score值介于min和max之间(包括等于min或max)的成员,有序成员按score递增排列
  • zrevrangebyscore key maxmin [withscores] [limit offset count] 同上,改为从大到小排列
  • zincrby key increment value 为元素的score加上增量
  • zrem key value 删除该集合下,指定值的元素
  • zcount key min max 统计该集合在分数区间内的元素个数
  • zrank key value 返回该值在集合中的排名

发布与订阅

Redis发布和订阅是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息,Redis客户端可以订阅任意数量的频道。
注:发布的消息没有持久化,如果在订阅的客户端收不到hello,只能收到订阅后发布的消息

  1. 打开一个客户端订阅channel1
subcribe channel1 
  1. 打开另一个客户端,给channel1发布消息hello
publish channel1 hello
  1. 打开订阅者客户端可看到发送的消息
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值