Redis实战 - 2.list和set
List
Redis的List是通过Linked List(链表)来实现的String集合,所以插入数据的速度很快。
但是缺点就是在数据量比较大的时候,访问某个数据的时间可能会很长,但针对这种情况,可以使用Sorted Set,这个一会再说。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。LPUSH,RPUSH,LRANGE
LPUSH
会向List的左侧(头部)添加一个新的元素,而RPUSH
会把新的元素添加到List的右侧(尾部)。
LRANGE
命令可以按索引区间显示List的一部分,它的个试试LRANGE List-Key start end
。如果想显示整个list的话,这两个索引就可以是0和-1,其中-1就表示最后一个元素。
注意:这里插入多个数,因为是链表,所以向左插入。
LPOP,RPOP
POP动作有两个效果:一个是获取到元素,另一个是把元素从list中删除。
LPOP
就是从左边(头部)POP,RPOP
就是从右边(尾部)POP。
LTRIM
LTRIM
命令可以对list进行剪切,其格式为LTRIM list-key start end,返回的就是剪切的部分:
BRPOP,BLPOP
BRPOP
和BLPOP
这两个命令与RPOP和LPOP类似,但是当list里没有元素的时候,它们可以几秒钟,如果这期间有新的元素添加到了list里,那么就会停止等待返回该元素,否则就会一直等到设定的时间结束,然后返回null:
此外您还应该研究一下RPOPLPUSH
和BRPOPLPUSH
这两个命令。
SET
Redis的SET是无序的String集合,它里面的元素是不会重复的。
SADD
可以看到一次性可以添加一个或多个元素。
SMEMBERS
SISMEMBER
SISMEMBER可以判断某个元素是否在set里:
返回1表示true,0表示false。
SINTER
SPOP
SUNION
SUNION key1 [key2]
SUNIONSTORE
并集:把多个set合并到一个set里可以使用SUNIONSTORE
,格式是sunionstore 目标set set1 set2 ...:
复制
SCARD
SRANDMEMBER
SRANDMEMBER可以随机获取set里面的元素,但是不会移除它们:
Sorted SET
Sorted Set有点像Set和Hash的结合体。
和Set一样,它里面的元素是唯一的,类型是String,所以它可以理解为就是一个Set。
但是Set里面的元素是无序的,而Sorted Set里面的元素都带有一个浮点值,叫做分数(score),所以这一点和Hash有点像,因为每个元素都映射到了一个值。
Sorted Set是有序的,规则如下:
- 如果A.score > B.score,那么A > B。
- 如果A.score == B.score,那么A和B的大小就通过比较字符串来决定了,而A和B的字符串是不会相等的,因为Sorted Set里面的值都是唯一的。
ZADD
ZADD可以添加元素到Sorted Set,就和Set的SADD命令差不多:
可以看到ZADD的格式是:zadd key score element。
ZRANGE,ZREVRANGE
ZRANGE默认按分数由低到高把Sorted Set的元素显示出来:
ZREVRANGE 从高到低:
也可以一同把分数显示出来,使用参数WITHSCORES:
ZRANGEBYSCORE
ZRANGEBYSCORE可以按范围显示Sorted Set,格式是zrangebyscore key 分数下限 分数上限:
ZREMRANGEBYSCORE
ZREMRANGEBYSCORE可以按范围移除元素:
该命令返回的是移除元素的个数。
其中-inf
和inf
分别表示负无穷和正无穷。
ZRANK
ZREVRANK
ZREVRANK这个正好和ZRANK相反,就不说了。
词典分数(分数相同)
Sorted Set里分数相同的元素是按照词典分数(可以理解为比较字符串)进行排序的。
ZRANGEBYLEX
ZRANGEBYLEX可以按词典范围展示Sorted Set:
参考:
草根专栏,Redis in .NET Core 入门:(4) LIST和SET
草根专栏,Redis in .NET Core 入门:(5) Sorted SET
杨旭(Video),Redis in ASP.NET Core 3. List, Set, Sorted Set
