`
caiwb1990
  • 浏览: 308109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Redis基础数据结构_list

阅读更多
Redis 的列表相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n),这点让人非常意外。

当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。




Redis 的列表结构常用来做异步队列使用。将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理。

右边进左边出:队列
> rpush books python java golang
(integer) 3
> llen books
(integer) 3
> lpop books
"python"
> lpop books
"java"
> lpop books
"golang"
> lpop books
(nil)


右边进右边出:栈
> rpush books python java golang
(integer) 3
> rpop books
"golang"
> rpop books
"java"
> rpop books
"python"
> rpop books
(nil)


慢操作

lindex 相当于 Java 链表的get(int index)方法,它需要对链表进行遍历,性能随着参数index增大而变差。

ltrim 和字面上的含义不太一样,个人觉得它叫 lretain(保留) 更合适一些,因为 ltrim 跟的两个参数start_index和end_index定义了一个区间,在这个区间内的值,ltrim 要保留,区间之外统统砍掉。我们可以通过ltrim来实现一个定长的链表,这一点非常有用。

index 可以为负数,index=-1表示倒数第一个元素,同样index=-2表示倒数第二个元素。
> rpush books python java golang
(integer) 3
> lindex books 1  # O(n) 慎用
"java"
> lrange books 0 -1  # 获取所有元素,O(n) 慎用
1) "python"
2) "java"
3) "golang"
> ltrim books 1 -1 # O(n) 慎用
OK
> lrange books 0 -1
1) "java"
2) "golang"
> ltrim books 1 0 # 这其实是清空了整个列表,因为区间范围长度为负
OK
> llen books
(integer) 0

快速列表



如果再深入一点,你会发现 Redis 底层存储的还不是一个简单的 linkedlist,而是称之为快速链表 quicklist 的一个结构。

首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成 quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间,而且会加重内存的碎片化。比如这个列表里存的只是 int 类型的数据,结构上还需要两个额外的指针 prev 和 next 。所以 Redis 将链表和 ziplist 结合起来组成了 quicklist。也就是将多个 ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余
  • 大小: 119.9 KB
  • 大小: 11.8 KB
分享到:
评论

相关推荐

    Redis-begin.zip_Redis java_adodb REDIS_java redis_redis_site:www

    在很多时候,人们只是将Redis视为Key/Value数据库服务器,然而事实并非如此,在目前的版本中,Redis除了Key/Value之外还支持List、Hash、Set和Ordered Set等数据结构,因此它的用途也更为宽泛。对于此种误解,Redis...

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

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

    Redis内部数据结构详解(6)——skiplist1

    1. 介绍经典的skiplist数据结构,并进简单的算法分析 2. 讨论Redis的skiplist的具体实现 3. 讨论sorted set是如何在skipl

    redis数据结构.pdf

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

    Redis_Window

    Redis是一个开源的试用ANSI ...2、redis不仅支持简单的key-value类型的数据,同时还支持list、set、zset、hash等数据结构的存储。 3、redis支持数据的备份,即master-slave模式的数据备份。 Redis Window下的安装

    redis的五大数据结构.xmind

    redis内存缓存数据库五大数据结构: String ------> 字符串  Hash ------> 哈希  List ------> 列表  set ------> 集合  Zset ------> 有序集合

    Redis List 数据结构的优越感

    Redis List 实现负载均衡 前言 需求 业务需求:从1000条用户登录记录中选择最新登录的前5个用户 PS:(默认使用mysql数据库) select * from user order by loginTime desc limit 5 为了解决查询效率,你可能会设置...

    Redis之基本数据结构

    相当于LinkedList队列-右边进左边出栈-右边进右边出ltrim截取hash字典-相当于hashmapset集合-相当于hashSetzset有序集合-相当于sortedSet容器型数据结构通用规则 如果不能深入地了解系统,技术和框架背后的深层原理...

    Redis常见面试题汇总.pdf

    Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现-个轻量 级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存 入的Key-Value设置expire时间,因此也可以被...

    redis可视化工具、免费.中文

    Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 性能极高 – Redis能读的速度是110000次/s,写的速度是81000...

    redis win10 安装包

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-...Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。

    Redis下载安装(Windows)

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-...Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。

    Redis教程(内含各种数据结构详细的操作命令)

    1、redis概述和安装 1.1、安装redis 1.2、启动redis 1.3、关闭redis 1.4、进入redis命令窗口 1.5、redis命令大全 1.6、redis介绍相关知识 2、redis 5大数据类型 ...2.2.3、数据结构 2.3、redis列表(List)

    redis基础.doc

    set、zset 等多种数据结构,可以满足很多应用场景。还提供了键过期,发布订阅,事务, 流水线,等附加功能, 流水线: Redis 的流水线功能允许客户端一次将多个命令请求发送给服务器, 并将被执行的多个命令请求的结果...

    详解Redis中的双链表结构

    Redis中双链表实现的基本结构: 1.节点结构 typedef struct listNode { struct listNode *prev; //前向节点 struct listNode *next; //后向节点 void *value; //该节点的值 } listNode; 2.双向链表结构 ...

    redis面试题.txt

    Redis面试题通常涉及Redis的基本概念、数据结构、持久化、主从复制、高可用性等方面的知识。以下是一个关于Redis面试题的例子: 1. Redis的优势是什么? Redis具有以下几个优势: - 高性能:Redis是基于内存的...

    Redis中最常用的String数据结构.docx

    不管你是否真的理解了,这个回答足以应付一半以上的面试官了,但是如果可以再进行补充就更好了:因为Redis对各种数据结构进行了精心的设计,比如String采用的是SDS,比如list采用的是ziplist,quicklist等等,可能...

    Windows 64位 Redis-3.2.100 解压即用

    Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-...Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。

    Redis-7.0.12-Windows-x64

    Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 Redis 优势 性能极高 – Redis能读的速度是110000次/s,写的...

    redis 使用说明

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-...• Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份

Global site tag (gtag.js) - Google Analytics