列表类型

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

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

1、增加元素命令

向列表两端添加元素:

redis> lpush key value [value ...]
redis> rpush key value [value ...]

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

C:\Program Files\Redis>redis-cli.exe
127.0.0.1:> keys *
(empty list or set)
127.0.0.1:> lpush mylist
(integer)
127.0.0.1:> rpush mylist
(integer)
127.0.0.1:> lpush mylist - -
(integer)
127.0.0.1:> lrange mylist -
) "-2"
) "-1"
) ""
) ""

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

2、弹出元素命令

redis> lpop key
redis> rpop key

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

127.0.0.1:> lrange mylist  -
) "-2"
) "-1"
) ""
) ""
127.0.0.1:> lpop mylist
"-2"
127.0.0.1:> rpop mylist
""
127.0.0.1:> lrange mylist -
) "-1"
) ""

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

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

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

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

redis> llen key

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

127.0.0.1:> llen mylist
(integer)

4、获取列表片段

redis> lrange key start stop

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

127.0.0.1:> lrange mylist  -
) "-1"
) ""

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

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

这里应该很好理解了,特殊说明一下index如果是负值的话就是从右边开始计算索引,和lrange的负值是一个意思。

127.0.0.1:> lrange mylist  -
) ""
) "-1"
) "-2"
) "-3"
127.0.0.1:> lindex mylist
""
127.0.0.1:> lindex mylist
"-3"
127.0.0.1:> lindex mylist -
"-3"

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

redis> ltrim key start end

这里也不做特殊说明了。

127.0.0.1:> lrange mylist  -
) ""
) "-1"
) "-2"
) "-3"
127.0.0.1:> lindex mylist
""
127.0.0.1:> lindex mylist
"-3"
127.0.0.1:> lindex mylist -
"-3"
127.0.0.1:> ltrim mylist
OK
127.0.0.1:> lrange mylist -
) ""
) "-1"
) "-2"

8、向列表中插入元素
现在我们列表中的值是0,-1,-2

redis> linsert key before|after pivot value
127.0.0.1:> linsert mylist before
(integer) 4 //在0值前面插入1
127.0.0.1:> lrange mylist -
) ""
) ""
) "-1"
) "-2"
127.0.0.1:> linsert mylist after
(integer) 5 //在值为1的后面插入1
127.0.0.1:> lrange mylist -
) ""
) ""
) ""
) "-1"
) "-2"
127.0.0.1:> linsert mylist after - -1.5
(integer) 6 //在值为-1的后面插入-1.5
127.0.0.1:> lrange mylist -
) ""
) ""
) ""
) "-1"
) "-1.5"
) "-2"

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

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

redis> rpoplpush source destination

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

到这里我们列表类型的命令就都介绍完了,是不是很简单呢~

Redis常用命令入门3:列表类型的更多相关文章

  1. Redis常用命令入门1:字符串类型命令

    Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号 ...

  2. Redis常用命令入门5:有序集合类型

    有序集合类型 上节我们一起学习了集合类型,感受到了redis的强大.现在我们接着学Redis的最后一个类型——有序集合类型. 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序 ...

  3. Redis常用命令入门4:集合类型

    集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ...

  4. Redis常用命令之操作String类型

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  5. Redis常用命令入门——列表类型(一级二级缓存技术)

    获取列表片段 redis > LRANGE KEY_NAME START END lrange命令比较常用,返回从start到stop的所有元素的列表,start和stop都是从0开始. (1) ...

  6. Redis常用命令入门2:散列类型

    散列命令 散列类型的键值其实也是一种字典解耦,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,所以说散列类型不能嵌套其他的数据类型.一个散列类型的键可以包含最多2的32次方-1个 ...

  7. Redis常用命令

    Redis常用命令Redis提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以再Linux终端使用.1.键值相关命令2.服务器相关命令 一.键值相关命令 1.get get 键值 当 key ...

  8. 第2讲 Redis常用命令与高级应用

    目录 一.redis数据类型 5. sorted sets类型和操作 二.Redis常用命令 1.键值相关命令 2.服务器相关命令 三. redis高级应用 1. 给redis服务器设置密码 2.持久 ...

  9. Redis常用命令与高级应用

    附: 127.0.0.1:6379> set xiaofei 小飞 OK 127.0.0.1:6379> get xiaofei "\xe5\xb0\x8f\xe9\xa3\x9 ...

随机推荐

  1. T-sql 查询

    ------------------case---when-------的使用--------------------- select  userAccount , eatingDate ,    c ...

  2. Prince2七大主题之风险

    Prince2七大主题之风险   我们前几个节学习了PRINCE2七大主题的商业论证.组织.质量和计划,今天我们开展对于风险模块的讲解. 风险:目的是识别.评估和控制不确定性,从而提高项目的成功率.P ...

  3. sqlserver2008一直显示正在还原

      sqlserver2008一直显示正在还原.如果不需要还原,则使用: restore database test with recovery如果只需要还原,则使用: restore databas ...

  4. 关于iOS 10不能跳转设置的解决办法

    NSURL*url=[NSURL URLWithString:@"Prefs:root=WIFI"];  Class LSApplicationWorkspace = NSClas ...

  5. IoC、DI、AOP

    相信学习Java语言的同学都对这三个概念不太陌生.下面用spring的例子简单说明这三个概念. IoC(Inversion of Control):控制反转.正常情况(控制未反转)下,如果servic ...

  6. 对线程等待函数pthread_join二级指针参数分析

    分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...

  7. R画图中英文字体完美解决方案

    在某些时候,需要在R画图中添加中文,但是默认情况下,R对中文的支持不好. 当用R画PDF图,并且图中有中文的时候,安装并加载如下包library(showtext)然后:showtext.auto(e ...

  8. C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。

    作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1)    输入10个无序的整数.(2)    用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3)    要求任意输入一个整数 ...

  9. Java GUI编程

    ----基础 // 创建一个窗体对象        JFrame frame = new JFrame();        // 设置窗口大小        frame.setSize(300, 20 ...

  10. OpenCV2+入门系列(一):OpenCV2.4.9的安装与测试

    这里假设看到这篇文章的人都已经对OpenCV以及机器视觉等最基础的概念有了一定的认识,因此本文不会对OpenCV做任何的介绍,而是直接介绍OpenCV2.4.9的安装与测试.此外本文只是简单的介绍如何 ...