Redis专栏
文章平均质量分 89
从基础到源码不断的深入理解Redis的设计思想,以及使用redis解决日常的业务场景问题总结
蘑菇蘑菇不会开花~
认真负责的态度做好眼前的事
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分布式Redis(14)哈希槽
Redis 是一款广泛使用的高性能键 - 值存储数据库。在数据分片方面,Redis 采用了哈希槽(Hash Slot)的方式,而非一致性哈希(Consistent Hashing),这是基于多方面的考量。Redis 集群预先分配了 16384 个哈希槽。这种固定数量的哈希槽使得数据分布的管理更加容易。每个节点负责一定数量的哈希槽,例如,在一个有 N 个节点的集群中,每个节点大致负责 16384/N 个哈希槽。相比之下,一致性哈希的数据分布相对更 “自由”,可能导致在节点数量变化时数据迁移的不可预测性增加。原创 2024-09-19 16:05:02 · 1725 阅读 · 0 评论 -
Redis(13)| 缓存与数据库数据一致性问题
只要用到多数据源存储同一份相同的数据,在更新时,都会考虑数据一致性问题。这是常见问题,但是对于分布式系统的CAP 理论,相信很多人都听过,它是指:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。为什么要理解 CAP 理论?我能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱时,我们可以依据 CAP 去否决它。1. 这个系统满足编辑后数据要有实时性可见;原创 2024-09-01 21:41:13 · 1315 阅读 · 0 评论 -
Redis(13)| 主从复制
我在前已经给大家图解了 AOF 和 RDB,这两个持久化技术保证了即使在服务器重启的情况下也不会丢失数据(或少量损失)。不过,由于数据都是存储在一台服务器上,如果出事就完犊子了,比如:如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的;如果这台服务器的硬盘出现了故障,可能数据就都丢失了。要避免这种单点故障,最好的办法是将数据备份到其他服务器上,让这些服务器也可以对外提供服务,这样即使有一台服务器出现了故障,其他服务器依然可以继续提供服务。原创 2024-09-01 12:44:38 · 860 阅读 · 0 评论 -
Redis(12)| 过期删除策略和内存淘汰策略
Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。原创 2023-11-11 15:25:31 · 714 阅读 · 0 评论 -
Redis(11)| 持久化AOF和RDB
Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它。注意:只会记录写操作命令,读操作命令是不会被记录的,因为没意义。AOF 日志文件其实就是普通的文本,我们可以通过 cat 命令查看里面的内容,不过里面的内容如果不知道一定的规则的话,可能会看不懂。我这里给大家解释下。「*3」表示当前命令有三个部分,每部分都是以「$+数字」开头,后面紧跟着具体的命令、键或值。原创 2023-11-02 18:45:00 · 247 阅读 · 0 评论 -
Redis(10)| I/O多路复用(mutiplexing)
看上图,通俗讲就是I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流. 发明它的原因,是尽量多的提高服务器的吞吐能力。那么什么是IO多路复用机制呢,Linux 中的 IO 多路复用机制是指一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制。原创 2023-10-30 20:45:00 · 420 阅读 · 0 评论 -
Redis(09)| Reactor模式
通过select/poll/epoll/kqueue这些I/O多路复用函数库,我们解决了一个线程处理多个连接的问题,但整个Reactor模式的完整框架是怎样的呢?参考这篇paper,我们可以对Reactor模式有个完整的描述。Handles:表示操作系统管理的资源,我们可以理解为fd。:同步事件分离器,阻塞等待Handles中的事件发生。:初始分派器,作用为添加Event handler(事件处理器)、删除Event handler以及分派事件给Event handler。原创 2023-10-29 12:00:00 · 446 阅读 · 0 评论 -
Redis(08)| 线程模型
redis 内部使用文件事件处理器 file event handler,它是单线程的,所以redis才叫做单线程模型。它采用IO多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。原创 2023-10-28 11:51:13 · 566 阅读 · 0 评论 -
Redis(07)| 数据结构-跳表
Redis 只有 Zset 对象的底层实现用到了跳表,跳表的优势是能支持平均 O(logN) 复杂度的节点查找。zset 结构体里有两个数据结构:一个是跳表,一个是哈希表。这样的好处是既能进行高效的范围查询,也能进行高效单点查询。Zset 对象在执行数据插入或是数据更新的过程中,会依次在跳表和哈希表中插入或更新相应的数据,从而保证了跳表和哈希表中记录的信息一致。原创 2023-10-29 08:30:00 · 262 阅读 · 0 评论 -
Redis(06)| 数据结构-整数集合
整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集这个数据结构作为底层实现。原创 2023-10-28 17:30:00 · 173 阅读 · 0 评论 -
Redis(04)| 数据结构-压缩列表
压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。原创 2023-10-27 21:46:18 · 733 阅读 · 0 评论 -
Redis(03)| 数据结构-链表
大家最熟悉的数据结构除了数组之外,我相信就是链表了。Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。原创 2023-10-27 12:30:00 · 302 阅读 · 0 评论 -
Redis(02)| 数据结构-SDS
在开始讲数据结构之前,先给介绍下 Redis 是怎样实现键值对(key-value)数据库的。Redis 的键值对中的 key 就是字符串对象,而 value 可以是字符串对象,也可以是集合数据类型的对象,比如 List 对象、Hash 对象、Set 对象和 Zset 对象。这些命令代表着:● 第一条命令:name 是一个字符串键,因为键的值是一个字符串对象;● 第二条命令:person 是一个哈希表键,因为键的值是一个包含两个键值对的哈希表对象;原创 2023-10-26 22:53:21 · 603 阅读 · 0 评论 -
Redis(01)| 数据结构
Redis 速度快的原因除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。因此,这次我们就来好好聊一下 Redis 数据结构,这个在面试中太常问了。原创 2023-10-26 22:23:53 · 883 阅读 · 0 评论
分享