《redis核心技术与实战》
文章平均质量分 83
redis核心技术与实战
Java编程之道
这个作者很懒,什么都没留下…
展开
-
11 | 脑裂: 一次奇怪的数据丢失
1. 前言脑裂就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且,严重的话,脑裂会进一步导致数据丢失。2. 为什么会发生脑裂?第一步:确认是不是数据同步出现了问题 在主从集群中发生数据丢失,最常见的原因就主库的数据还没有同步到从库,结果主库发生了故障,等从库升级为主库后,未同步的数据就丢失了。 如果是这种情况的数据丢失,我们可以通过比对主从库上的复制进度差值来进行判断原创 2021-07-01 07:06:30 · 452 阅读 · 3 评论 -
10丨 Redis主从同步与故障切换,有哪些坑
1. 主从数据不一致 主从数据不一致,就是指客户端从从库中读取到的值和主库中的最新值并不一致。举个例子,假设主从库之前保存的用户年龄值是 19,但是主库接收到了修改命令,已经把这个数据更新为 20 了,但是,从库中的值仍然是 19。那么,如果客户端从从库中读取用户年龄值,就会读到旧值。 那为啥会出现这个坑呢?其实这是因为主从库间的命令复制是异步进行的。 具体来说,在主从库命令传播阶段,主库收到新的写命令后,会发送给从库。但是,主库并不会等到从库实际执行完命令后,再把结果返回给客户端,而是主库自己原创 2021-06-30 17:31:17 · 334 阅读 · 1 评论 -
09丨缓存异常:如何解决缓存和数据库的数据不一致问题
1.缓存和数据库的数据不一致是如何发生的? 首先,我们得清楚“数据的一致性”具体是啥意思。其实,这里的“一致性”包含了两种情况:缓存中有数据,那么,缓存的数据值需要和数据库中的值相同;缓存中本身没有数据,那么,数据库中的值必须是最新值。 对于读写缓存来说,如果要对数据进行增删改,就需要在缓存中进行,同时还要根据采取的写回策略,决定是否同步写回到数据库中。同步直写策略:写缓存时,也同步写数据库,缓存和数据库中的数据一致;异步写回策略:写缓存时不同步写数据库,等到数据从缓存中淘汰时,再写回原创 2021-06-30 14:33:27 · 411 阅读 · 0 评论 -
08 | 替换策略: 缓存满了怎么办?
1. 前言 为了保证较高的性价比,缓存的空间容量必然要小于后端数据库的数据总量。不过,内存大小毕竟有限,随着要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。此时,该怎么办呢? 解决这个问题就涉及到缓存系统的一个重要机制,即缓存数据的淘汰机制。简单来说,数据淘汰机制包括两步:第一,根据一定的策略,筛选出对应用访问来说“不重要”的数据;第二,将这些数据从缓存中删除,为新来的数据腾出空间,2. 设置的缓存容量 我们先看看蓝线。它表示的就是“八二原理”,有 20% 的数据贡献了 80% 的访原创 2021-06-25 16:21:33 · 171 阅读 · 1 评论 -
07丨切片集群:数据增多了,是该加内存还是加实例
1. RDB持久化造成Redis缓慢 在使用 RDB 进行持久化时,Redis 会 fork 子进程来完成,fork 操作的用时和 Redis 的数据量是正相关的,而 fork 在执行时会阻塞主线程。数据量越大,fork 操作造成的主线程阻塞的时间越长。所以,在使用 RDB 对 25GB 的数据进行持久化时,数据量较大,后台运行的子进程在 fork 创建时阻塞了主线程,于是就导致Redis 响应变慢了。 切片集群,也叫分片集群,就是指启动多个 Redis 实例组成一个集群,然后按照一定的规则,把收到原创 2021-06-24 15:05:24 · 110 阅读 · 0 评论 -
06 | 哨兵机制: 主库挂了, 如何不间断服务
哨兵模式主从数据同步1. 前言2.哨兵机制的基本流程3.如何选定新主库1. 前言 无论是写服务中断,还是从库无法进行数据同步,都是不能接受的。所以,如果主库挂了,我们就需要运行一个新主库,比如说把一个从库切换为主库,把它当成主库。这就涉及到三个问题:主库真的挂了吗?该选择哪个从库作为主库?怎么把新主库的相关信息通知给从库和客户端呢? 这就要提到哨兵机制了。在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。2.哨兵机制原创 2021-06-18 13:45:41 · 178 阅读 · 2 评论 -
05丨数据同步:主从库如何实现数据一致
文章目录1. 主从库数据同步介绍2. 主从库间如何进行第一次同步3.主从级联模式分担全量复制时的主库压力4.主从库间网络断了怎么办?1. 主从库数据同步介绍 Redis 具有高可靠性有两层含义:一是数据尽量少丢失,二是服务尽量少中断。AOF 和 RDB 保证了前者,而对于后者,Redis 的做法就是增加副本冗余量,将一份数据同时保存在多个实例上。即使有一个实例出现了故障,需要过一段时间才能恢复,其他实例也可以对外提供服务,不会影响业务使用。 实际上,Redis 提供了主从库模式,以保证数据副本的原创 2021-06-18 10:20:50 · 235 阅读 · 0 评论 -
04 | 内存快照:宕机后, Redis 如何实现快速恢复
文章目录1. RDB内存快照的局限性2. 给哪些内存数据做快照3. 快照时数据能修改吗4. 可以每秒做一次快照吗4. 数据快速恢复Redis 一另一种种持久化方法:内存快照。所谓内存快照,是把某一时刻的状态以文件的形式写到磁盘上,这样一来,即使宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为 RDB 文件,其中,RDB 就是 Redis DataBase 的缩写。1. RDB内存快照的局限性和 AOF 相比,RDB 记录的是某一时刻的数据,并不是操作,所以,在做数据恢原创 2021-06-17 14:16:17 · 136 阅读 · 0 评论 -
03 | AOF 日志:宕机了, Redis 如何避免数据丢失?
文章目录1. AOF日志是如何实现的2. 三种写回策略3. 日志文件太大了怎么办4. AOF重写会阻塞吗?1. AOF日志是如何实现的AOF 日志是写后日志,“写后”的意思是 Redis 是先执行命令,把数据写入内存,然后才记录日志,如下图所示:那 AOF 为什么要先执行命令再记日志呢?要回答这个问题,我们要先知道 AOF 里记录了什么内容。传统数据库的日志,例如 redo log(重做日志),记录的是修改后的数据,而 AOF 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。原创 2021-06-17 13:28:13 · 149 阅读 · 0 评论 -
02 | 高性能 IO 模型:为什么单线程 Redis 能那么快?
我们通常说,Redis 是单线程,主要是指Redis 的网络 IO和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。...原创 2021-06-17 10:06:40 · 138 阅读 · 0 评论 -
01丨数据结构:快速的Redis有哪些慢操作
Redis数据类型与底层数据类型关系简单来说,底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。它们和数据类型的对应关系如下图所示:键和值的结构组织为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。这也就是说,不管值是 String,还是集合类型,哈希桶中的元素都是指向它们的指针。在下图中,可以看到,哈希桶中的 entry 元素中保存了key和value指针,分别指向了实际的原创 2021-06-16 17:42:58 · 123 阅读 · 0 评论 -
开篇词丨这样学Redis,才能技高一筹
Redis遇见的“坑”,总体来说集中在四个方面:CPU 使用上的“坑”,例如数据结构的复杂度、跨 CPU 核的访问;内存使用上的“坑”,例如主从同步和 AOF 的内存竞争;存储持久化上的“坑”,例如在 SSD 上做快照的性能抖动;网络通信上的“坑”,例如多实例时的异常网络丢包。Redis 知识全景图都包括什么呢?简单来说,就是“两大维度,三大主线”。“两大维度”就是指系统维度和应用维度,“三大主线”也就是指高性能、高可靠和高可扩展(可以简称为“三高”)。高性能主线,包括线程模型、数据结原创 2021-06-16 16:00:43 · 141 阅读 · 0 评论 -
分布式数据库CAP原理和Base
l传统ACID有:ØA(Atomicity)原子性ØC(Consistency)一致性ØI(Isolation)独立性ØD(Durability)持久性lCAP:不可能同时满足,最多同时满足两个vC(Consistency)强一致性vA(Availability)可用性vP(Partition tolerance)分区容错性CAP 3进2:redis数据类型 ...原创 2018-03-12 10:06:09 · 337 阅读 · 0 评论 -
Redis哨兵主备切换的数据丢失及Redis数据持久化
一 两种数据丢失的情况异步复制导致数据丢失master->slave复制数据是异步的,可能有部分数据还没复制到slave,master就宕机了,此时导致数据丢失集群脑裂导致数据丢失master突然脱离正常网络,跟其他slave机器不能正常连接,但master还在运行,此时哨兵认为master宕机了开始选举,slave切换成master。此时集群中就会出现两个master,这就是所谓的脑裂。此时某个slave被切换成master,client还没切换到新的master还继续向旧的mast原创 2020-07-05 23:27:19 · 192 阅读 · 0 评论 -
redis主从复制原理、断点续传、无磁盘化复制、过期key处理
1.主从架构的核心原理:当启动一个salve node时会发送PSYNC 命令到master。salve第一次连接master时master会根据当前数据复制一份RDB(full resynchronization 全量复制)到slave,slave会将本地数据写入磁盘,然后从本地磁盘加载到内存中,master会将内存中的数据发送给slave,slave会同步这些数据。如果master与slave发生故障master,会自动重连2.主从复制断点续传概念:主从复制过程中如果网络断掉了,可以从上次复制原创 2020-07-01 00:01:46 · 2075 阅读 · 0 评论 -
Redis单线程模型
1.Redis单线程模型1.1.文件事件处理器Redis基于Reactor模式开发了网络事件处理器,这个处理器就叫做文件事件处理器(file event handler).这个文件事件处理器是单线程的,所以Redis才叫做单线程的模型,文件事件处理器采用了IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件;如果被监听的socket准备好执行accept,read,write,close等事件/操作的时候,跟事件/操作对应的文件事件就会产生,这转载 2020-06-30 17:34:50 · 196 阅读 · 0 评论 -
购物车功能
1.介绍1.购物车在不登陆的情况下,也可以使用需要引入浏览器cookie的操作2.购物车在登陆情况下,需要使用Redis和MySQL来存储数据Redis作为购物车缓存3.在缓存情况下,或者用户添加购物车后,允许购物车中的数据和原始数据的不一致4.购物车同步问题什么时候同步(结算、登陆)同步购物车后,是否删除cookie数据5.用户在不同客户端同时登陆如何处理购物车数据`...原创 2020-01-29 11:38:24 · 586 阅读 · 0 评论 -
SringBoot+Redis整合
缓存使用设计连接缓存查询缓存如果缓存中没有再到MySQL中查询mysql查询结果放入redisRedis整合步骤将redis整合到项目中(redis+spring)引入pom依赖信息(所有redis统一放在service-util)<dependency> <groupId>redis.clients</groupId&...原创 2020-01-02 19:50:37 · 216 阅读 · 0 评论 -
redis aof日志持久化和key设计原则
一.aof的配置 1.将appendonly改为yes开启aof功能原创 2018-05-30 17:58:22 · 236 阅读 · 0 评论 -
redis操作常用
使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip 删除都是以...转载 2018-03-14 09:35:33 · 151 阅读 · 0 评论 -
redis性能测试
原创 2018-03-08 21:02:03 · 175 阅读 · 0 评论 -
Nosql数据库的四大分类
1. KV键值:典型介绍新浪:BerkeleyDB +redis美团:redis+tair阿里、百度:memcache+redis2. 文档存储数据库(bson格式较多):典型介绍MongDB:基于分布式文件存储的数据库,介于关系型 数据库与非关系型数据库之间CouchDB3. 列存储库Cassandra、HBase分布式文件系统4. 图关系库朋友圈的社交网络、广告推荐系统社交网络,推荐系统。专注...原创 2018-03-07 13:50:24 · 676 阅读 · 0 评论