美文网首页Redis
redis-API-列表

redis-API-列表

作者: PHP的艺术编程 | 来源:发表于2018-12-12 15:01 被阅读1次

文档地址

列表.png
列表类型有两个特点:

第一、列表中的元素是有序的,这就意味着可以
通过索引下标获取某个元素或者某个范围内的元素列表。

第二、列表中的元素可以是重复的,

内部编码

列表类型的内部编码有两种。
  • ziplist(压缩列表):
    当列表的元素个数小于list-max-ziplist-entries配置
    (默认512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时
    (默认64字节),Redis会选用ziplist来作为列表的内部实现来减少内存的使
    用。

  • linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用
    linkedlist作为列表的内部实现。

使用说明

1.消息队列
生产者消费者模式:

生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有;(lpush+brpop)

发布者订阅者模式:

发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的;(Subscribe)

Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。

2.文章列表

每个用户有属于自己的文章列表,现需要分页展示文章列表。此时可以
考虑使用列表,因为列表不但是有序的,同时支持按照索引范围获取元素。

设计方式:

对于文章的内容可以使用哈希去存储,一个用户可以使用一个列表保存

使用

使用lrange取文章的列表

问题
  • 如果每次分页获取的文章个数较多,需要执行多次hgetall操作,此时可以考虑使用
    Pipeline批量获取,或者考虑将文章数据序列化为字符串类
    型,使用mget批量获取。

  • 分页获取文章列表时,lrange命令在列表两
    端性能较好,但是如果列表较大,获取列表中间范围的元素性能会变差,此
    时可以考虑将列表做二级拆分,或者使用Redis3.2的quicklist内部编码实现,
    它结合ziplist和linkedlist的特点,获取列表中间范围的元素时也可以高效完
    成。

使用总结

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpsh+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

相关文章

  • redis-API-列表

    文档地址 列表类型有两个特点: 第一、列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的...

  • Redis-API-哈希

    哈希,也叫作字典或关联数组,指的是健值本身又是一个键值对结构。伪代码如下: 命令 设置值 获取值 删除字段 计算个...

  • redis-API-集合

    文档地址 内部编码 intset(整数集合): 当集合中的元素都是整数且元素个数小于set-maxintset-e...

  • redis-API-哈希

    文档地址 内部编码 ziplist(压缩列表) hashtable(哈希表) 编码的选择 内部编码默认是zipli...

  • redis-API-有序集合

    内部编码 ziplist(压缩列表): 当有序集合的元素个数小于zset-max-ziplistentries配置...

  • redis-API-全局命令

    单线程架构 纯内存 非阻塞i/o 单线程避免了线程切换和竟态产生的消耗 概要: 使用多路复用技术 全局命令 查看所...

  • Redis-API-全局变量

    全局命令 Redis 有 5 种数据结构,它们是键值对中的值,对于键来说有一些通用的命令。 查看所有的键 键的总数...

  • Redis-API-字符串

    字符串的值能够表示数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值不能超过512MB。 命令 设置值...

  • redis-API-字符串

    值最大不能超过512MB 设置值 setex和setnx set key value [ex 秒] [px 毫秒]...

  • Markdown 系列(三) 列表

    无序列表 由圆点组成的列表 列表1 列表2 列表3 列表1 列表2 列表3 列表1 列表2 列表3 +-*这三种符...

网友评论

    本文标题:redis-API-列表

    本文链接:https://www.haomeiwen.com/subject/pxxphqtx.html