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. 数组去重+indexOf()应用

    说起数组去重大家都不陌生,去重也有好多种方法,这里介绍很好理解的两种. 第一种 首先说一下第一种的逻辑,就是先拿第一个去跟第二个比,再跟第三个比,再跟第四个比--只要发现有相等的,可以用splice( ...

  2. Transact-SQL知识点梳理

    Transact-SQL基础语言 运行环境:SQL Server 语法约定: 语法约定 用途说明 大写字母 Transact-SQL关键字 斜体 用户提供的Transact-SQL语法参数 粗体 数据 ...

  3. Machine Learning &&Deep Learning&&Sklearn

    参考资料:https://github.com/ty4z2008/Qix/blob/master/dl.md https://morvanzhou.github.io/ 如图,先了解一下都有什么模型方 ...

  4. tornado之Hello world

    #!/usr/bin/env python26 #-*- coding:utf8 -*- import tornado.httpserver import tornado.ioloop import ...

  5. MySQL子查询优化实例

    优化:子查询改写成关联查询 线上遇到问题,查询较慢,如为对应SQL的查询执行计划: localhost.\G . row *************************** id: select_ ...

  6. raid卡MegaCli工具使用说明

    一.DELL&IBMMegaCli -AdpAllInfo -aALL —看配置项 #检查raid级别MegaCli -LDInfo -Lall -aALL | grep 'RAID Leve ...

  7. Orchard Core一分钟搭建ASP.NET Core CMS

    Orchard Core 是Orchard CMS的ASP.NET Core版本. Orchard Core是全新一代的ASP.NET Core CMS. 官方文档介绍:http://orchardc ...

  8. 《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue

    这篇文章来说说稍微复杂一些的LinkedBlockingQueue.LinkedBlockingQueue使用一个链表来实现,会有一个head和tail分别指向队列的开始和队列的结尾.因此Linked ...

  9. 《java.util.concurrent 包源码阅读》12 线程池系列之ThreadPoolExecutor 第二部分

    接着说worker线程是如何工作的.ThreadPoolExecutor有一个成员类叫Worker,所起到的作用就是线程池worker线程的作用. private final class Worker ...

  10. HTML基础上

    知识点一:HTML Hyper Text Markup Language 超文本标记语言. HTML标准结构: < ! doctype html> 声明文档类型 <html> ...