`

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运维与开发》读书笔记知识点梳理 #### 一、Redis-cli工具详解 - **基础使用**:`redis-cli`是Redis提供的命令行工具,用于与Redis服务器交互。 - `-h`: 指定Redis服务器的IP地址。 - `-p`: 指定...

      redis笔记xmind

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

      2.redis运维实战教程资料-详细课件笔记总结

      运维工程师,运维开发工程师,架构师,高级运维工程师 你将会学到: 掌握redis的安装部署、主从+哨兵模式、cluster集群模式的伸缩容,解决redis常见问题 课程简介: redis课程大纲内容如下: 1.redis的编译安装 2....

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

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

      redis学习笔记Redis.md

      ### Redis 学习笔记知识点概览 #### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only...无论是作为开发人员还是运维工程师,深入掌握 Redis 都能显著提高应用程序的性能和可靠性。

      运维笔记运维笔记运维笔记运维笔记

      本文旨在总结运维笔记中的一些重要知识点,涵盖 Linux 基础命令行、文件系统、压缩解压命令、系统磁盘、用户组群命令、正则表达式、Shell 脚本、NFS 服务配置、Nginx 基础、反向代理、负载均衡配置、Redis 基础、...

      Redis 题库 笔记 PDF文件电子版 494道题 2023年 精选 面试 自学 考试

      Redis Lua 脚本- Redis 位图操作- Redis 分布式锁- Redis 主从复制- Redis 集群- Redis Sentinel- Redis 高可用架构- Redis 性能优化- Redis 访问控制- Redis 监控与性能调优- Redis 安全配置- Redis 运维。...

      MySQL DBA运维笔记 超详细

      MySQL DBA运维笔记详细介绍了数据库相关的基础知识以及MySQL数据库的管理和操作技巧,以下是详细的知识点梳理: 1. 数据库的种类: 1.1 关系型数据库介绍:关系型数据库是以行和列的形式存储数据,支持复杂的查询...

      Linux云计算运维笔记

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

      狂神redis源码笔记.rar

      通过阅读“狂神redis源码笔记”和解压的“redis-study”文件,你将能够深入理解Redis的内部运作,掌握Java客户端的使用技巧,提升在实际项目中运用Redis的能力。这包括但不限于了解Redis的设计模式、源码实现细节、...

      主要记录一些JAVA笔记,运维笔记,前端笔记,以及面试突击训练

      运维笔记涉及的内容广泛,包括系统管理、网络配置、监控、自动化部署等。Kubernetes(K8S)是目前最流行的容器编排工具,它可以帮助管理和部署容器化的应用,实现服务的自动扩展和高可用性。 面试突击训练通常会...

      k8s(kubernetes)相关重要知识点运维笔记——详细文档

      k8s(kubernetes)相关重要知识点运维笔记——详细文档 本文档旨在总结 k8s(kubernetes)相关重要知识点,涵盖 ConfigMap 的概念、数据类型、应用场景、使用方式等。 ConfigMap 是 k8s 中的一种配置管理工具,...

      马哥2016运维笔记

      【马哥2016运维笔记】是一份包含丰富的Linux系统管理及运维技术的资料集,其中涵盖了多个关键的开源工具,如Nginx、Redis、Ansible、Zabbix、MySQL以及Keepalived等。这些工具在现代互联网环境中扮演着至关重要的...

      redis 详细实践笔记

      Redis 是一个高性能的键值对数据存储系统,常被用作数据库、...以上就是 Redis 实践笔记中关于主从部署、哨兵系统和集群部署的知识点概述,对于实际运维和开发来说,理解并掌握这些内容是构建高可用 Redis 系统的基础。

      linux运维学习笔记:数据库介绍与安装管理.pdf

      同时,应考虑开发人员开发的程序使用的版本与所选版本的兼容性,以及在实施新版本前先在内部测试环境中运行一段时间。此外,应该向经验丰富的数据库管理员(DBA)咨询或在技术社区中交流,以确保所选数据库版本的...

      linux运维学习笔记:MySQL运维基础面试问答题42题.pdf

      综上所述,这份学习笔记详细地覆盖了MySQL运维的各个方面,从基础概念、数据类型、数据库操作、安全加固、实例管理、日志管理等多个维度,为学习者提供了全面的参考资料。对于想要深入学习MySQL的运维人员来说,这份...

      MySQLDBA运维笔记

      MySQLDBA运维笔记是一份针对MySQL数据库管理员(DBA)的工作总结与指南,特别适合于入门级DBA以及对数据库管理感兴趣的初学者。该笔记详细地总结了日常工作中的问题,涵盖了从基础的数据库概念到高级的数据库管理...

      Redis数据库学习笔记

      在实际使用中,理解并掌握这些知识点能够帮助开发者更好地利用Redis数据库解决实际问题,同时也能够更高效地进行Redis的开发和运维工作。由于Redis的特性和性能优势,使得它在许多高性能应用场合中占据了一席之地。...

      网关 gateway 动态路由 及 redis 集成限流

      在现代微服务架构中,网关(如Spring Gateway)扮演着至关重要的角色,它作为系统的统一入口,负责处理请求路由、认证、限流等任务。...这些技术的结合使得微服务架构更加灵活和可控,为开发和运维提供了强大的支持。

      redis高可用笔记,包括RedisCluster集群方式和完全纯手写Redis缓存框架

      6. **客户端配置**:客户端需要适配这种模式,能够识别并连接到适当的Redis实例。 ### 高可用策略对比 Redis Cluster自动化程度较高,易于管理和扩展,但可能面临部分数据丢失的问题。手工搭建的缓存框架虽然灵活...

    Global site tag (gtag.js) - Google Analytics