Redis List是一组连接起来的字符串集合。
写操作:
LPUSH
语法:LPUSH key value [value …]
功能:从头部增加元素,返回值为List中元素的总数。
RPUSH
语法:RPUSH key value [value …]
功能:从尾部增加元素,返回值为List中元素的总数。
LPOP
语法:LPOP key
功能:移出并获取列表的第一个元素。
LREM
语法:LREM key count value
功能:移除值等于value的元素。当count=0,则移除所有等于Fvalue的元
素。当count>0,则从左到右开始移除count个。当count<0则从右到左移除
count个。返回值为被移除元素的数量。
DEL
语法:DEL key[key …]
功能:删除对象,返回值为删除成功了几个键。
UNLINK
语法:UNLINK key [key …]
功能:删除对象,返回值为删除成功了几个键。
和DEL主要有如下不同:
del命令同步删除命令,会阻塞客户端,直到删除完成。unlink 命令是异步
删除命令,只是取消Key在键空间的关联,让其不再能查到,删除是异步进
行,所以不会阻塞客户端。
LLEN
语法:LLEN key
功能:查看List的长度,即List中元素的总数。
LRANGE
语法:LRANGE key start stop
功能:查看start到stop为角标的元素。
编码方式
3.2版本之前,List对象有两种编码方式,一种ZIPLIST,另一种是
LINKEDLIST。
ZIPLIST
当满足如下条件时,用ZIPLIST编码:
1.列表对象保存的所有字符串对象长度都小于64字节;
2.列表对象元素个数少于512个,注意,这是LIST的限制,而不是ZIPLIST的
限制;
可以看到,“hello”、“niuniu”、"mart"都挨在一起,正如其名字一样。ZIPLIST内存排列得很紧凑,可以有效节约内存空间。
LINKEDLIST
如果不满足ZIPLIST编码的条件,则使用LINKEDLIST编码。为了便于描述,
我们还是假设列表中包含"hello"、“niuniu”、"mart"三个元素,如果用
LINKEDLIST编码,则是几个String对象的链接结构,结构示意意图如下:
QUICKLIST横空出世
LINKEDLIST原来是单个节点,只能存一个数据,现在单个节点存的是一个
ZIPLIST,即多个数据。
在redis7.0之后,压缩列表listpack完全取代了ziplist.