Redis
文章平均质量分 89
redis学习、解读、深究
mooddance
面向保安编程
展开
-
Redis 系列文章导航(已兼容redis7版本)
Redis提供了多种丰富的数据类型,常见实用的有String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。所以这一系列文章用来记录学习、使用Redis过程中的知识点和经验。另外有四种不常见的数据类型BitMap(2.2版新增)、HyperLogLog(2.8版新增)、GEO(3.2版新增)、Stream(5.0版新增)。此系列文章中涉及到的源码大多是版本6.0,但2022年1月Redis.0开始发布RC版,故本文也适当进行兼容。......原创 2021-05-27 22:50:02 · 496 阅读 · 0 评论 -
Redis - listpack(紧凑列表)图文详解
在阅读本文前,需要了解下ziplist(压缩列表),因为listpack的出现是用来代替ziplist的。Redis采用ziplist,是因为其为一种连续内存空间并且有序的压缩链表。在数据节点不多的情况下,内存占用和查询复杂度得到一个相对较好的平衡。但是zip有个一个致命的缺陷,就是极端情况下的连锁更新会带来不小的性能消耗。listpack中每个节点不再包含前一个节点的长度,避免连锁更新的隐患发生。但一个listpack最大内存使用不能超过1GB。......原创 2022-07-30 23:50:42 · 5263 阅读 · 3 评论 -
Redis - String 类型数据结构(SDS、Int)图文详解
String是最基本的key-value结构。而SDS则作为String数据类型的一种数据结构实现。String类型没有直接使用C语言传统的字符串表示(以空字符\0结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simpledynamicstring,SDS)的抽象类型,并将SDS作为默认字符串表示。Redis客户端传入服务器的协议内容、aof缓存、返回给客户端的回复等等,这些重要的内容都是由SDS类型来保存的。二进制安全。......原创 2022-07-24 12:23:17 · 1691 阅读 · 0 评论 -
Redis7.0 新特性(超详细)
从2022年1月31日发布了Redis7.0RC1开始,经过几个RC版本的快速上线。Redis7.0.0GA版于2022年4月27日正式发布,代表Redis7.0进入了稳定版(Stable)时代。本文将针对Redis7.0的新特性进行展开,尝尝鲜。本文从配置项改动、redis-cli工具、命令变动、INFO命令等方面对Redis7.0的改动进行了一个较为详细的讲解。文中只罗列了经常使用到或者需要关注的条目,更多想起的改动请查阅文档。...原创 2022-05-05 23:35:59 · 13109 阅读 · 0 评论 -
Redis dict(字典)
dict常见称之字典(dictionary)或映射(map),其元素以键值对形式存在。是Redis最重要、常用的数据结构,可以说Redis本质就是一个dict。Redis是一个内存型数据库,在server.h不难发现这样的定义/*使用dict来存储键值对*/dict*expires;dict是为了解决算法中的查找问题而出现的,在无冲突下理论上能达到O(1)查找效率。本文介绍了redis中dict数据结构,介绍了实现原理和面临问题。...原创 2022-04-18 21:54:01 · 887 阅读 · 0 评论 -
Redis - 管道批量写入数据
redis 批量写入大量数据原创 2022-03-16 22:08:13 · 4994 阅读 · 0 评论 -
Redis - RESP
前言Redis 在 1.2 版本中引入一种新的通信协议,并在 2.0 版本中开始,该协议成为了与Redis服务器通讯的标准方式。该通行协议有种很多优点,比如:简单的实现。快速地被计算机解析。简单得可以能被人工解析。二进制安全。正文原理在 OSI 网络层处,Redis 在 TCP 端口 6379(默认) 上监听到来的连接,客户端连接到来时,Redis服务器为此创建一个TCP连接。在客户端与服务器端之间传输的每个 Redis 命令或者数据都以 \r\n 结尾。如下例子:*2$3GET原创 2021-09-04 17:06:44 · 613 阅读 · 0 评论 -
skiplist - 跳表
跳表(skiplist、跳跃表) 是一个很优秀的数据结构,比如用于 Redis、levelDB等出名的开源项目上。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。它的结构特点在名称能很好的体现出来,就像兔子一样,蹦蹦跳跳。可以结合下面的图有个初步的印象。是不是看起来很形象了,接下来看看 Redis 是怎么实现跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。...原创 2021-06-30 23:15:59 · 809 阅读 · 2 评论 -
Redis - intset ( 整数数组)
Set是Redis数据类型的一种。集合中元素是唯一的,支持存储最大元素2^64。因为是哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。但是Set除了哈希表之外,还有intset这种实现方式。intset是Redis独特设计的一种数据结构。当需要存储的数据全是正数且元素数量不大情况下,如-2、-1、1、2…Redis首选intset作为实现方式。intset是Set除哈希表外的一种实现方式,当所有数据为正数时候Redis会采用intset。...原创 2021-06-16 23:59:11 · 1005 阅读 · 0 评论 -
Redis - 事务(ACID)分析
前言ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。常见支持事务的数据库或其部分引擎有:Oracle、DB2、MySQL…可以看到上面的举例都是关系型数据,那对于 Redis 这种非关系性数据库来说。是否也支持 ACID 特性尼? 接着往下看。ACID分析R原创 2021-06-10 22:58:17 · 665 阅读 · 1 评论 -
Redis - quicklist(快速列表)
这篇博文用来解读Redis数据类型List的一种实现。数据结构quicklist。虽然List类型有多种实现,但quicklist是最常用的。quicklist是一个双向链表,但同时也是一个复合的结构体。结构中包括了另一种结构ziplist。如果不熟悉这种结构体,请先阅读这篇博文《ziplist-压缩列表》。文中介绍了ziplist是一种十分节省内存的结构,紧凑的内存布局、变长的编码方式在内存使用量上有着不小的优势。https。......原创 2021-06-06 12:08:39 · 3935 阅读 · 3 评论 -
zipmap-压缩字典
前言hash 数据类型是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。每个 hash 可以存储 232 - 1 键值对(40多亿)。redis 在 hash 类型数量比较小的时候会选择使用 zipmap 来实现存储。先看看 Redis 是怎么定义 zipmap的:String -> String Map 数据结构优化了大小。 该文件实现了一个数据结构,将字符串映射到其他字符串,实现了一个 O(n) 查找数据结构,该结构设计为非原创 2021-06-04 01:27:33 · 1383 阅读 · 0 评论 -
Redis - ziplist (压缩列表) 图文详解
List列表是简单的字符串列表,按照插入顺序排序,可以从头部或尾部向List列表添加元素。最大长度为2^32-1,也即每个列表支持超过40亿个元素。Redis的List类型有多种实现方式,由双向链表或压缩列表(v7.0由listpack替代)实现的。这篇文章就是介绍其中一种实现ziplist-压缩列表。ziplist为了节省内存,采用了紧凑的连续存储。所以在修改操作下并不能像一般的链表那么容易,需要从新分配新的内存,然后复制到新的空间。httpshttps。............原创 2021-05-30 18:10:53 · 15178 阅读 · 7 评论 -
Redis - SDS(简单动态字符串)
定义解释Redis 没有直接使用C语言传统的字符串表示(以空字符 \0结尾的字符数组,以下简称 C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 作为默认字符串表示。Redis客户端传入服务器的协议内容、 aof 缓存、 返回给客户端的回复等等, 这些重要的内容都是由 sds 类型来保存的。只有在字符串不需要修改的时候采用 C字符串,其余情况都采用 SDS。不直接使用C字符串的原因大致下面几种:......原创 2021-04-14 22:51:53 · 894 阅读 · 1 评论 -
Redis 请合理使用 String 类型
慎用 String?开篇之前先给出一个组对比:1. 这是执行 flushdb 后的干净的 Redis 内存使用信息。127.0.0.1:6379> info memory# Memoryused_memory:502272used_memory_human:490.50Kused_memory_rss:7901184used_memory_peak:119628904used_memory_peak_human:114.09Mused_memory_lua:33792mem_f原创 2020-11-01 20:16:02 · 705 阅读 · 0 评论 -
Redis AOF日志备份原理
何为 AOF ?AOF 的全称是 Append Only File,表示文件只能追加写。 Redis记日志时,用追加写文件的方式记录写命令操作。Redis 是先执行命令,把数据写入内存,然后才记录日志。原创 2020-10-20 22:50:21 · 483 阅读 · 0 评论 -
Redis - 单线程模型解读
老生常谈的一件事:为什么使用单线程的 Redis 还那么快?其实这里的单线程是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。当然也会涉及到多路复用机制,接着我们来谈谈何为多路复用?Redis 为何不用多线程通常对于一个多线程的应用来说,在有合理的资源分配的情况下,多线程可以增加系统中处理请求操作的资源实体,进而提升系统能够同时处理的请求数,即原创 2020-10-19 22:45:58 · 626 阅读 · 0 评论