"b"
修改
修改指定索引下标的元素:
lset key index newValue
实例
127.0.0.1:6379> lset listdel 0 a
OK
127.0.0.1:6379> lrange listdel 0 -1
"a"
"b"
"b"
阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout
blpop和brpop是lpop和rpop的阻塞版本,它们除了弹出方向不同,使用方法基本相同,所以下面以brpop命令进行说明,brpop命令包含两个参数: ·key[key...]:多个列表的键。 ·timeout:阻塞时间(单位:秒)。
1)列表为空:如果timeout=3,那么客户端要等到3秒后返回,如果 timeout=0,那么客户端一直阻塞等下去:
实例
127.0.0.1:6379> lrange empty 0 -1
(empty array)
127.0.0.1:6379> brpop empty 3
(nil)
(3.08s)
2)列表不为空:客户端会立即返回
实例
127.0.0.1:6379> brpop listdel 0
"listdel"
"b"
使用brpop时,有两点需要注意。 第一点,如果是多个键,那么brpop会从左至右遍历键,一旦有一个键能弹出元素,客户端立即返回
如果多个客户端对同一个键执行brpop,那么最先执行brpop命令的客户端可以获取到弹出的值
列表类型的内部编码有两种。
ziplist(压缩列表):当列表的元素个数小于list-max-ziplist-entries配置 (默认512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时 (默认64字节),Redis会选用ziplist来作为列表的内部实现来减少内存的使 用。
linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用 linkedlist作为列表的内部实现。
quicklist内部编码,简单地说它是以一个ziplist为节 点的linkedlist,它结合了ziplist和linkedlist两者的优势,为列表类型提供了一 种更为优秀的内部编码实现
实例
127.0.0.1:6379> object encoding code
"quicklist"
1.消息队列
Redis的lpush+brpop命令组合即可实现阻塞队列,生产 者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令 阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性
2.文章列表
实际上列表的使用场景很多,在选择时可以参考以下:
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpsh+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)
集合集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一 样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过 索引下标获取元素。一个集合最多可以存储2^32-1个元 素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并 集、差集
命令集合内操作
(1)添加元素
sadd key element [element ...]
127.0.0.1:6379> sadd myset a b c
(integer) 3
127.0.0.1:6379> sadd myset a b c
(integer) 3
127.0.0.1:6379> smembers myset
"c"
"a"
"b"
(2)删除元素
srem key element [element ...]
127.0.0.1:6379> srem myset a b
(integer) 2
127.0.0.1:6379> smembers myset
"c"
(3)计算元素个数
scard key
scard的时间复杂度为O(1),它不会遍历集合所有元素,而是直接用 Redis内部的变量
127.0.0.1:6379> scard myset
(integer) 1
(4)判断元素是否在集合中
sismember key element
127.0.0.1:6379> sismember myset c
(integer) 1
(5)随机从集合返回指定个数元素
srandmember key [count]
[count]是可选参数,如果不写默认为1
实例
127.0.0.1:6379> sismember myset c
(integer) 1
127.0.0.1:6379> srandmember set 2
"a"
"b"
127.0.0.1:6379> srandmember set 2
"c"
"a"
(6)从集合随机弹出元素
spop key
实例
127.0.0.1:6379> spop set
"b"
127.0.0.1:6379> spop set
"a"
(7)获取所有元素
smembers key
先add两个集合
127.0.0.1:6379> sadd user:a it is a man
(integer) 4
127.0.0.1:6379> sadd user:b this is a girl
(integer) 4
(1)求多个集合的交集
sinter key [key ...]
实例
127.0.0.1:6379> sinter user:a user:b
"a"
"is"
(2)求多个集合的并集
sunion key [key ...]
实例
127.0.0.1:6379> sunion user:a user:b
"this"
"girl"
"is"
"a"
(3)求多个集合的差集
sdiff key [key ...]