Redis
文章平均质量分 94
Redis笔记,欢迎阅读。
海陆云
请洒潘江,各倾陆海云尔
展开
-
41 Redis 的常见问题 3
35 假设 Codis 集群中保存的 80% 的键值对都是 Hash 类型,每个 Hash 集合的元素数量在 10 万~20 万个,每个集合元素的大小是 2KB。迁移这样的 Hash 集合数据,会对 Codis 的性能造成影响吗?其实影响不大。虽然一个 Hash 集合数据的总数据量有 200MB ~ 400MB(2KB * 0.1M ≈ 200MB 到 2KB * 0.2M ≈ 400MB),但是 Codis 支持异步、分批迁移数据,所以 Codis 可以把集合中的元素分多个批次进行迁移,每批次迁移的数原创 2021-12-16 22:46:31 · 28326 阅读 · 0 评论 -
40 Redis 的下一步发展:基于NVM内存的实践
40 Redis 的下一步发展:基于NVM内存的实践前言一、NVM 内存的特性与使用模式二、基于 NVM 内存的 Redis 实践总结前言近年新型非易失存储(Non-Volatile Memory,NVM)器件发展得非常快。NVM 器件具有容量大、性能快、能持久化保存数据的特性,这些刚好就是 Redis 追求的目标。 同时 NVM 器件像 DRAM 一样,可以让软件以字节粒度进行寻址访问,所以在实际应用中 NVM 可以作为内存来使用,称为 NVM 内存。Redis 作为内存键值数据库,如果能和 N原创 2021-12-16 22:19:22 · 29364 阅读 · 0 评论 -
39 Redis 6.0的新特性:多线程、客户端缓存与安全
39 Redis 6.0的新特性:多线程、客户端缓存与安全前言一、从单线程处理网络请求到多线程处理二、实现服务端协助的客户端缓存三、从简单的基于密码访问到细粒度的权限控制四、启用 RESP 3 协议总结前言Redis 官方在 2020 年 5 月份正式推出了 6.0 版本,这个版本中有很多的新特性,分别是面向网络处理的多 IO 线程、客户端缓存、细粒度的权限控制,以及 RESP 3 协议的使用。面向网络处理的多 IO 线程可以提高网络请求处理的速度;客户端缓存可以让应用直接在客户端本地读取数据原创 2021-12-16 21:49:09 · 21786 阅读 · 0 评论 -
38 Redis Cluster 的通信开销限制集群规模
38 Redis Cluster 的通信开销限制集群规模前言一、实例通信方法和对集群规模的影响二、Gossip 消息大小三、实例间通信频率二、降低实例间通信开销的方法总结前言Redis Cluster 能保存的数据量以及支撑的吞吐量,跟集群的实例规模密切相关。Redis 官方给出了 Redis Cluster 的规模上限是一个集群运行 1000 个实例。限定集群规模的原因是,实例间的通信开销会随着实例规模增加而增大,在集群超过一定规模时(比如 800 节点),集群吞吐量反而会下降。一、实例通信方原创 2021-12-15 22:42:23 · 20848 阅读 · 0 评论 -
37 Redis 数据倾斜的成因和应对方法
37 Redis 数据倾斜的成因和应对方法前言一、数据量倾斜的成因和应对方法bigkey 导致倾斜Slot 分配不均衡导致倾斜Hash Tag 导致倾斜二、数据访问倾斜的成因和应对方法总结前言在切片集群中,数据会按照一定的分布规则分散到不同的实例上保存。比如在使用 Redis Cluster 或 Codis 时,数据都会先按照 CRC 算法的计算值对 Slot(逻辑槽)取模, 所有的 Slot 又会由运维管理员分配到不同的实例上,数据就被保存到相应的实例上了。虽然这种方法实现起来比较简单,但是很容原创 2021-12-15 22:03:28 · 29468 阅读 · 0 评论 -
36 Redis 支撑秒杀场景的关键技术和实践
36 Redis 支撑秒杀场景的关键技术和实践前言一、秒杀场景的负载特征对支撑系统的要求第一个特征是瞬时并发访问量非常高。第二个特征是读多写少,而且读操作是简单的查询操作。二、Redis 可以在秒杀场景的哪些环节发挥作用?二、Redis 支撑秒杀场景的方法基于原子操作来支撑秒杀场景:基于分布式锁来支撑秒杀场景总结前言秒杀是一个非常典型的活动场景,比如,在双 11、618 等电商促销活动中,都会有秒杀场景。秒杀场景的业务特点是限时限量,业务系统要处理瞬时的大量高并发请求,而 Redis 就经常被用来支原创 2021-12-15 21:17:43 · 29134 阅读 · 0 评论 -
35 Redis 的切片集群 Codis 方案
35 Redis 的切片集群 Codis 方案前言一、Codis 的整体架构和基本流程二、Codis 的关键技术原理三、集群扩容和数据迁移如何进行?四、集群客户端需要重新开发吗?五、怎么保证集群可靠性?六、切片集群方案选择建议总结前言Redis 的切片集群使用多个实例保存数据,能够很好地应对大数据量的场景。Redis 官方提供的切片集群方案 Redis Cluster,Redis Cluster 方案正式发布前,业界已经广泛使用的 Codis。一、Codis 的整体架构和基本流程Codis 集群原创 2021-12-13 23:08:51 · 22014 阅读 · 0 评论 -
34 Redis 的常见问题 3
23 Redis 的只读缓存和直写策略的读写缓存,都会把数据同步写到后端数据库中,你觉得它们有什么区别吗?主要的区别在于,当有缓存数据被修改时,在只读缓存中,业务应用会直接修改数据库,并把缓存中的数据标记为无效;而在读写缓存中,业务应用需要同时修改缓存和数据库。24 Redis 缓存在处理脏数据时,不仅会修改数据,还会把它写回数据库。Redis 的只读缓存模式和两种读写缓存模式(带同步直写的读写模式,带异步写回的读写模式)),请你思考下,Redis 缓存对应哪一种或哪几种模式?如果在使用 Redis原创 2021-12-12 20:21:08 · 21511 阅读 · 0 评论 -
33 Redis 主从集群中脑裂问题
文章目录前言一、为什么会发生脑裂?二、为什么脑裂会导致数据丢失?三、如何应对脑裂问题?总结前言在使用主从集群时,主从集群有 1 个主库、5 个从库和 3 个哨兵实例,在使用的过程中,发现客户端发送的一些数据丢失了,这直接影响到了业务层的数据可靠性。这其实是主从集群中的脑裂问题导致的。脑裂是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且严重的话,脑裂会进一步导致数据丢失。一、为什原创 2021-12-12 15:41:05 · 29072 阅读 · 0 评论 -
32 Redis 的主从同步和故障切换问题
32 Redis 的主从同步和故障切换问题前言一、主从数据不一致二、读取过期数据三、不合理配置项导致的服务挂掉总结前言Redis 的主从同步机制不仅可以让从库服务更多的读请求,分担主库的压力,而且还能在主库发生故障时,进行主从库切换,提供高可靠服务。不过在实际使用主从机制的时候,很容易踩到一些坑。分别是主从数据不一致、读到过期数据、配置项设置得不合理从而导致服务挂 掉。踩到这些坑,业务应用不仅会读到错误数据,而且很可能会导致 Redis 无法正常使用,要全面地掌握这些坑的成因,提前准备一套规避方原创 2021-12-12 14:45:22 · 29286 阅读 · 0 评论 -
31 Redis 的事务机制
31 Redis 的事务机制前言一、事务 ACID 属性的要求二、 Redis 如何实现事务?三、Redis 的事务机制能保证哪些属性?原子性一致性隔离性持久性总结前言事务在执行时会提供专门的属性保证,包括原子性(Atomicity)、一致性 (Consistency)、隔离性(Isolation)和持久性(Durability),也就是 ACID 属性。这些属性既包括了对事务执行结果的要求,也有对数据库在事务执行前后的数据状态变化的要求。Redis 中如果有些属性在一些场景下不能保证的话,很可能原创 2021-12-12 13:48:11 · 21160 阅读 · 0 评论 -
30 Redis 应对并发访问的分布式锁
30 Redis 应对并发访问的分布式锁前言一、单机上的锁和分布式锁的联系与区别二、基于单个 Redis 节点实现分布式锁三、基于多个 Redis 节点实现高可靠的分布式锁总结前言在应对并发问题时,除了原子操作,Redis 客户端还可以通过加锁的方式,来控制并发写操作对共享数据的修改,从而保证数据的正确性。但是 Redis 属于分布式系统,当有多个客户端需要争抢锁时,必须要保证这把锁不能是某个客户端本地的锁。否则的话,其它客户端是无法访问这把锁的,当然也就不能获取这把锁了。Redis 本身可以被原创 2021-12-12 12:42:24 · 20975 阅读 · 0 评论 -
29 Redis 应对并发访问的无锁原子操作
29 Redis 应对并发访问的无锁原子操作前言一、并发访问中需要对什么进行控制?二、Redis 的两种原子操作方法:总结前言在使用 Redis 时,不可避免地会遇到并发访问的问题,比如说如果多个用户同时下 单,就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作,数据就会被修改,如果没有对并发写请求做好控制,就可能导致数据被改错,影响到业务的正常使用(例如库存数据错误,导致下单异常)。为了保证并发访问的正确性,Redis 提供了两种方法:加锁:在读取数据前,客户端需要先获得锁,原创 2021-12-12 11:11:02 · 21334 阅读 · 0 评论 -
28 Redis 基于 SSD 单实例进行扩容的技术方案 Pika
28 Redis 基于 SSD 单实例进行扩容的技术方案 Pika前言一、大内存 Redis 实例的潜在问题二、Pika 的整体架构三、Pika 如何基于 SSD 保存更多数据?四、Pika 如何实现 Redis 数据类型兼容?五、Pika 的其他优势与不足总结前言应用 Redis 时,随着业务数据的增加(比如说电商业务中,随着用户规模和商品数量的增加),就需要 Redis 能保存更多的数据。使用 Redis 切片集群,把数据分散保存到多个实例上。但是这样做的话会有一个问题,如果要保存的数据总量很原创 2021-12-11 21:42:39 · 21443 阅读 · 0 评论 -
27 Redis 缓存污染问题
27 Redis 缓存污染问题前言一、如何解决缓存污染问题二、LRU 缓存策略三、LFU 缓存策略的优化总结前言应用 Redis 缓存时,如果能缓存会被反复访问的数据,那就能加速业务应用的访问。 如果发生了缓存污染,缓存对业务应用的加速作用就减少了。在一些场景下,有些数据被访问的次数非常少,甚至只会被访问一次。当这些数据服务完访问请求后,如果还继续留存在缓存中的话,就只会白白占用缓存空间。这种就是缓存污染。当缓存污染不严重时,只有少量数据占据缓存空间,对缓存系统的影响不大。但是缓存污染变得严重后原创 2021-12-11 18:33:44 · 21743 阅读 · 1 评论 -
26 Redis 的缓存雪崩、击穿、穿透问题
26 Redis 的缓存雪崩、击穿、穿透问题前言一、缓存雪崩二、缓存击穿三、缓存穿透总结前言除了数据不一致问题, 还会面临缓存异常的三个问题:缓存雪崩、缓存击穿、缓存穿透。这三个问题一旦发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障。本篇介绍这三个问题的表现、诱发原因以及解决方法。了解了问题的成因,才能够在应用 Redis 缓存时,进行合理的缓存设置,以及相应的业务应用前端设置。一、缓存雪崩缓存雪崩:指大量的应用请求无法在 Redis 缓存中进行处理,应原创 2021-12-11 15:52:49 · 21529 阅读 · 0 评论 -
25 Redis的缓存中的数据和数据库中的不一致问题
25 Redis的缓存中的数据和数据库中的不一致问题前言一、缓存和数据库的数据不一致是如何发生的?二、解决Redis 和数据库数据不一致的方法总结前言Redis 缓存经常会遇到有 4 个方面:缓存中的数据和数据库中的不一致;缓存雪崩;缓存击穿;缓存穿透。只要我们使用 Redis 缓存,就会面对缓存和数据库间的一致性保证问题。如果数据不一致,业务应用从缓存中读取的数据就不是最新数据。比如,把电商商品的库存信息缓存在 Redis 中,如果库存信息不对,那么业务层下单操作就可能出错。一、缓原创 2021-12-11 13:01:34 · 23278 阅读 · 2 评论 -
24 Redis 缓存替换时的数据淘汰策略
24 Redis 缓存替换时的数据淘汰策略前言一、设置多大的缓存容量合适二、Redis 缓存的淘汰策略三、处理被淘汰的数据总结前言Redis 缓存使用内存来保存数据,避免业务应用从后端数据库中读取数据,可以提升应用的响应速度。如果把所有要访问的数据都放入缓存的性价比反而不高。例如,MySQL 中有 1TB 的数据,如果使用 Redis 把这 1TB 的数据都缓存起来,虽然应用都能在内存中访问数据了,但是这样配置并不合理,因为性价比很低。1TB 内存的价格大约是 3.5 万元,而 1TB 磁盘的原创 2021-12-11 11:10:49 · 20197 阅读 · 0 评论 -
23 Redis 的旁路缓存
23 Redis 的旁路缓存前言一、缓存的特征二、Redis 缓存处理请求的两种情况三、Redis 作为旁路缓存的使用操作四、缓存的类型总结前言Redis 提供了高性能的数据存取功能,广泛应用在缓存场景中,既能有效地提升业务应用的响应速度,还可以避免把高并发大压力的请求发送到数据库层。但如果 Redis 做缓存时出现了问题,比如缓存失效,大量请求就会直接积压到数据库层,必然会给数据库带来巨大的压力,很可能会导致数据库宕机或是故障,那么业务应用就没有办法存取数据、响应用户请求了。正因为 Redis原创 2021-12-10 21:51:37 · 20724 阅读 · 0 评论 -
22 Redis 的常见问题 2
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例原创 2021-12-10 20:52:04 · 20199 阅读 · 0 评论 -
21 Redis 缓冲区的用法
21 Redis 缓冲区的用法前言一、客户端输入和输出缓冲区二、输入缓冲区溢出的应对方法三、输出缓冲区溢出的应对方法四、主从集群中的缓冲区总结前言缓冲区的功能是用一块内存空间来暂时存放命令数据,以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能问题。但因为缓冲区的内存空间有限,如果往里面写入数据的速度持续地大于从里面读取数据的速度,会导致缓冲区需要越来越多的内存来暂存数据。缓冲区占用的内存超出了设定的上限阈值时,会出现缓冲区溢出。如果发生了溢出,会丢数据了。随着累积的数据越来越多,原创 2021-12-09 23:23:21 · 20804 阅读 · 0 评论 -
20 Redis 的内存空间存储效率问题
20 Redis 的内存空间存储效率问题前言一、内存碎片二、内存碎片形成的原因三、判断是否有内存碎片的方法四、清理内存碎片的方法总结前言做了数据删除,数据量已经不大了,使用 top 命令查看时还会发现 Redis 占用了很多内存。这是因为当数据删除后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。所以操作系统仍然会记录着给 Redis 分配了大量内存。潜在的风险点:Redis 释放的内存空间可能并不是连续的,这些不连续的内存空间很有可能处于一种闲置的状态。导致一个问题:虽原创 2021-12-09 21:38:54 · 20656 阅读 · 0 评论 -
19 Redis 的文件系统和操作系统对性能的影响
19 Redis 的文件系统和操作系统对性能的影响前言一、文件系统:AOF 模式二、操作系统:内存 swap三、操作系统:内存大页总结前言在排查时发现 Redis 没有执行大量的慢查询命令,也没有同时删除大量过期 keys,这就要关注影响性能的文件系统和操作系统。Redis 会持久化保存数据到磁盘,要依赖文件系统来完成,文件系统将数据写回磁盘的机制,会直接影响到 Redis 持久化的效率。在持久化的过程中,Redis 也还在接收其他请求,持久化的效率高低又会影响到 Redis 处理请求的性能。R原创 2021-12-09 20:48:01 · 20455 阅读 · 0 评论 -
18 Redis 自身操作特性对性能的影响
18 Redis 自身操作特性对性能的影响前言一、Redis 变慢的判定方法二、Redis 变慢的应对方法三、Redis 自身操作特性的影响总结前言Redis 突然变慢了不仅会直接影响用户的使用体验,还可能会影响和 Redis 在同一个业务系统中的其他系统,比如说数据库。例如在秒杀场景下,Redis 变慢了,大量的用户下单请求就会被拖慢,用户提交了下单申请,却没有收到任何响应,给用户带来非常糟糕的使用体验,可能会导致用户流失。实际生产环境中,Redis 往往是业务系统中的一个环节(例如作为缓存或原创 2021-12-09 19:47:31 · 20389 阅读 · 0 评论 -
17 Redis 的性能受CPU结构影响
17 Redis 的性能受CPU结构影响前言一、主流的 CPU 架构二、CPU 多核对 Redis 性能的影响三、CPU 的 NUMA 架构对 Redis 性能的影响四、绑核的风险和解决方案方案一:一个 Redis 实例对应绑一个物理核方案二:优化 Redis 源码总结前言CPU 的多核架构以及多 CPU 架构会影响到 Redis 的性能。 如果不了解 CPU 对 Redis 的影响,在对 Redis 的性能进行调优时,就可能会遗漏一些调优方法,不能把 Redis 的性能发挥到极限。一、主流的 C原创 2021-12-07 22:00:58 · 22200 阅读 · 0 评论 -
16 Redis 的异步机制
16 Redis 的异步机制前言一、Redis 的阻塞点4 类交互对象和具体的操作之间的关系:和客户端交互时的阻塞点:Redis 的第一个阻塞点:集合全量查询和聚合操作:Redis 的第二个阻塞点 :bigkey 删除操作Redis 的第三个阻塞点:清空数据库Redis 的第四个阻塞点:AOF 日志同步写Redis 的第五个阻塞点:从库加载 RDB 文件切片集群实例交互时的阻塞点二、可以异步执行的阻塞点三、异步的子线程机制总结前言命令操作、系统配置、关键机制、硬件配置等会影响 Redis 的性能,不仅原创 2021-12-07 20:29:31 · 20945 阅读 · 0 评论 -
15 Redis 实现消息队列
15 Redis 实现消息队列前言一、消息队列的消息存取需求二、基于 Streams 的消息队列解决方案总结前言消息队列要能支持组件通信消息的快速读写,而 Redis 本身支持数据的高速访问,正好可以满足消息队列的读写性能需求。消息队列的特征和 Redis 提供的消息队列方案。把这两方面的知识和实践经验串连起来,理解基于 Redis 实现消息队列的技术实践。以后当需要为分布式系统组件做消息队列选型时,可以根据组件通信量和消息通信速度的要求,选择出适合的 Redis 消息队列方案。一、消息队列的消息存取原创 2021-12-06 22:52:30 · 29814 阅读 · 0 评论 -
14 Redis 保存时间序列数据
14 Redis 保存时间序列数据前言一、时间序列数据的读写特点二、基于 Hash 和 Sorted Set 保存时间序列数据三、基于 RedisTimeSeries 模块保存时间序列数据总结前言需求:周期性地统计近万台设备的实时状态,包括设备 ID、压力、温度、湿度,以及对应的时间戳:DeviceID, Pressure, Temperature, Humidity, TimeStamp与发生时间相关的一组数据是时间序列数据。特点是没有严格的关系模型,记录的信息可以表示成键和值的关系(例如,一个原创 2021-12-06 21:12:32 · 29960 阅读 · 0 评论 -
13 Redis 的扩展类型GEO和自定义数据类型
13 Redis 的扩展类型GEO和自定义数据类型前言一、GEO 的底层结构二、GeoHash 的编码方法总结前言在日常生活中,我们越来越依赖搜索“附近的餐馆”、在打车软件上叫车,这些都离不开基于位置信息服务(Location-Based Service,LBS)的应用。LBS 应用访问的数据是和人或物关联的一组经纬度信息,而且要能查询相邻的经纬度范围,GEO 就非常适合应用在 LBS 服务的场景中。一、GEO 的底层结构叫车服务为例,来分析下 LBS 应用中经纬度的存取特点。每一辆网约车都有一原创 2021-12-06 19:47:42 · 31220 阅读 · 0 评论 -
12 Redis 常用的集合统计模式
12 Redis 常用的集合统计模式前言一、聚合统计排序统计三、值状态统计四、基数统计总结前言需要保存这样一种信息:一个 key 对应了一 个数据集合。例如:手机 App 中的每天的用户登录信息:一天对应一系列用户 ID 或移动设备 ID;电商网站上商品的用户评论列表:一个商品对应了一系列的评论;用户在手机 App 上的签到打卡信息:一天对应一系列用户的签到记录;应用网站上的网页访问信息:一个网页对应一系列的访问点击。Redis 集合类型的特点就是一个键对应一系列的数据,非常适合用来存取这原创 2021-12-05 22:21:46 · 29339 阅读 · 0 评论 -
11 Redis 节省内存的数据结构
11 Redis 节省内存的数据结构前言一、String 类型内存开销大的原因二、计算 String 类型的内存使用量三、节省内存的数据结构四、集合类型保存单值的键值对五、二级编码方法中采用的 ID 长度规则总结前言需求:开发一个图片存储系统,要求这个系统能快速地记录图片 ID 和图片在存储系统中保存时的 ID(可以直接叫作图片存储对象 ID)。还要能够根据图片 ID 快速查找到图片存储对象 ID。因为图片数量巨大,用 10 位数来表示图片 ID 和图片存储对象 ID,例如,图片 ID 为 11010原创 2021-12-05 20:39:26 · 29671 阅读 · 0 评论 -
10 Redis 的常见问题
10 Redis 的常见问题前言01 和跟 Redis 相比,简单键值数据库还缺少什么?02 整数数组和压缩列表作为底层数据结构的优势是什么?03 Redis 基本 IO 模型中还有哪些潜在的性能瓶颈?04 AOF 重写过程中有没有其他潜在的阻塞风险?04 AOF 重写为什么不共享使用 AOF 本身的日志?05 使用一个 2 核 CPU、4GB 内存、500GB 磁盘的云主机运行 Redis,Redis 数据库的数据量大小差不多是 2GB。当时 Redis 主要以修改操作为主,写读比例差不多在 8:2 左原创 2021-12-05 19:28:33 · 28519 阅读 · 0 评论 -
09 Redis的切片集群
09 Redis的切片集群前言一、Redis的切片集群二、切片集群保存更多的数据三、数据切片和实例的对应分布关系四、客户端定位实例获取数据总结前言需求:要用 Redis 保存 5000 万个键值对,每个键值对大约是 512B, 为了能快速部署并对外提供服务,采用云主机来运行 Redis 实例,粗略地计算了一下,这些键值对所占的内存空间大约是 25GB(5000 万 *512B)。方案:选择一台 32GB 内存的云主机来部署 Redis。因为32GB 的内存能保存所有数据,而且还留有 7GB,可以保证系原创 2021-12-05 18:28:04 · 29080 阅读 · 0 评论 -
08 Redis的哨兵集群
08 Redis的哨兵集群前言一、基于发布 / 订阅机制的哨兵集群组成二、哨兵获取从库的 IP 地址和端口三、基于 发布/订阅 机制的客户端事件通知四、确定由哪个哨兵执行主从切换总结前言多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还能继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户端。在配置哨兵的信息时,我们只需要用到下面的这个 配置项,设置主库的 IP 和端口,并没有配置其他哨兵的连接信息。sentinel monitor <ma原创 2021-12-05 16:45:46 · 29576 阅读 · 0 评论 -
07 Redis 的哨兵机制
07 Redis 的哨兵机制前言一、哨兵机制的基本流程二、监控:主库的主观下线和客观下线三、选主:筛选 + 打分3.1 筛选的条件3.2 打分的规则总结前言如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,但是一旦有写操作请求了,按照主从库模式下的读写分离要求, 需要由主库来完成写操作。没有实例可以来服务客户端的写原创 2021-12-05 16:01:58 · 29136 阅读 · 0 评论 -
06 Redis主从库的数据同步
06 Redis主从库的数据同步前言一、采用读写分离的原因二、主从库间进行第一次同步三、主从级联模式分担全量复制时的主库压力四、主从库间网络断开后的增量复制五、repl_backlog_buffer 环形缓冲区总结前言Redis 具有高可靠性:数据尽量少丢失(AOF 和 RDB 保证);服务尽量少中断(增加副本冗余量)。即使有一个实例出现了故障,需要过一段时间才能恢复,其他实例也可以对外提供服务,不会影响业务使用。Redis 的主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方原创 2021-12-05 15:14:28 · 29524 阅读 · 0 评论 -
05 Redis的RDB日志
05 Redis的RDB日志前言一、Redis 做内存数据快照的数据二、Redis 生成 RDB 文件的命令save 和 bgsave三、Redis 生成RDB文件时的写时复制技术四、Redis 生成RDB文件时的快照连拍五、Redis 生成RDB文件时的增量快照六 Redis 的混合使用 AOF 日志和内存快照RDB总结前言Redis 避免数据丢失的 AOF 方法的好处是每次执行只需要记录操作命令,需要持久化的数据量不大。只要采用的不是 always 的持久化策略,就不会对性能造成太大影响。但是因为原创 2021-12-05 11:46:49 · 22692 阅读 · 0 评论 -
04 Redis的AOF日志
04 Redis的AOF日志前言一、AOF 日志实现原理二、AOF 日志记录的内容三、 AOF先执行命令再记日志的好处四、AOF 两个潜在的风险五、AOF的三种写回策略六、AOF 文件过大带来的性能问题七、AOF 重写机制八、AOF 重写不会阻塞主线程总结前言Redis的普遍使用场景是作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数 据,响应速度会非常快。但是一旦服务器宕机,内存中的数据将全部丢失。如果从后端数据库恢复这些数据存在两个问题:需要频繁访问数据库,会给数据库带转载 2021-12-05 10:55:16 · 29193 阅读 · 0 评论 -
03Redis的高性能IO模型
03Redis的高性能IO模型前言一、Redis 用单线程的原因1.1 多线程的开销二、 Redis 的单线程快的原因2.1 Redis的多路复用机制2.1.1 基本 IO 模型与阻塞点2.1.2 非阻塞模式2.1.3 基于多路复用的高性能 I/O 模型2.1.4 select/epoll的事件的回调机制总结前言Redis 是单线程是指 Redis 的网络 IO和键值对读写是由一个线程来完成的。但 Redis 的持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以严格来说Redis 并不是单原创 2021-12-05 10:01:08 · 28899 阅读 · 0 评论 -
02Redis的慢操作
Redis的慢操作Redis的慢操作Redis的慢操作前言一、Redis数据类型的底层实现二、键和值的结构组织三、哈希表操作变慢的原因3.1、链式哈希3.2、rehash3.3、渐进式rehash四、集合类型数据操作效率五、集合类型的底层数据结构六、不同操作的复杂度总结前言为啥 Redis 能有这么突出的表现呢?Redis是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快。Redis的键值对是按一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是原创 2021-12-04 14:30:49 · 28897 阅读 · 0 评论