随笔分类 - Redis
摘要:###1. 简介 Redis cluster 由多个节点组成,节点类型分为主节点和从节点。主节点负责读写请求和集群信息维护,从节点负责复制主节点的数据和状态信息。 集群将数据分散到多个节点,每一个主节点都可以提供服务 支持故障自动转移 ###2. 集群方案 根据数据根据路由规则写入节点,并维护数据和
阅读全文
摘要:Redis系列深度好文:深入学习Redis 1. 概念 1.1 定义 在主从复制中,数据库分为两类,一类是主库(master),另一类是同步主库数据的从库(slave)。 主库可以进行读写操作,当写操作导致数据变化时会自动同步到从库。而从库一般是只读的(特定情况也可以写,通过参数slave-read
阅读全文
摘要:一. 概念 布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。 当布隆过滤器说某个值存在时,这个值可能不存在;当它说
阅读全文
摘要:参考文章:缓存穿透、缓存击穿、缓存雪崩概念及解决方案 一. 缓存击穿 1. 概念 缓存击穿指的是大量的请求同时查询一个 key 时,此时这个key正好失效了,所有请求击穿到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。 2. 解决方案 直接加锁:当缓存未命中,则从数据库获取数据并
阅读全文
摘要:1. 加锁 set key value EX/PX seconds NX key : 数据库键 value: 值 EX: 秒 PX: 毫秒 seconds : 时间数 NX: if key not exist 2. 解锁 加锁时保存 value 值, 解锁时将保存的值与从数据库获取的值进行比较, 判
阅读全文
摘要:1. 概述 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。 2. 基本结构 typedef struct dictEntry { void *key; // 键
阅读全文
摘要:1. 概述 Redis通过 MULTI, EXEC / WATCH 等命令来实现事务. 事务提供一种将多个命令请求打包, 然后一次性、按顺序的执行多个命令的机制. 并且在事务执行期间, 服务器不会中断事务而改去执行其他客户端的命令请求, 他将事务中的所有命令执行完毕, 然后才去处理其他客户端的命令请
阅读全文
摘要:1. 概述 Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。 Redis 的持久化机制有两种,第一种是快照,第二种是 AOF 日志。快照是一次全量备份,AOF 日志是连续的增量备份
阅读全文
摘要:1. 概述 跳跃表是一种有序的数据结构, 他通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的. 大部分情况下, 跳跃表的效率可以和平衡树相媲美. Redis中只在两处用到了跳跃表, 一个是实现有序集合, 另一个是 集群节点中国用作内部数据结构. 2. 基本结构 typedef
阅读全文
摘要:1. 概述 考虑到链表的附加空间相对太高,prev 和 next 指针就要占去 16 个字节 (64bit 系统的指针是 8 个字节),另外每个节点的内存都是单独分配,会加剧内存的碎片化,影响内存管理效率。 后续版本对列表数据结构进行了改造,使用 quicklist 代替了 ziplist 和 li
阅读全文
摘要:1. 基本结构 Redis 早期版本存储 list 列表数据结构使用的是压缩列表 ziplist 和普通的双向链表 linkedlist,也就是元素少时用 ziplist,元素多时用 linkedlist。 // 链表 struct list { listNode *head; listNode *
阅读全文
摘要:1.概述 压缩列表是一块连续的内存空间,元素之间紧挨着存储,没有任何冗余空间。 Redis 为了节约内存空间使用,zset 和 hash 容器对象在元素个数较少的时候,采用压缩列表 (ziplist) 进行存储。3.2.0版本之前, 当 List 容器对象在元素个数较少的时候,也采用压缩列表 (zi
阅读全文
摘要:1.String(字符串) 1.1 概述 字符串 string 是 Redis 最简单的数据结构。Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。 String 数据结构是简单的key-value类型,value其实不仅是S
阅读全文
摘要:Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。 在 Redis 里面, C 字符串只会作为
阅读全文