![](https://img-blog.csdnimg.cn/2bdf441bf0184b079da7e55faf69bb34.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis
文章平均质量分 86
、
小明的笔记仓库
转载笔记来自互联网资料整理。
仅供个人学习用途。
展开
-
切片集群:数据增多了,是该加内存还是加实例?
我曾遇到过这么一个需求:要用 Redis 保存 5000 万个键值对,每个键值对大约是 512B,为了能快速部署并对外提供服务,我们采用云主机来运行 Redis 实例,那么,该如何选择云主机的内存容量呢?我粗略地计算了一下,这些键值对所占的内存空间大约是 25GB(5000 万 *512B)。所以,当时,我想到的第一个方案就是:选择一台 32GB 内存的云主机来部署 Redis。因为 32GB 的内存能保存所有数据,而且还留有 7GB,可以保证系统的正常运行。同时,我还采用 RDB 对数据做持久化,以确转载 2021-12-03 21:24:13 · 113 阅读 · 0 评论 -
哨兵集群:哨兵挂了,主从库还能切换吗?
上节课,我们学习了哨兵机制,它可以实现主从库的自动切换。通过部署多个实例,就形成了一个哨兵集群。哨兵集群中的多个实例共同判断,可以降低对主库下线的误判率。但是,我们还是要考虑一个问题:如果有哨兵实例在运行时发生了故障,主从库还能正常切换吗?实际上,一旦多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还能继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户端。如果你部署过哨兵集群的话就会知道,在配置哨兵的信息时,我们只需要用到下面的这个配置项,转载 2021-10-20 21:07:23 · 172 阅读 · 0 评论 -
哨兵机制:主库挂了,如何不间断服务?
无论是写服务中断,还是从库无法进行数据同步,都是不能接受的。所以,如果主库挂了,我们就需要运行一个新主库,比如说把一个从库切换为主库,把它当成主库。这就涉及到三个问题:主库真的挂了吗?该选择哪个从库作为主库?怎么把新主库的相关信息通知给从库和客户端呢?这就要提到哨兵机制了。在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。接下来,我们就一起学习下哨兵机制。哨兵机制的基本流程哨兵其实就是一个运行在特殊模式下的 Re转载 2021-10-19 20:55:36 · 241 阅读 · 0 评论 -
Redis数据同步:读写分离
我们学习了 AOF 和 RDB,如果 Redis 发生了宕机,它们可以分别通过回放AOF日志和重新读入 RDB 文件的方式恢复数据,从而保证尽量少丢失数据,提升可靠性。不过,即使用了这两种方法,也依然存在服务不可用的问题。比如说,我们在实际使用时只运行了一个 Redis 实例,那么,如果这个实例宕机了,它在恢复期间,是无法服务新来的数据存取请求的。那我们总说的 Redis 具有高可靠性,又是什么意思呢?其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。AOF 和 RDB 保证了前者,而对转载 2021-10-19 20:00:59 · 1113 阅读 · 0 评论 -
Redis持久化:RDB内存快照
AOF 方法好处:每次执行只需要记录操作命令,需要持久化的数据量不大。一般而言,只要你采用的不是 always 的持久化策略,就不会对性能造成太大影响。但是,也正因为记录的是操作命令,而不是实际的数据,所以,用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。如果操作日志非常多,Redis 就会恢复得很缓慢,影响到正常使用。这当然不是理想的结果。那么,还有没有既可以保证可靠性,还能在宕机时实现快速恢复的其他方法呢?内存快照,就是指内存中的数据在某一个时刻的状态记录。这就类似于照片,当你原创 2021-10-16 20:16:30 · 354 阅读 · 0 评论 -
Redis持久化: AOF日志
Redis 用在什么业务场景下?把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快。但是一旦服务器宕机,内存中的数据将全部丢失。很容易想到的一个解决方案是,从后端数据库恢复这些数据,但这种方式存在两个问题:一是,需要频繁访问数据库,会给数据库带来巨大的压力;二是,这些数据是从慢速数据库中读取出来的,性能肯定比不上从 Redis 中读取,导致使用这些数据的应用程序响应变慢。所以,对 Redis 来说,实现数据的持久化,避免从后端数据库中进行恢复,是至关重要原创 2021-10-14 21:43:03 · 153 阅读 · 0 评论 -
为什么单线程Redis能那么快?
Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格来说,Redis 并不是单线程,但是我们一般把 Redis 称为单线程高性能,这样显得“酷”些。接下来,我也会把 Redis 称为单线程模式。而且,这也会促使你紧接着提问:“为什么用单线程?为什么单线程能这么快?”要弄明白这个问题,我们就要深入地学习下 Re转载 2021-09-18 10:51:14 · 184 阅读 · 0 评论 -
Redis 数据结构、
键和值用什么结构组织?为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。所以,我们常说,一个哈希表是由多个哈希桶组成的,每个哈希桶中保存了键值对数据。看到这里,你可能会问了:“如果值是集合类型的话,作为数组元素的哈希桶怎么来保存呢?”其实,哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。这也就是说,不管值是 String,还是集合类型,哈希桶中的元素都是指向具体值的指针。在下图中,可以看到,哈希...原创 2021-09-18 10:10:31 · 126 阅读 · 0 评论 -
Redis 学习路线
三大主线,:高性能主线,包括线程模型、数据结构、持久化、网络框架; 高可靠主线,包括主从复制、哨兵机制; 高可扩展主线,包括数据分片、负载均衡。原创 2021-09-18 09:29:46 · 730 阅读 · 0 评论