redis 学习(5)-- 列表类型

列表特点

  • 有序、可以重复、左右两边插入弹出
  • 索引相关知识
    • 索引从左往右,从0开始逐个增大 0 1 2 3 4 5
    • 索引从右往左,从-1开始逐个减小 -6 -5 -4 -3 -2 -1

重要 API

命令 含义
rpush key value1 [value2...] 在列表后侧添加一个或多个值
lpush key value1 [value2...] 在列表左侧添加一个或多个值
linsert key before/after value newValue 在列表指定的value前/后插入newValue,时间复杂度为O(n)
lpop key 从列表左侧弹出一个值
rpop key 从列表右侧弹出一个值
lrem key count value 根据count值,从列表中删除值为value的项,时间复杂度为O(n)。count > 0 时,从左往右遍历,删除最多count个与value相等的值;count < 0 时,从右往左遍历,删除最多Math.abs(count)个与value相等的值;count = 0 时,删除所有与value相等的值
trim key start end 对一个列表进行修剪,只保留指定区间内的元素,不在区间内的元素都将被删除,时间复杂度为O(n)
lrange key start end 获取列表指定索引范围的所有元素,时间复杂度为O(n)
lindex key index 获取列表指定索引的元素,时间复杂度为O(n)
llen key 获取列表长度,时间复杂度为O(1)
lset key index newValue 设置列表指定索引的值为newValue,时间复杂度为O(n)。必须存在这个值才能设置成功,否则会报错
blpop key timeout 移除并获取列表左边第一个元素,如果列表没有元素会阻塞直到等待超时或可弹出元素为止。timeout单位为秒,timeout=0时不阻塞
brpop key timeout 移除并获取列表右边第一个元素,如果列表没有元素会阻塞直到等待超时或可弹出元素为止。timeout单位为秒,timeout=0时不阻塞

演示

实战

时间轴功能(TimeLine)

使用 lpush 更新,rpop、lpop 删除,lrange 做排序分页等。类似微博的发布信息流。

一些小建议

当我们想实现一些功能的时候,可以结果各种命令组合使用。

  1. LRUSH + LPOP = Stack (实现栈)
  2. LPUSH + RPOP = Queue (实现队列)
  3. LPUSH + LTRIM = Capped Collection (实现有固定数量的列表)
  4. LPUSH + BRPOP = Message Queue (实现消息队列)

redis 学习(5)-- 列表类型的更多相关文章

  1. redis学习-散列表常用命令(hash)

    redis学习-散列表常用命令(hash)   hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...

  2. 尚硅谷redis学习4-数据类型

    redis的数据类型包括String,Hash(类似于JAVA里的map),List,Set,Zset(sorted Set) String(字符串) string是redis最基本的类型,你可以理解 ...

  3. redis: List列表类型(四)

    list设置值(头部):lpush list one list设置值(尾部):**rpush ** list one list获取值:lrange list 0 -1 list获取指定范围的值:lra ...

  4. Redis 学习笔记-应用场景

    Redis作缓存系统 Redis可以对每个键设置生存时间 可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定规则自动淘汰不需要的键. 设置方法: 修改配置文件的maxmemory参数,限 ...

  5. Redis 学习开发笔记

    Redis特点: 1.速度快 2.支持丰富的数据类型:字符串.哈希列表.集合 3.操作具有原子性,所有Redis操作都是原子操作 4.多实用工具,可应用如缓存,消息队列,应用程序中任何短期数据,如we ...

  6. 玩一把redis源码(一):为redis添加自己的列表类型

    2019年第一篇文档,为2019年做个良好的开端,本文档通过step by step的方式向读者展示如何为redis添加一个数据类型,阅读本文档后读者对redis源码的执行逻辑会有比较清晰的认识,并且 ...

  7. Redis学习笔记(3) Redis基础类型及命令之二

    1. 集合类型 集合类型与列表类型有很多相似之处,但二者的区别在于:前者具有唯一性,但不具有有序性:后者具有有序性,但不具有唯一性.集合类型的常用操作是向集合中加入或删除元素.判断某个元素是否存在等, ...

  8. Redis常用命令入门3:列表类型

    列表类型 列表类型也是一个我们很长要用到的一个类型.比如我们发博客,要用到博客列表.如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键, ...

  9. Redis从基础命令到实战之列表类型(List)

    经过上一篇基于Redis散列类型的改造后,实战练习中的商品管理已经具备了增加.修改整体.修改部分属性和分页查询功能,但仍然不支持删除商品的功能.这是因为商品总数是以一个自增数字记录的,且关联了新商品k ...

随机推荐

  1. [题解] [AHOI2009] 跳棋

    题面 题解 分类讨论, 考虑到只要所有的偶数点上都有棋子, 最左边的棋子就可以跳到最右边 题目第一问让我们求最少的在白格子上必须放的棋子数(不用考虑行动中放的棋子数) 考虑到这几种情况 有不少于两个红 ...

  2. 8.3 CSS样式

    8.3 CSS样式 参考链接:http://how2j.cn/k/css2/css2-border/249.html 一.CSS有什么作用. 不使用css 给每一个单元格加上背景颜色 .就需要给每一个 ...

  3. 关于SpringBoot跨域的问题

    直接在启动类里面加这一段代码就行: @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource sourc ...

  4. C++入门经典-例8.6-多重继承的构造顺序

    1:单一继承是先调用基类的构造函数,然后调用派生类的构造函数,但多重继承将如何调用构造函数呢?多重继承中的基类构造函数被调用的顺序以派生表中声明的顺序为准.派生表就是多重继承定义中继承方式后面的内容, ...

  5. vue 混入 mixin,自定义指令,过滤器

    vue 混入 mixin ,分发 vue 组件中重复的功能 局部的书写格式 // mixin.js var mymixin = {  // 这是一个对象:对象里面的写法与组件里面的写法一模一样,组件该 ...

  6. wait/notify模拟连接池

    连接池中的连接可重复使用,减少每次新建和烧毁连接对资源的消耗,但连接池的容量大小也要设置合理,否则也会占用多余的资源.连接池的基本功能是获取连接和释放连接 连接在java中也是一个类,连接对象是一个普 ...

  7. koa 基础(十八)es6中的类、静态方法、继承

    1.app.js /** * es6中的类.静态方法.继承 */ // 定义Person类 class Person { constructor(name, age) { /*类的构造函数,实例化的时 ...

  8. PHP中try catch的用法

    异常(Exception)用于在指定的错误发生时改变脚本的正常流程. 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这 ...

  9. cookie、session的联系和区别,多台web服务器如何共享session

    1.Cookie与Session的联系: cookie在客户端保存状态,session在服务器端保存状态.但是由于在服务器端保存状态的时候,在客户端也需要一个标识,所以session也可能要借助coo ...

  10. leetcode探索中级算法

    leetcode探索中级答案汇总: https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/ 1)数 ...