压缩列表是 Redis 为节省内存而开发的,它是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表了可以包含任意多个节点,每个节点都可以保存一个字符数组或者整数值。
而当数据量较大时,Redis 列表就会是用 quicklist(快速链表)存储元素。Redis 之所以采用两种方法相结合的方式来存储元素。这是因为单独使用普通链表存储元素时,所需的空间较大,会造成存储空间的浪费。因此采用了链表和压缩列表相结合的方式,也就是 quicklist + ziplist,结构如下图:
图1:快速链表
#从左侧头部插入元素 127.0.0.1:6379> LPUSH www.lmcjl.com python (integer) 1 127.0.0.1:6379> LPUSH www.lmcjl.com java c c# (integer) 4 #查看插入的元素 127.0.0.1:6379> LRANGE www.lmcjl.com 0 4 1) "c#" 2) "c" 3) "java" 4) "python" #从右侧尾部插入元素 127.0.0.1:6379> RPUSH www.lmcjl.com "Math" (integer) 5 127.0.0.1:6379> RPUSH www.lmcjl.com "Computer Language" (integer) 6 #查看元素 127.0.0.1:6379> LRANGE www.lmcjl.com 0 6 1) "c#" 2) "c" 3) "java" 4) "python" 5) "Math" 6) "Computer Language" #在python前面插入元素 127.0.0.1:6379> LINSERT www.lmcjl.com BEFORE python Python (integer) 7 #从左侧弹出元素 127.0.0.1:6379> LPOP www.lmcjl.com "c#" #从右侧弹出元素 127.0.0.1:6379> RPOP www.lmcjl.com "Computer Language"
127.0.0.1:6379> Rpush book c python java (integer) 3 127.0.0.1:6379> lpop book "c" 127.0.0.1:6379> lpop book "python" 127.0.0.1:6379> lpop book "java" 127.0.0.1:6379> lpop book (nil)
127.0.0.1:6379> RPUSH book c python java (integer) 3 127.0.0.1:6379> rpop book "java" 127.0.0.1:6379> rpop book "python" 127.0.0.1:6379> rpop book "c" 127.0.0.1:6379> rpop book (nil)除上述模型外,Redis 的列表也常被用作异步队列。使用流程大致如下:一个线程将需要延时处理的任务序列化成字符串,并“塞”进 Redis 列表中,而另外一个线程则以轮询的方式从该列表中读取“任务”。
命令 | 说明 |
---|---|
LPUSH key value1 [value2] | 在列表头部插入一个或者多个值。 |
LRANGE key start stop | 获取列表指定范围内的元素。 |
RPUSH key value1 [value2] | 在列表尾部添加一个或多个值。 |
LPUSHX key value | 当储存列表的 key 存在时,用于将值插入到列表头部。 |
RPUSHX key value | 当存储列表的 key 存在时,用于将值插入到列表的尾部。 |
LINDEX key index | 通过索引获取列表中的元素。 |
LINSERT key before|after pivot value | 指定列表中一个元素在它之前或之后插入另外一个元素。 |
LREM key count value | 表示从列表中删除元素与 value 相等的元素。count 表示删除的数量,为 0 表示全部移除。 |
LSET key index value | 表示通过其索引设置列表中元素的值。 |
LTRIM key start stop | 保留列表中指定范围内的元素值。 |
LPOP key | 从列表的头部弹出元素,默认为第一个元素。 |
RPOP key | 从列表的尾部弹出元素,默认为最后一个元素。 |
LLEN key | 用于获取列表的长度。 |
RPOPLPUSH source destination | 用于删除列表中的最后一个元素,然后将该元素添加到另一个列表的头部,并返回该元素值。 |
BLPOP key1 [key2 ] timeout |
用于删除并返回列表中的第一个元素(头部操作),如果列表中没有元素,就会发生阻塞, 直到列表等待超时或发现可弹出元素为止。 |
BRPOP key1 [key2 ] timeout | 用于删除并返回列表中的最后一个元素(尾部操作),如果列表中没有元素,就会发生阻塞, 直到列表等待超时或发现可弹出元素为止。 |
BRPOPLPUSH source destination timeout |
从列表中取出最后一个元素,并插入到另一个列表的头部。如果列表中没有元素,就会发生 阻塞,直到等待超时或发现可弹出元素时为止。 |
本文链接:http://task.lmcjl.com/news/5699.html