1、简单介绍

  redis的list类型其实就是一个每个元素都是string类型的双向链表。所以lpush、rpush、lpop和rpop命令的时间复杂度是O(1),list会记录链表的长度,所以llen操作也是O(1)的时间复杂度。链表的最大长度是2的32次方减1,。list类型可以用作队列或者栈。list还有阻塞版本,就是说如果队列为空,就会等待直到超时或者有数据放入队列。阻塞版本的好处是避免轮询,当有数据时,工作线程可以马上返回,避免轮询带来的延时。

2、相关命令

1)lpush命令:加入一个元素到左边的头部

2)rpush命令:加入一个元素到右边的底部

【注意】为了避免头部底部混乱,这里统一把左边的认为是头部,右边是底部,下面也是按照这样的做法。

3)lpop命令:从左边头部取出第一个元素

4)rpop命令:从右边底部取出第一个元素

5)lrange命令:从左边开始列出list的元素

6)llen命令:获取list的长度。

【注意】头部也就是左边的第一个元素下标为0,而底部也就是右边的第一个元素的下标为-1

7)ltrim命令:截取队列,保留一部分,即保留两个下标之间的数据

【注意】lpush和rpush可以添加多个元素,pop操作只允许取一个元素

8)lrem命令:删除count个值为value的元素

9)blpop命令:阻塞模式下从队list头部(左边)获取元素,如果队列为空或者不存在,则会等待timout然后返回空值或者等到了有操作push数据到队列。

【注意】blpop命令可以读取多个list,比如blpop list1 list2 list3 ,如果list1存在且不为空,则从list1上读取一个元素马上就返回了。如果list1不存在或者为空,则去list2获取,如果list2获取不到就去list3如此循环,直到能获取到元素,或者list1-list3全不存在或全是空,此情况下会阻塞等待timeout时间。如果在此时间内,有操作push数据到某一个list。那么之前阻塞在这个队列上的第一个clinet会获取到数据并马上返回。

10)brpop命令与blpop命令相似,不同处是取数据是从底部取。

11)rpoplpush命令:从第一个list的底部取出一个元素,加入到第二个list的头部。整个操作是原子的。

3、小结

1)注意下标问题:从做到右,左边下标是从0开始,右边到左边的下标是从-1、-2、-3这样到左边。

redis的list类型的更多相关文章

  1. 深入浅出Redis04使用Redis数据库(lists类型)

    一  lists类型及操作 List是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中key理解为链表的名字. Redis的list类型其实就是一个每个子元素都是sring类 ...

  2. 【redis】03list类型

    list类型 redis的list类型是一个链表结构,他的主要功能是push.pop.获取一个范围的所有值等等一些操作, 咱们push什么意思,push是不是相当于咱们php里面的array_push ...

  3. redis的lists类型

    List是一个链表结构 , 主要功能是push . pop .获取一个范围的所有值等等 , 操作中key理解为链表的名字 . redis 的 list类型其实就是一个每个子元素都是string类型的双 ...

  4. redis的set类型

    1.简单描述 redis的set类型是string类型数值的无序集合.set元素最大可以包含2的32次方减1个元素.由于set类型是通过hash table实现(旧版本是这样,新版本不确定是不是改用了 ...

  5. redis数据类型-字符串类型

    Redis数据类型 字符串类型 字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据.你可以用其存储用户的邮箱.JSON化的对象甚至是一张图片.一个字符串类型键允许存储的 ...

  6. 使用Redis数据库(String类型)

    一 String类型 首先使用启动服务器进程 : redis-server.exe 1. Set 设置Key对应的值为String 类型的value. 例子:向 Redis数据库中插入一条数据类型为S ...

  7. 第二百九十七节,python操作redis缓存-List类型,可以理解为列表

    python操作redis缓存-List类型,可以理解为列表,是可以有重复元素的列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name ...

  8. 第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

  9. [redis] redis 对string类型数据操作

    package com.xwolf.java.redis; import org.junit.Before; import org.junit.Test; import redis.clients.j ...

随机推荐

  1. linux系统下手动安装Angular-cli

    安装Angular-cli 背景 由于公司linux服务器没有外网,无法通过npm包管理器直接安装,只能手动安装一个Angular-cli平台环境! 安装步骤 1. 先再linux系统下安装好node ...

  2. 自定义view-滑动开关

    介绍 前段时间,我看到了一篇关于可滑动开关Switch组件的文章,效果图如下: 思路也挺简单的:这个控件主要由田径场式背景和滑块组成.他将田径场式背景分为3部分,最左边的半圆,中间的两条直线部分和最右 ...

  3. MySQL 2006 超时

    http://ronaldbradford.com/blog/sqlstatehy000-general-error-2006-mysql-server-has-gone-away-2013-01-0 ...

  4. C#中RichEdit控件,保存文本和图片到mysql数据库

    分别通过内存流和RTF文件保存 方法1: //建立内存流 MemoryStream ms = new MemoryStream(); //ms.Position = 0; //把当前的richtext ...

  5. Did you forget about DBModel.InitializeModel the model [AAAdm] ?

    AIO5安装完毕后登陆出现以下报错:Did you forget about DBModel.InitializeModel the model [AAAdm] ? 说明: 执行当前 Web 请求期间 ...

  6. [flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法

    一周时间快速阅读了400页的<javascript基础教程>,理解了主要概念.虽然对jquery.ajax.json这些方法的运用还不熟练,但在理清了概念之后解决了一个很久之前的疑问. 我 ...

  7. CDH升级

    升级主要分为两部分1.CM的升级.2.CDH的升级 CM的升级 两种升级方法 1.使用package 2.使用Tarballs升级方法,参照官方升级指引,Tarball中包含了Cloudera Man ...

  8. python3 中encode 和decode的使用方法。

    编码: 将文本转换成字节流的过程.即Unicode----------->特定格式的编码方式,产生特定的字节流保存在硬盘中(一般为utf-8格式). 解码: 将硬盘中的字节流转换成文本的过程.即 ...

  9. 40.Linux应用调试-使用gdb和gdbserver

    1.gdb和gdbserver调试原理 通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用 ...

  10. PDFBox 打印带背景的文件速度慢

    打印慢的原因 java的RasterPrinterJob会执行很多次printPage方法 他应该是按块填充的, 如果页面元素非常复杂, 那么printPage方法可能会执行十几次. 而如果你用了如下 ...