redis之列表类型
2016-05-29 09:50
513 查看
列表类型类似我们java里面的双向链表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
因为内部是使用双向链表来实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。就算你有千万级别的数据列表,我们获取头部和尾部的10条记录也是极快的。
当然链表也有可能会访问比较慢,如果我们使用索引访问的方式访问中间部分这样是及其的慢的。一般来说我们插入的时候比较快速度是O(1),所以适合用来记录日志,可以保证加入新日志的速度不会受到已有日志数量的影响。
借助列表类型,redis可以作为队列使用。
测试如下:
上面演示了添加元素接下来看看如何弹出元素:
演示如下:
上面展示了从左边和右边分别弹出一个元素。
我们也可以使用LLEN这个命令来查看长度。
我们利用lrange能够获得列表中的某以片段。lrange命令将返回索引从start和stop之间的所有元素。在redis中索引是从0开始,-1代表从右边的第一位也就是从左开始的倒数第一位。如果索引超过最大的就会返回最右边的第一个。
lrem命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值的不同,lrem命令的执行方式会略有差异。
1.当count>0时lrem命令会从列表左边开始删除钱count个值为value的元素。
2.当count<0时lrem命令会从列表右边开始删除前count的绝对值值为value的元素
3.当count=0就删除所有的值为value的元素。
lindex命令用来获取指定索引的元素,索引从0开始,时间复杂度是O(n)。
2.只保留列表指定片段
作用是保留start-end之间的元数删除其它所有元素。
3.向列表中插入元素
这是一个比较有意思的插入命令它可以从列表中从左往右查找到pivot的元素,然后判断是以before还是after来决定将value插入到该元素的前面还是后面。
因为内部是使用双向链表来实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。就算你有千万级别的数据列表,我们获取头部和尾部的10条记录也是极快的。
当然链表也有可能会访问比较慢,如果我们使用索引访问的方式访问中间部分这样是及其的慢的。一般来说我们插入的时候比较快速度是O(1),所以适合用来记录日志,可以保证加入新日志的速度不会受到已有日志数量的影响。
借助列表类型,redis可以作为队列使用。
基本命令
lpush key value [value ...] rpush key value [value ...]
测试如下:
127.0.0.1:6379> lpush mylist 1 (integer) 1 127.0.0.1:6379> lpush mylist 2 3 (integer) 3 加入完成之后就变成了 3 2 1 ,上面我们采用的是往左边加的方式。我们下面往右边加的方式会使用rpush命令,其用法和lpush类似: 127.0.0.1:6379> rpush mylist 0 -1 (integer) 5 接下来列表就变成 3 2 1 0 -1
上面演示了添加元素接下来看看如何弹出元素:
lpop key rpop key
演示如下:
127.0.0.1:6379> lpop mylist "3" 127.0.0.1:6379> rpop mylist "-1"
上面展示了从左边和右边分别弹出一个元素。
我们也可以使用LLEN这个命令来查看长度。
127.0.0.1:6379> LLEN mylist (integer) 3
如何获取列表段的值
lrange key start stop
我们利用lrange能够获得列表中的某以片段。lrange命令将返回索引从start和stop之间的所有元素。在redis中索引是从0开始,-1代表从右边的第一位也就是从左开始的倒数第一位。如果索引超过最大的就会返回最右边的第一个。
127.0.0.1:6379> lrange mylist 0 -1 1) "2" 2) "1" 3) "0" 127.0.0.1:6379> lrange mylist 0 1 1) "2" 2) "1" 127.0.0.1:6379> lrange mylist -2 -1 1) "1" 2) "0" 127.0.0.1:6379> lrange mylist 1 999 1) "1" 2) "0"
删除列表中指定的值
lrem key count value
lrem命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值的不同,lrem命令的执行方式会略有差异。
1.当count>0时lrem命令会从列表左边开始删除钱count个值为value的元素。
2.当count<0时lrem命令会从列表右边开始删除前count的绝对值值为value的元素
3.当count=0就删除所有的值为value的元素。
127.0.0.1:6379> rpush mylist 2 (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "2" 2) "1" 3) "0" 4) "2" 127.0.0.1:6379> lrem mylist -1 2 (integer) 1 127.0.0.1:6379> lrange mylist 0 -1 1) "2" 2) "1" 3) "0"
扩展命令
1.获得/设置指定索引的元素值lindex key index lset key index value
lindex命令用来获取指定索引的元素,索引从0开始,时间复杂度是O(n)。
127.0.0.1:6379> lindex mylist 0 "2" 127.0.0.1:6379> lindex mylist -1 "0" 127.0.0.1:6379> lset mylist 1 8 OK 127.0.0.1:6379> lindex mylist 1 "8"
2.只保留列表指定片段
ltrim key start end
作用是保留start-end之间的元数删除其它所有元素。
127.0.0.1:6379> lrange mylist 0 -1 1) "2" 2) "8" 3) "0" 127.0.0.1:6379> rpush mylist 4 (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "2" 2) "8" 3) "0" 4) "4" 127.0.0.1:6379> ltrim mylist 1 2 OK 127.0.0.1:6379> lrange mylist 0 -1 1) "8" 2) "0"
3.向列表中插入元素
linsert key before|after pivot value
这是一个比较有意思的插入命令它可以从列表中从左往右查找到pivot的元素,然后判断是以before还是after来决定将value插入到该元素的前面还是后面。
127.0.0.1:6379> lrange mylist 0 -1 1) "8" 2) "0" 127.0.0.1:6379> linsert mylist before 0 7 (integer) 3 127.0.0.1:6379> lrange mylist 0 -1 1) "8" 2) "7" 3) "0"
相关文章推荐
- redis安装问题小结
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- win 7 安装redis服务【笔记】
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- 用Redis实现微博关注关系
- Redis实现信息已读未读状态提示
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法