在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
列表类型介绍 列表类型也是一个我们很长要用到的一个类型。比如我们发博客,要用到博客列表。如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键,处于性能方面的考虑,在生产环境是不推荐使用的。 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加、删除、获取元素,或者某个片段。在redis中,实际上是使用双向链表的方式实现的,所以在列表两端添加删除元素的时间复杂度是O(1),获取的元素越接近两端,速度越快。但是通过索引访问元素就会很慢,尤其是列表很长的时候。但是如果只是获得队列开头或结尾的前多少个元素,这个就和队列长度无关了。所以这里队列非常适合我们的评论功能,以及一些新鲜事等功能的开发,记录日志也很好用。 1、增加元素命令 向列表两端添加元素: redis> lpush key value [value ...] redis> rpush key value [value ...] 这里也很容易明白, C:\Program Files\Redis>redis-cli.exe 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> lpush mylist 0 (integer) 1 127.0.0.1:6379> rpush mylist 1 (integer) 2 127.0.0.1:6379> lpush mylist -1 -2 (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "-2" 2) "-1" 3) "0" 4) "1" 返回值是列表的长度。这里push的值可以是多个,但是有一点要说明一下。像是上面这样左边 2、弹出元素命令 redis> lpop key redis> rpop key 这里就很好理解了,分别是从左弹出,从右弹出,返回值是弹出的值。(弹出的意思就是把值移除并返回值) 127.0.0.1:6379> lrange mylist 0 -1 1) "-2" 2) "-1" 3) "0" 4) "1" 127.0.0.1:6379> lpop mylist "-2" 127.0.0.1:6379> rpop mylist "1" 127.0.0.1:6379> lrange mylist 0 -1 1) "-1" 2) "0" 综合上面四条命令,可以实现栈和队列了。 栈: 队列: 3、获取列表中元素的个数 redis> llen key 当键不存在是返回0,这个如果一路学下来都可以猜到了。这里redis执行这条命令的时间复杂度是O(1),不像关系型数据库中的O(N)。 127.0.0.1:6379> llen mylist (integer) 2 4、获取列表片段 redis> lrange key start stop
127.0.0.1:6379> lrange mylist 0 -1 1) "-1" 2) "0"
例如现在numbers的值是-2、-1、0、1,我们要是执行 这里有两点要注意一下: (1)如果start索引比stop索引位置靠后(这里说的是位置,不是索引值的大小),则会返回空列表(empty list or set)。 (2)如果stop大于实际的索引范围,则会返回列表最后变的元素。 5、删除列表中指定值 redis> lrem key count value
(1) (2) (3) 返回值是删除值的个数。 6、获得/设置指定索引的元素值 redis> lindex key index redis> lset key index value 这里应该很好理解了,特殊说明一下index如果是负值的话就是从右边开始计算索引,和lrange的负值是一个意思。 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "-1" 3) "-2" 4) "-3" 127.0.0.1:6379> lindex mylist 0 "0" 127.0.0.1:6379> lindex mylist 3 "-3" 127.0.0.1:6379> lindex mylist -1 "-3" 7、只保留列表中指定的片段 redis> ltrim key start end 这里也不做特殊说明了。 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "-1" 3) "-2" 4) "-3" 127.0.0.1:6379> lindex mylist 0 "0" 127.0.0.1:6379> lindex mylist 3 "-3" 127.0.0.1:6379> lindex mylist -1 "-3" 127.0.0.1:6379> ltrim mylist 0 2 OK 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "-1" 3) "-2" 8、向列表中插入元素 现在我们列表中的值是0,-1,-2 redis> linsert key before|after pivot value 127.0.0.1:6379> linsert mylist before 0 1 (integer) 4 //在0值前面插入1 127.0.0.1:6379> lrange mylist 0 -1 1) "1" 2) "0" 3) "-1" 4) "-2" 127.0.0.1:6379> linsert mylist after 1 1 (integer) 5 //在值为1的后面插入1 127.0.0.1:6379> lrange mylist 0 -1 1) "1" 2) "1" 3) "0" 4) "-1" 5) "-2" 127.0.0.1:6379> linsert mylist after -1 -1.5 (integer) 6 //在值为-1的后面插入-1.5 127.0.0.1:6379> lrange mylist 0 -1 1) "1" 2) "1" 3) "0" 4) "-1" 5) "-1.5" 6) "-2" 现在列表中的值为1,1,0,-1,-1.5,-2 。linsert命令会先从列表中查找值为 9、将元素从一个列表转储到另一个列表 redis> rpoplpush source destination 这个命令非常有意思,先执行 总结 到这里我们列表类型的命令就都介绍完了,是不是很简单呢~希望这篇文章对大家的学习或者工作能带来一定的帮助,如果有问题大家可以留言交流。 |
请发表评论