
Redis核心技术与实战
文章平均质量分 91
基础篇:打破技术点之间的壁垒,带你建立网状知识结构
实践篇:场景和案例驱动,取人之长,梳理出一套属于你自己的“武林秘籍”
未来篇:具有前瞻性,解锁新特性
九五一
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis中内存淘汰算法实现
Redis的maxmemory支持的内存淘汰机制使得其成为一种有效的缓存方案,成为memcached的有效替代方案。当内存达到maxmemory后,Redis会按照启动淘汰策略。其中LRU(less recently used)经典淘汰算法在Redis实现中有一定优化设计,来保证内存占用与实际效果的平衡,这也体现了工程应用是空间与时间的平衡性。PS:值得注意的,在主从复制模式Replication下,从节点达到maxmemory时不会有任何异常日志信息,但现象为增量数据无法同步至从节点。原创 2024-02-07 20:22:15 · 1508 阅读 · 0 评论 -
Redis主从复制原理工作流程和常见问题
主从复制就是现在有俩台redis服务器,把一台redis的数据同步到另一台redis数据库上。前者称之为主节点(master),后者为从节点(slave)。数据是只能master往slave同步单向。但是在实际过程中是不可能只有俩台redis服务器来做主从复制的,这也就意味这每台redis服务器都有可能会称为主节点(master)下图案例中,我们的slave3既是master的从节点,也是slave的主节点。先知道这么个概念,更多详解继续查看下文。这个过程就是主从复制最齐全的流程讲解。原创 2024-02-07 20:14:28 · 2041 阅读 · 0 评论 -
SpringBoot一站式开发(三)
一个键值对除了存储一个String类型的值以外,还支持多种常用的数据类型。原创 2023-05-25 16:47:55 · 184 阅读 · 0 评论 -
10 | “万金油”的String,为什么不好用了?
我们保存了1亿张图片的信息,用了约6.4GB 的内存,一个图片 ID 和图片存储对象 ID 的记录平均用了64字节。但问题是,一组图片 ID 及其存储对象 ID 的记录,实际只需要16字节就可以了。我们来分析一下。图片 ID 和图片存储对象 ID 都是10位数,我们可以用两个8字节的 Long 类型表示这两个 ID。因为8字节的 Long 类型最大可以表示2的64次方的数值,所以肯定可以表示10位数。但是,为什么 String 类型却用了64字节呢?原创 2023-05-24 14:45:59 · 166 阅读 · 0 评论 -
09 | 切片集群:数据增多了,是该加内存还是加实例?
我曾遇到过这么一个需求:要用 Redis 保存5000 万个键值对,每个键值对大约是 512B, 为了能快速部署并对外提供服务,我们采用云主机来运行 Redis 实例,那么,该如何选择云主机的内存容量呢?我粗略地计算了一下,这些键值对所占的内存空间大约是 25GB(5000 万*512B)。所以,当时,我想到的第一个方案就是:选择一台 32GB 内存的云主机来部署 Redis。因为 32GB 的内存能保存所有数据,而且还留有 7GB,可以保证系统的正常运行。原创 2023-05-23 22:33:30 · 85 阅读 · 0 评论 -
08 | 哨兵集群:哨兵挂了,主从库还能切换吗?
学习了哨兵机制,它可以实现主从库的自动切换。通过部署多个实例,就形成了一个哨兵集群。哨兵集群中的多个实例共同判断,可以降低对主库下线的误判率。但是,我们还是要考虑一个问题:如果有哨兵实例在运行时发生了故障,主从库还能正常切换吗?实际上,一旦多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还能继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户端。原创 2023-05-10 11:46:56 · 99 阅读 · 0 评论 -
07 | 哨兵机制:主库挂了,如何不间断服务?
学习了主从库集群模式。在这个模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。原创 2023-05-09 18:47:56 · 108 阅读 · 0 评论 -
06 | 数据同步:主从库如何实现数据一致?
我们学习了 AOF 和 RDB,如果 Redis 发生了宕机,它们可以分别通过回放日志和重新读入 RDB 文件的方式恢复数据,从而保证尽量少丢失数据,提升可靠性。不过,即使用了这两种方法,也依然存在服务不可用的问题。比如说,我们在实际使用时只运行了一个 Redis 实例,那么,如果这个实例宕机了,它在恢复期间,是无法服务新来的数据存取请求的。那我们总说的 Redis 具有高可靠性,又是什么意思呢?其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。原创 2023-05-07 15:17:10 · 645 阅读 · 0 评论 -
05 | 内存快照:宕机后,Redis如何实现快速恢复?
内存快照,就是指内存中的数据在某一个时刻的状态记录。这就类似于照片,当你给朋友拍照时,一张照片就能把朋友一瞬间的形象完全记下来。对 Redis 来说,它实现类似照片记录效果的方式,就是把某一时刻的状态以文件的形式写到磁盘上,也就是快照。这样一来,即使宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为 RDB 文件,其中,RDB 就是 Redis DataBase 的缩写。原创 2023-05-05 17:50:24 · 320 阅读 · 0 评论 -
04 | AOF日志:宕机了,Redis如何避免数据丢失?
如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快。”没错,这确实是 Redis 的一个普遍使用场景,但是,这里也有一个绝对不能忽略的问题:一旦服务器宕机,内存中的数据将全部丢失。我们很容易想到的一个解决方案是,从后端数据库恢复这些数据,但这种方式存在两个问题:一是,需要频繁访问数据库,会给数据库带来巨大的压力;原创 2023-05-04 15:52:13 · 171 阅读 · 0 评论 -
03 | 高性能IO模型:为什么单线程Redis能那么快?
我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格来说,Redis 并不是单线程,但是我们一般把 Redis 称为单线程高性能,这样显得“酷”些。接下来,我也会把 Redis 称为单线程模式。而且,这也会促使你紧接着提问:“为什么用单线程?为什么单线程能这么快?原创 2023-05-03 18:09:57 · 80 阅读 · 0 评论 -
02 | 数据结构:快速的Redis有哪些慢操作?
一提到 Redis,我们的脑子里马上就会出现一个词:“快。”但是你有没有想过,Redis 的快,到底是快在哪里呢?实际上,这里有一个重要的表现:它接收到一个键值对操作后,能以微秒级别的速度找到数据,并快速完成操作。数据库这么多,为啥 Redis 能有这么突出的表现呢?一方面,这是因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快。另一方面,这要归功于它的数据结构。原创 2023-05-02 17:30:47 · 163 阅读 · 0 评论 -
01 | 基本架构:一个键值数据库包含什么?
Redis 本身比较复杂,如果我们一上来就直接研究一个个具体的技术点,比如“单线程”“缓存”等,虽然可以直接学习到具体的内容,甚至立马就能解决一些小问题,但是这样学,很容易迷失在细枝末节里。从我自己的经验来看,更好的学习方式就是先建立起“系统观”。这也就是说,如果我们想要深入理解和优化 Redis,就必须要对它的总体架构和关键模块有一个全局的认知,然后再深入到具体的技术点。这也是我们这门课坚持的一种讲课方式。今天,在构造这个简单的键值数据库时,我们只需要关注整体架构和核心模块。原创 2023-04-26 16:56:50 · 176 阅读 · 0 评论