• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Redis > Redis列表类型的常用命令小结

Redis列表类型的常用命令小结

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了redis常用数据类型,redis数据类型,redis存储类型,redis 复合类型,redis中类型等相关知识,希望本文的分享对您有所帮助

列表类型介绍

列表类型也是一个我们很长要用到的一个类型。比如我们发博客,要用到博客列表。如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键,处于性能方面的考虑,在生产环境是不推荐使用的。

列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加、删除、获取元素,或者某个片段。在redis中,实际上是使用双向链表的方式实现的,所以在列表两端添加删除元素的时间复杂度是O(1),获取的元素越接近两端,速度越快。但是通过索引访问元素就会很慢,尤其是列表很长的时候。但是如果只是获得队列开头或结尾的前多少个元素,这个就和队列长度无关了。所以这里队列非常适合我们的评论功能,以及一些新鲜事等功能的开发,记录日志也很好用。

1、增加元素命令

向列表两端添加元素:

redis> lpush key value [value ...]
redis> rpush key value [value ...]
</div>

这里也很容易明白,lpush的l是left,向列表左边添加元素,r自然就是right右边的意思了。  (lpush,rpush 类似于操作队列,往左边push,往右边push)

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"
</div>

返回值是列表的长度。这里push的值可以是多个,但是有一点要说明一下。像是上面这样左边push了两个值-1、-2,实际上现在列表的值是这样排序的,-2、-1、0、1,所以就算是同时push多个,实际上也是一个一个插入列表的,只不过这些操作都会是原子的。

2、弹出元素命令

redis> lpop key
redis> rpop key
</div>

这里就很好理解了,分别是从左弹出,从右弹出,返回值是弹出的值。(弹出的意思就是把值移除并返回值)

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"
</div>

综合上面四条命令,可以实现栈和队列了。

栈:lpush和lpop或者使用rpush和rpop。

队列:lpush和rpop或者使用rpush和lpop。

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

redis> llen key
</div>

当键不存在是返回0,这个如果一路学下来都可以猜到了。这里redis执行这条命令的时间复杂度是O(1),不像关系型数据库中的O(N)。

127.0.0.1:6379> llen mylist
(integer) 2
</div>

4、获取列表片段

redis> lrange key start stop
</div>

lrange命令比较常用,返回从start到stop的所有元素的列表,start和stop都是从0开始。

127.0.0.1:6379> lrange mylist 0 -1
1) "-1"
2) "0"
</div>

lrange还支持负值索引,这里是负值大家可以把负号加值直接理解成从从右数第多少个。

例如现在numbers的值是-2、-1、0、1,我们要是执行lrange numbers -2 -1,就会得到最后两个值。还有lrange numbers 0 -1是我们常用的用来获取全部列表的命令。

这里有两点要注意一下:

    (1)如果start索引比stop索引位置靠后(这里说的是位置,不是索引值的大小),则会返回空列表(empty list or set)。

    (2)如果stop大于实际的索引范围,则会返回列表最后变的元素。

5、删除列表中指定值

redis> lrem key count value
</div>

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

     (1)count > 0:从列表左边开始删除前count个值为value的元素

     (2)count < 0:从右边开始删除

     (3)count = 0:删除所有

返回值是删除值的个数。

6、获得/设置指定索引的元素值

redis> lindex key index
redis> lset key index value
</div>

这里应该很好理解了,特殊说明一下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"
</div>

7、只保留列表中指定的片段

redis> ltrim key start end
</div>

这里也不做特殊说明了。

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"
</div>

8、向列表中插入元素

现在我们列表中的值是0,-1,-2

redis> linsert key before|after pivot value
</div>
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"
</div>

现在列表中的值为1,1,0,-1,-1.5,-2 。linsert命令会先从列表中查找值为pivot的元素,然后根据是before还是after在前或是后添加元素。

9、将元素从一个列表转储到另一个列表

redis> rpoplpush source destination
</div>

这个命令非常有意思,先执行rpop再执行lpush。这个命令会先从source右边弹出一个元素插入到destination列表的左边,并返回这个元素的值。整个过程同样是原子的。

总结

到这里我们列表类型的命令就都介绍完了,是不是很简单呢~希望这篇文章对大家的学习或者工作能带来一定的帮助,如果有问题大家可以留言交流。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Redis中五种数据类型简单操作
  • Redis集合类型的常用命令小结
  • Redis列表类型的常用命令小结
  • Redis字符串类型的常用命令小结
  • Redis有序集合类型的常用命令小结
  • redis常用命令、常见错误、配置技巧等分享
  • Redis总结笔记(一):安装和常用命令
  • redis常用命令小结

相关文章

  • 2017-05-11详解在Redis在Centos7上的安装部署
  • 2017-05-11Redis教程(十三):管线详解
  • 2017-05-11利用yum安装Redis的方法详解
  • 2017-05-11详解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
  • 2017-05-11Redis数据库的使用场景介绍(避免误用Redis)
  • 2017-05-11通过 Redis 实现 RPC 远程方法调用(支持多种编程语言)
  • 2017-05-11Redis中散列类型的常用命令小结
  • 2017-05-11Redis 命令整理并说明如何使用
  • 2017-05-11浅谈redis在项目中的应用
  • 2017-05-11Windows环境部署Redis集群

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Redis实现唯一计数的3种方法分享
    • Redis源码剖析和注释(二十二)---Redis复制(replicate)源码详细解析
    • Redis教程(二):String数据类型
    • 详解redis是如何实现队列消息的ack
    • windows环境下Redis+Spring缓存实例讲解
    • Redis教程(九):主从复制配置实例
    • redis 自动关闭订单
    • php结合redis实现高并发下的抢购、秒杀功能的实例
    • Redis简介
    • Redis中的动态字符串学习教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有