`

Redis开发与运维读书笔记之六

 
阅读更多
第2章 API的理解和使用 第4部分

列表List

List用来存储多个有序的字符串。列表中每个字符串称为元素element.
一个List最多可以存储2^32 - 1个元素。
可以在List两端插入push弹出pop
List可以充当栈和队列的角色
List的特点:
  • List中的Element是有序的,可以通过索引下标获取某个Element或某个范围内的Element List
  • List中的Element是可以重复的

命令
[list]
  • 添加
  • 从右边添加Element
    rpush key value [value ...]

    从左到右列出List的所有Element
    lrange listkey 0 -l

    从左边添加Element
    lpush key value [value ...]

    向某个Element前或后插入Element
    linsert key before|after pivot value

    pivot为指定的某个元素
  • 查找
  • 指定范围内的Element List
    lrange key start end

    索引下标从左到右为从0到N-1,从右到左是-1到-N,end包含了自身

    获取List指定索引下标的Element
    lindex key index

    获取List长度
    llen key

  • 删除
  • 从List左侧pop Element
    lpop key

    从List右侧pop Element
    rpop key

    删除指定Element
    lrem key count value

    从List中找到值为value的element删除,根据count不同分为三种情况
    • count>0:从左到右,最多删除count个Element
    • count<0:从右到左,最多删除count个element
    • count=0:删除所有

    按照索引范围修剪List
    ltrim key start end

  • 修改
  • 修改指定索引下标的element
    lset key index newValue

  • 阻塞
  • blpop key [key ...] timeout
    brpop key [key ...] timeout
    

    timeout的单位为秒
    • List为空:timeout=0,客户端会一直阻塞;timeout=3,会等待3秒后返回
    • List不为空:timeout=0,客户端立即返回

    如果使用brpop时:
    • 如果是多个键,brpop会从左到右遍历所有键,一旦有一个键能弹出element,客户端立即返回
    • 如果多个客户端对同一个键执行brpop,最先执行brpop命令的客户端可以获取到pop的值

    [/list]

    内部编码
    • ziplist:当list的element个数少于list-max-ziplist-entries配置(默认512个),同时列表中每个element的值都小于list-max-ziplist-value配置(默认64个字节),Redis会选用ziplist作为List的内部实现来减少内存的使用
    • linkedlist:当List类型无法满足ziplist的条件,Redis会选用linkedlist作为List的内部实现
    • quicklist:Redis3.2采用,是一个ziplist为节点的linkedlist,结合了两者的优势


    使用场景
    • 消息队列:lpush+brpop组合可以实现阻塞队列,生产者客户端使用lrpush从List左侧插入Element,多个消费者客户端使用brpop命令阻塞式抢List右侧的element,多个客户端保证了消费的负载均衡和高可用
    • 文章列表:每个用户都有属于自己的文章列表,需要分页展示文章列表,可以使用List,因为List不但是有序的,还支持按照索引范围获取element:
    • [list]
    • 每篇文章使用Hash结构存储
    • 向用户文章列表添加文章使用lpush
    • 分页获取用户文章列表使用lrange

    注意:如果每次分页获取文章个数较多,使用hgetall效率较低,可以考虑使用pipeline批量获取,或者将文章数据序列化,使用mget批量获取。
    lrange在List两端性能较好,List中间性能较差,可以考虑使用Redis3.2的quicklist内部编码实现,效率较高。
    [/list]

    • lpush+lpop = Stack(栈)
    • lpush+rpop = Queue(队列)
    • lpush+ltrim = Capped Collection(有限集合)
    • lpush+brpop = Message Queue(消息队列)
    分享到:
    评论

    相关推荐

      《redis运维与开发》读书笔记

      《redis运维与开发》读书笔记 (1)Redis-cli • -h 服务端ip • -p 端口 • -r (repeat)将命令执行多次。redis-cli -r 3 ping • -i (interval)每个几秒执行几次。redis-cli -r 5 -i 1 ping • -a (auth)...

      redis笔记xmind

      是根据《redis开发与运维》一书和其他redis书摘抄的记录综合的笔记

      redis性能调优参考.pdf

      redis性能优化参考,主要是自己看redis开发与运维时做的读书笔记....拿出来分享...希望各位多多指教.

      前后端分离部署与运维总结笔记

      笔记是本人工作期间总结的所有部署与运维的方法,我相信能帮助大家的! 其中重点讲解了以下的步骤: 一、PXC集群安装 二、MySQL集群安装 三、RedisCluster集群安装 四、后端项目上线方法

      Linux云计算运维笔记

      Ansible自动化运维平台 CI和CD代码管理平台 Docker容器实战部署 Kubernetes云计算实战 Linux常用服务器部署实战 Linux系统管理宝典 Linux系统资源限制与加固 MySQL数据库实战 Redis数据库实战 shell脚本高手速成 Web...

      redis入门学习笔记

      redis入门学习笔记化运维,非常不错,适合新手的,建议下载

      马哥2016运维笔记

      笔记包括nginx Redis ansible zabbix mysql keepalived 等。

      Linux运维工程师私人笔记,全部MD格式

      Ansible自动化运维平台 CI和CD代码管理平台 Docker容器实战部署 Kubernetes云计算实战 Linux常用服务器部署实战 Linux系统管理宝典 Linux系统资源限制与加固 MySQL数据库实战 Redis数据库 shell脚本高手速成 Web大...

      cent7.3-redis集群5.0.0搭建-详细笔记文档

      cent7.3-redis集群5.0.0搭建-详细笔记文档

      linux中高级运维笔记(二)

      运维和管理企业Linux 服务器,除了要熟练Linux 系统本身的维护和管理之外,最重要 的是熟练甚至精通基于Linux 系统安装配置各种应用软件,对软件进行调优以及软件在使用 中遇到各类问题,能够快速定位并解决问题。 ...

      docker安装redis4.0.10-单点持久化详细笔记

      docker安装redis4.0.10-单点持久化详细笔记

      97 Things Every Programmer Should Know 等 24 本书

      Redis开发运维实践指南.epub Scala 初学指南.epub Spring Batch 参考文档中文版.epub Stackoverflow about Python 中文版.epub Swift设计模式 (iOS).epub txt.txt Webpack 中文指南.epub 使用Spring Cloud与Docker...

      百度地图开发java源码-MD-Notes:计组、操作系统、数据结构、网络IO、Redis、MySQL、JVM等笔记

      百度地图开发java源码 MD-Notes:后端笔记总结 关于 MD-Notes: 业余时间学习技术的同时,做一些记录和总结并乐于分享。 日常主要接触 Web 前后端开发、Linux 运维等,有 Java / Python 后端经验,有大数据开发 ...

      小白图书笔记本管理Java系统Vue + Spring Boot 项目实战

      后台管理模块的常见功能与布局(内容管理、用户\权限管理、运维监控) 用户身份验证、授权、会话管理与信息加密存储 Shiro 框架的使用 实现不同粒度的访问控制(动态菜单、功能控制、数据控制)1.前端技术栈 1.Vue....

      Learning-Notes:学习笔记

      学习笔记 后端开发 Java maven netty Redis Spring Spring4新特性 Spring使用注意事项 Spring验证Validation SpringBoot 开发知识 相关技术名词 开发技术框架工具整理 架构知识 开发过程注意事项整理 常用开发技巧 ...

      notes:我的笔记-PWA笔记本

      开发运维 地理信息系统 集成开发环境 3D 资源 概念 统一 虚拟现实 云 云 蔚蓝 Kubernetes 语言能力 Java s VueJS 打字稿 React p Cpp C# F# 去 斯威夫特/ iOS Python 降价促销 SQL Kotlin 锈 平台...

      OpenStack_Learning:OpenStack学习资源

      自动化运维 ansible 博客 OpenStack博客资源 sammyliu Ustack官方博客 OpenStack Hack养成指南(from Ustack) bingotree Kong令贤 虚拟机创建的50个步骤和100个知识点 中科院-刘冬 Neutron、Ceilometer运行机制 臭蛋 ...

      leetcode题库-blog:博客

      笔记 Kubernetes 使用 Kubernetes 开发 Kubernetes 源码分析 Docker Docker 原理相关 Bash Linux Linux gawk 由于 gawk 语言太过强大,想了想还是把它单独拎出来说。 关于 gawk 与 awk 的区别:gawk(GNU Awk) 是 ...

      Docker企业应用实战

      其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率。 本课程以通俗易懂的方式讲解Docker容器技术,最适合初学者的教程,让你少走弯路! 快速入门掌握Docker...

      AgeFades-Note:记录AgeFades学习成长笔记

      Java重点: SpringBoot 整合各大流行框架、项目的架构实战经验开阔视野、对各项 Java圈子技术的学习与记录。前端重点: 对当下流行的 Vue + React 的学习记录目的: 为了更好了解前端同事行为,完成工作任务需求。运维...

    Global site tag (gtag.js) - Google Analytics