redis学习 第三章 5种数据类型----list类型

跟着Redis入门指南学习

第三章 5种数据类型----列表类型(list)

3.4 列表类型

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

列表类型内部使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(1).


3.4.2 命令

1.向列表两端增加元素

<span style="font-size:14px;">lpush key value [value ...]
rpush key value [value ...]</span>
返回值表示增加元素后的列表长度。

<span style="font-size:14px;">127.0.0.1:6379[1]> lpush numbers 1
(integer) 1
127.0.0.1:6379[1]> lpush numbers 2 4
(integer) 3
127.0.0.1:6379[1]> rpush numbers 7 9
(integer) 5</span>
numbers健中数据为:4 2 1 7 9

2.从列表两端弹出元素

<span style="font-size:14px;">lpop key 
rpop key</span>
lpop命令执行两步操作:第一步将列表左边的元素从列表中移除,第二步是返回被移除的元素值。

<span style="font-size:14px;">127.0.0.1:6379[1]> lpop numbers
"4"
127.0.0.1:6379[1]> lpop numbers
"2"
127.0.0.1:6379[1]> rpop numbers
"9"
127.0.0.1:6379[1]> rpop numbers
"7"
127.0.0.1:6379[1]> rpop numbers
"1"
127.0.0.1:6379[1]> rpop numbers
(nil)</span>

 

3.获取列表中元素的个数

<span style="font-size:14px;">llen key</span>
当健不存在时llen会返回0

<span style="font-size:14px;">127.0.0.1:6379[1]> llen numbers
(integer) 0
127.0.0.1:6379[1]> lpush numbers 1 3 4 5
(integer) 4
127.0.0.1:6379[1]> llen numbers
(integer) 4</span>
4.获取列表片段

<span style="font-size:14px;">lrange key start stop</span>
返回索引从[start,stop]之间的所有值,redis索引也是从0开始

numbers 现在列表中数据为:0 9 8 6 5 4 3 1

<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 3
1) "0"
2) "9"
3) "8"
4) "6"</span>
lrange 命令在取值得到列表片段的同时不会像lpop一样删除该片段。

lrange 命令也支持负索引,表示从右边开始计算序数,如“-1”表示最右边第一个元素,依次类推:

显然,lrange numbers 0 -1可以获取列表中的所有元素,另外一些特殊情况如下:

(1)如果start的索引位置比stop的索引位置靠后,则会返回空列表。

(2)若果stop大余实际的索引范围,则会到列表最右边的元素。

<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -1
1) "0"
2) "9"
3) "8"
4) "6"
5) "5"
6) "4"
7) "3"
8) "1"
127.0.0.1:6379[1]> lrange numbers 1 999
1) "9"
2) "8"
3) "6"
4) "5"
5) "4"
6) "3"
7) "1"
127.0.0.1:6379[1]> lrange numbers 4 0
(empty list or set)</span>
5.删除列表中指定的值

<span style="font-size:14px;">lrem key count value</span>
lrem 命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值得不同,lrem命令的执行方式会略有差异:

当count>0时 lrem命令会从列表左边开始删除前面count值为value的元素;

当count<0时lrem命令会从列表右边开始删除前|count|个值为value的元素;

当count=0是lrem命令会删除所有值为value的元素。

<span style="font-size:14px;">127.0.0.1:6379[1]> lrem numbers -1 3
(integer) 1
127.0.0.1:6379[1]> lrange numbers 0 -1
1) "3"
2) "5"
3) "4"
4) "3"
5) "1"
127.0.0.1:6379[1]> lrem numbers 0 3
(integer) 2
127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "4"
3) "1"</span>
3.4.5 命令拾遗

1.获取/设置指定索引的元素值

<span style="font-size:14px;">lindex key indexe
lset key index value</span>
返回指定索引的元素,索引从0开始。如果index是负值则表示从右边开始计算索引,最右边元素的索引是-1.

<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "4"
3) "1"
127.0.0.1:6379[1]> lindex numbers 0
"5"
127.0.0.1:6379[1]> lindex numbers 4
(nil)
127.0.0.1:6379[1]> lindex numbers 2
"1"
127.0.0.1:6379[1]> lindex numbers -1
"1"
127.0.0.1:6379[1]> lset numbers 1 9
OK
127.0.0.1:6379[1]> lset numbers 4 6
(error) ERR index out of range
127.0.0.1:6379[1]> lset numbers 2 6
OK
127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "9"
3) "6"</span>

2.只保留列表指定片段

<span style="font-size:14px;"><span style="font-size:14px;">ltrim key start end</span></span>
ltrim 命令可以删除指定范围之外的所有元素,其指定列表范围的方法和lrange 命令相同。

<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -1
1) "8"
2) "5"
3) "9"
4) "6"
127.0.0.1:6379[1]> ltrim numbers 1 2
OK
127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "9"</span>

lrim命令常和lpush命令一起使用来限制列表中元素的数量,比如记录日志时我们希望保留最近的100条日志,则每次加入新元素时调用一次ltrim命令即可:

<span style="font-size:14px;">lpush logs $newlog
ltrim logs 0 99</span>
3.向列表中插入元素

<span style="font-size:14px;">linsert key before|after pivot value</span>
linsert 命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before 还是after来决定将value插入到改元素前面还是后面。

<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "9"
127.0.0.1:6379[1]> linsert numbers after 5 8
(integer) 3
127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "8"
3) "9"
127.0.0.1:6379[1]> linsert numbers before 8 0
(integer) 4
127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "0"
3) "8"
4) "9"</span>

4.将元素从一个列表转到另一个列表

<span style="font-size:14px;">rpoplpush source destination</span>

<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -1
1) "5"
2) "0"
3) "8"
4) "9"
127.0.0.1:6379[1]> rpoplpush numbers newnumbers
"9"
127.0.0.1:6379[1]> lrange newnumbers 0 -1
1) "9"</span>

散列类型没有类似字符串类型的mget命令那样可以通过一条命令同时获得多个健的健值的版本,所以对于每个健值都需要请求一个数据库,也就都会产生一次往返时延,之后会介绍使用管道和脚本优化这个问题。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值