`

浅谈redis数据结构之列表

阅读更多

1. 列表

       上一篇文章:浅谈redis数据结构之字符串。本篇文章我们谈谈列表。

       列表(list)类型是用来存储多个有序的字符串。列表是一种比较灵活的数据结构,它可以充当栈(Stack)和队列(Queue)的角色,在实际开发上有很多应用场景。

       在redis中,可以对列表的两端进行push和pop操作,还可以获取指定范围的元素列表、获取指定索引下标的元素等。下面通过一个简单的例子,说明下这些个操作:假如有a,b,c,d,e五个元素从左往右组成一个有序的列表,极限情况,这个列表可以存储2 ^ 32 - 1个元素。

 

  • 列表的push和pop

 

  • 列表的获取/截取/删除

 

2. redis中列表的操作命令

       针对列表的五种操作类型,redis提供的操作命令如下图所示:

 

       具体基础命令操作如下图所示:

 

 

 

 

      基础命令介绍完了,下图给出了这些基础命令的时间复杂度

 

3. 内部编码

3.1 ziplist

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

3.2 linkedlist

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

利用上面基础命令操作完的列表,做个编码转换的展示,如下图所示:

 

 

       Redis3.2版本提供了quicklist内部编码,简单地说它是以一个ziplist为节点的linkedlist,它结合了ziplist和linkedlist两者的优势,为列表类型提供了一种更为优秀的内部编码实现。

 

4. 应用场景

4.1 消息队列

       通过Redis的lpush + brpop命令组合,即可实现阻塞队列。如图所示:

 

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

 

4.2 其他场景

      实际上列表的使用场景很多,具体可以参考如下:

 

5. 后续

       下一篇文章中,我们研究下哈希类型的数据结构:浅谈redis数据结构之哈希

分享到:
评论

相关推荐

    redis数据结构服务器

    Redis是一款开源的、高性能的...Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作

    go&redis数据结构的底层实现.docx

    go&redis数据结构的底层实现.docx

    Redis数据结构.pptx

    针对Redis的高级数据结构PPT。该PPT一共14页,介绍了Zset的数据结构类型,以及跳表的数据结构。简单阐述了BitMap,HLL,Bloom Filter的原理以及一些常用的指令。针对Bloom Filter有一些自己的见解以及分析

    redis数据结构

    自己整理的redis自定义的数据结构,对理解redis运行的内部原理会有所帮助

    数据结构Redis中数据类型对应的数据结构.pdf

    数据结构 数据结构Redis中数据类型对应的数据结构 中数据类型对应的数据结构 Redis Redis 是⼀种键值(Key-Value)数据库。相对于关系型数据库(⽐如 MySQL),Redis 也被叫作⾮关系型数据库。 像 MySQL 这样的关系...

    Redis数据结构与对象总结

    Redis数据结构与对象总结 数据结构与对象 简单动态字符串 SDS简介 SDS与C字符串的区别 常数复杂度获取字符串长度 O(n) O(1) 杜绝缓冲区溢出 修改字符串长度时内存重分配 空间预分配:对字符串进行增长操作时...

    01-VIP-Redis核心数据结构与核心原理1

    Nginx也是采用IO多路复用原理解决C10K问题# 查看redis支持的最大连接数,在redis.conf文件中可修改,# maxclients 10000其

    详解redis数据结构之压缩列表

    详解redis数据结构之压缩列表 redis使用压缩列表作为列表键和哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项都是由小整数值或者是短字符串组成,那么redis就会使用压缩列表存储列表项;同理...

    01-Redis核心数据结构实战与高性能原理剖析-ev.rar

    01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心...

    3.Redis数据类型之List类型

    3.Redis数据类型之List类型

    Redis基础数据结构.pptx

    详细分析redis设计及实现原理 详细分析redis设计及实现原理

    十五分钟介绍-Redis数据结构.pdf

    十五分钟介绍-Redis数据结构

    redis数据结构.pdf

    Redis数据结构和操作 redis不只是一个简单的键(key)-值(value)数据库,实际上它是一个数 据结构服务器,支持各种类型的值。也就是说,在传统的键-值数据库 中,你把字符串键与字符串值联系起来,而在redis,值不仅...

    详解redis数据结构之sds

    详解redis数据结构之sds  字符串在redis中使用非常广泛,在redis中,所有的数据都保存在字典(Map)中,而字典的键就是字符串类型,并且对于很大一部分字典值数据也是又字符串组成的。以下是sds的具体存储结构: ...

    redis2json:以JSON格式导出Redis数据

    例如: ./redis_to_json.py | gzip > redis_backup.json.gz这对于您正在使用但又不想丢失数据的应用程序也很不错,因为Redis RDB文件并不总是那么方便。注意事项和注意事项u()中的Unicode支持仅适用于Python2.x。...

    redis基础数据结构讲解

    本文主要介绍redis的几种数据类型和适用场景。会列出简单例子,具体的redis函数不会一一介绍。不过这些简单的例子基本上满足80%以上的项目。

    redis数据结构基础知识及案列(每个数据结构一个案例).zip

    redis数据结构基础知识及案列(每个数据结构一个案例)

    Redis 数据结构1

    Redis
底层网络模型为单线程+epoll,也就是说,发送至
Redis
的命令是执的若采用直接扩容的方式,那么当遇到巨大的哈希表时,数据的复制将花费很长时间

Global site tag (gtag.js) - Google Analytics