六、Redis列表(list)类型参考记录(1)

作者: 温新

分类: 【Redis】

阅读: 1763

时间: 2020-08-31 15:24:24

列表(list)类型可以存储一个有序的字符串列表。常用操作是向列表两端添加元素,或者获得列表的某个片段。

列表类型内部使用双向链表(bouble linked list)实现,因此向两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。

缺点

通过索引访问元素比较慢。设想1000人排队买手机的场景画面,商家为了感谢粉丝的支持,决定奖励排在第 500名的这位顾客一部手机。为了找到这个顾客,商家需要从队首开始找。排得越靠后越花费时间。

经典使用场景

微博上的时事等有时效的内容。

基本命令

lpush 将一个或多个值插入列表头部

语法:lpush key value1 [value2 ...]

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lpush number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lpush number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span>

lpush向列表左边增加元素。lpush先向列表左边加入2,然后再加入3。因此number键中的数据是3 2 1

rpush 向列表右边增加一个或多个值

语法:rpush key value1 [value2 ...]

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> rpush number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span></span>

向列表右边增加了0和-1,此时列表中的值为 3 2 1 0 -1

lpop 从列表左边弹出一个元素并显示该值

语法:lpop key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lpop number</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"3"</span></span>

rpop 从列表右边弹出一个元素并显示该值

语法:rpop key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> rpop number</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"-1"</span></span>

lpop/rpop命令2步骤下:1)移除列表左边的一个元素;2)返回被移除元素的值

llen 获取列表中元素的个数

语法:llen key

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> llen number</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span>

key不存在时返回0

lrange 获取指定范围的元素

语法:lrange key start end

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 获取所有元素</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 获取前2个元素</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span>

1)若start索引位置比end索引位置靠后,则返回空列表

2)若end大于实际索引范围,则返回列表最右边的元素

lrem 删除列表中指定的值

语法:lrem key count value

lrem删除列表中前count个值为value的元素,返回实际删除元素的个数。count值不同,lrem命令执行方式有些差异。

  1. 当 count > 0 时,lrem命令会从列表左边开始删除前count个值为value的元素;
  2. 当 count < 0 时,lrem命令会从列表右边开始删除前count个值为value的元素;
  3. 当 count = 0 时,lrem命令会删除所有值为value的元素。
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> rpush number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 从右边开始删除值为2的元素</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrem number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span>

lindex 通过索引获取列表中的元素

语法:lindex key index

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lindex number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span>

lset 通过索引设置列表元素的值

语法:lset key index value

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 列表元素中索引为1的值设置为7</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lset number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">7</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">OK</span>

我是夕阳何处寻,期待和优秀的你一起同行!

小白

2020年08月31日

请登录后再评论