list(列表类型)
列表,存储多个有序的字符串,可充当栈和队列的角色
特点:可保存重复的元素,有序,可在两端插入和弹出元素,获取指定下标的原色,指定范围的元素
一、常用命令
rpush key v1 v2 v3(从右边插入元素)
lpush key v1 v2 v4(从左向右插入元素)
linsert key before|after pivot value(向某个元素前或者后插入元素)
lrange key start end(end为-1时,取所有元素)
lindex key index(获取指定下标下的元素,如果index为-1,则获取最后一个元素)
llen key (获取列表长度)
lpop key (从列表左侧弹出元素)
rpop key (从列表右侧弹出元素)
二、阻塞命令
blpop list:key 3 客户端等待3秒后返回。如果timeout为0则一直阻塞下去
brpop
三、不常用命令
- lrem key count value (删除值为value元素,如果count为0,删除所有的value元素;count>0,则从左到右删除,最多为count个;count<0,则从右到左,删除最多count个元素)
- lset key index newvalue (修改指定下标的元素值)
- ltrim key start end (将会保留key列表,从start到end的元素)
四、内部编码
对外list类型,内部多种编码实现
- ziplist(压缩列表):当列中的元素个数小于list-max-ziplist-entries配置(默认512个),同时列表中的每个元素的值都小于list-max-ziplist-value配置时(默认64字节),redis会选用ziplist作为列表的内部实现来减少内存的使用
- linkedlist(链表):当列表类型无法满足ziplist的条件时,redis会使用linkedlist作为列表的内部实现
- quicklist:是以一个ziplist为节点的linkedlist
五、典型使用场景
- 消息队列
lpush + brpop 可以实现阻塞队列(消息队列,阻塞,保证了消费者处理速度)
lpush + rpop 可以实现队列
lpush + lpop 栈