Redis高级
文章平均质量分 90
猿小羽
技术本身是不值钱的,只有和业务结合的技术才是值钱的!
技术是为了实现某个业务,进而通过业务赚钱!
展开
-
Redis八股
当 Redis 进行内存淘汰时,会使用。原创 2022-11-11 11:35:33 · 958 阅读 · 0 评论 -
第二十四章 替换策略:缓存满了怎么办
第二十四章 替换策略:缓存满了怎么办 ?什么是缓存数据的淘汰机制 ?数据淘汰机制包括两步:第一,根据一定的策略,筛选出对应用程序访问来说“不重要”的数据;第二,将这些数据从缓存中删除,为新来的数据腾出空间。设置多大的缓存容量合适 ?建议把缓存容量设置为总数据量的 15% 到 30%,兼顾访问性能和内存空间开销。设置 Redis 缓存存储上限:CONFIG SET maxmemory 4gbRedis 缓存有哪些淘汰策略 ?可以按照是否会进行数据淘汰把它们分成两类:不进行原创 2022-05-31 19:59:05 · 255 阅读 · 0 评论 -
第二十三章 旁路缓存:Redis是如何工作的
第二十三章 旁路缓存:Redis是如何工作的 ?缓存的特征一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存。以计算机系统为例:可以看到,CPU、内存和磁盘这三层的访问速度从几十 ns 到 100ns,再到几 ms,性能的差异很大。在计算机系统中,默认有两种缓存:CPU 里面的末级缓存,即 LLC,用来缓存内存中的数据,避免每次从内存中存取数据;内存中的高速页缓存,即 page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据。缓存的第一个特征:在一个原创 2022-05-31 19:46:42 · 362 阅读 · 1 评论 -
第二十一章 缓冲区:一个可能引发“惨案”的地方
第二十一章 缓冲区:一个可能引发“惨案”的地方什么是 缓冲区 ?主要就是用一块内存空间来暂时存放命令数据,以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能问题。但因为缓冲区的内存空间有限,如果往里面写入数据的速度持续地大于从里面读取数据的速度,就会导致缓冲区需要越来越多的内存来暂存数据。当缓冲区占用的内存超出了设定的上限阈值时,就会出现缓冲区溢出。如果不给缓冲区设置上限阈值,随着累积的数据越来越多,缓冲区占用内存空间越来越大,一旦耗尽了 Redis 实例所在机器的可用内存,就原创 2022-05-31 16:51:55 · 221 阅读 · 0 评论 -
第十七章 为什么CPU结构也会影响Redis的性能
第十七章 为什么CPU结构也会影响Redis的性能 ?主流的 CPU 架构一个 CPU 处理器中一般有多个运行核心,我们把一个运行核心称为一个物理核,每个物理核都可以运行应用程序。每个物理核都拥有私有的一级缓存(Level 1 cache,简称 L1 cache),包括一级指令缓存和一级数据缓存,以及私有的二级缓存(Level 2 cache,简称 L2 cache)。不同的物理核还会共享一个共同的三级缓存(Level 3 cache,简称为 L3 cache)。L3 缓存能够使用的存储资源比原创 2022-05-05 15:29:03 · 301 阅读 · 0 评论 -
第十六章 异步机制:如何避免单线程模型的阻塞
第十六章 异步机制:如何避免单线程模型的阻塞 ?Redis 的网络 IO 和键值对读写是由主线程完成的。如果在主线程上执行的操作消耗的时间太长,就会引起主线程阻塞。Redis 实例有哪些阻塞点 ?与 Redis 实例交互的对象有哪些 ?客户端:网络 IO,键值对增删改查操作,数据库操作;磁盘:生成 RDB 快照,记录 AOF 日志,AOF 日志重写;主从节点:主库生成、传输 RDB 文件,从库接收 RDB 文件、清空数据库、加载 RDB 文件;切片集群实例:向其他实例传输哈希槽信息原创 2022-05-05 11:36:05 · 536 阅读 · 0 评论 -
第十一章 “万金油”的String,为什么不好用了
第十一章 “万金油”的String,为什么不好用了 ?为什么 String 类型内存开销大 ?除了记录实际数据,String 类型还需要额外的内存空间记录数据长度、空间使用等信息,这些信息也叫作元数据。所谓元数据信息,就是描述信息的信息。当实际保存的数据较小时,元数据的空间开销就显得比较大了。String 类型具体是怎么保存数据的呢 ?String中保存整数会用 int编码 方式,而保存的数据是字符时会用 SDS(简单动态字符串) 结构体 来保存。buf:字节数组,保存实际数据。原创 2022-04-29 21:26:45 · 1282 阅读 · 0 评论 -
第十章 第1~9章常见问题答疑
第十章 第1~9章常见问题答疑整数数组和压缩列表作为底层数据结构的优势是什么 ?整数数组和压缩列表的设计,充分体现了 Redis“又快又省”特点中的“省”,也就是节省内存空间。整数数组和压缩列表都是在内存中分配一块地址连续的空间,然后把集合中的元素一个接一个地放在这块空间内,非常紧凑。因为元素是挨个连续放置的,我们不用再通过额外的指针把元素串接起来,这就避免了额外指针带来的空间开销。为什么主从库间的复制不使用 AOF ?RDB 文件是二进制文件,无论是要把 RDB 写入磁盘,还是要通过网原创 2022-04-28 18:54:15 · 407 阅读 · 3 评论 -
第九章 切片集群:数据增多了,是该加内存还是加实例
第九章 切片集群:数据增多了,是该加内存还是加实例 ?如何保存更多数据 ?redis应对数据量增多的两种方案:纵向扩展 和 横向扩展,那什么是纵向扩展,什么是横向扩展呢 ?纵向扩展:扩展硬件配置的深度,能容纳更多数据横向扩展:扩展redis的广度,能分摊更多数据纵向扩展 和 横向扩展 的优缺点是什么呢 ?纵向 优点:扩展使用简单缺点:受硬件和成本限制,大小受限。持久化时会比较长阻塞主线程,影响性能横向 优点:不受硬件限制,大小几乎无限。不影响性能缺点:复杂度增加原创 2022-04-28 18:52:31 · 548 阅读 · 0 评论 -
第八章 哨兵集群:哨兵挂了,主从库还能切换吗
第八章 哨兵集群:哨兵挂了,主从库还能切换吗 ?基于 pub/sub 机制的哨兵集群组成哨兵之间怎么知道彼此的地址和端口呢 ?依赖于redis的发布/订阅机制,每个哨兵都把自己的信息发送给主库,然后从主库订阅其他哨兵的消息,这样就可以互相知道其他哨兵的地址了在主从集群中,主库上有一个名为 “sentinel:hello” 的频道,不同哨兵就是通过它来相互发现,实现互相通信的。基于 INFO 命令的从库列表,这可以帮助哨兵和从库建立连接哨兵如何知道从库的 IP 地址和端口的呢 ?原创 2022-04-28 18:50:38 · 247 阅读 · 0 评论 -
第七章 哨兵机制:主库挂了,如何不间断服务
第七章 哨兵机制:主库挂了,如何不间断服务 ?哨兵机制的基本流程哨兵的主要职责:监控:通过 PING命令 来监控主从选主:主库挂了,在从库中按一定的机制选择一个作为新主库通知:通知其他从库和客户端新的主库信息让其他从库执行 replicaof 命令,和新主库建立连接,并进行数据复制监控:主观下线和客观下线哨兵对主库的下线判断有“主观下线”和“客观下线”两种。什么是主观下线 ?哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况,用来判断实例的状态。如果原创 2022-04-27 09:51:08 · 217 阅读 · 0 评论 -
第六章 数据同步:主从库如何实现数据一致
第六章 数据同步:主从库如何实现数据一致 ?Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。读操作:主库、从库都可以接收;写操作:首先到主库执行,然后,主库将写操作同步给从库。主从库间如何进行第一次同步 ?关于 replicaof 命令主从库间的第一次同步:多个Redis实例之间可以通过replicaof命令形成主库和从库的关系。例如,现在有实例 1(ip:172.16.19.3)和实例 2(ip:172.16.19.5),我们在实例 2 上执行以下原创 2022-04-26 22:39:28 · 1206 阅读 · 0 评论 -
第五章 内存快照:宕机后,Redis如何实现快速恢复?
第五章 内存快照:宕机后,Redis如何实现快速恢复?RDB 是给哪些内存数据做快照 ?RDB快照是全量快照,会将内存中的所有数据保存到磁盘中有哪些命令可以生成 RDB 文件 ?save 和 bgsave 可以生成RDB快照。save在主线程中执行,所以会产生阻塞。bgsave 会创建一个子进程专门写入RDB文件,所以不会产生阻塞,默认是使用 bgsave 这种方式。通过 bgsave 命令来执行全量快照,这既提供了数据的可靠性保证,也避免了对 Redis 的性能影响。RDB 快照时原创 2022-04-26 10:57:07 · 456 阅读 · 1 评论 -
第四章 AOF日志:宕机了,Redis如何避免数据丢失?
第四章 AOF日志:宕机了,Redis如何避免数据丢失?目前,Redis 的持久化主要有两大机制,即 AOF(Append Only File)日志和 RDB 快照。AOF 日志是如何实现的 ?AOF日志:Redis先执行命令,把数据写入内存,再记录日志AOF 为什么要先执行命令再记录日志呢 ?AOF 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。举例:redis执行 “set testkey testvalue” 命令:其中,“*3”表示当前命令有三个部分,原创 2022-04-24 23:47:33 · 645 阅读 · 0 评论 -
第三章 高性能IO模型:为什么单线程Redis能那么快?
第三章 高性能IO模型:为什么单线程Redis能那么快?Redis是单线程的吗 ? 你确定吗 ?Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。Redis 的持久化、异步删除、集群数据同步等功能是由其他线程而不是主线程来执行的,所以严格来说,Redis 并不是单线程。Redis 为什么用单线程 ?多线程会有额外开销和共享资源的并发访问控制问题,为了避免这些问题,Redis 采用了单线程的模式,而且采原创 2022-04-24 17:55:54 · 419 阅读 · 0 评论 -
第二章 数据结构:快速的Redis有哪些慢操作?
第二章 数据结构:快速的Redis有哪些慢操作?redis 表现突出的两个原因在内存中进行操作高效的数据结构Redis 常见数据类型redis 键值对中 值 的数据类型,也就是数据的保存形式String、List、Hash、Set、Sorted Set、Bitmap、GeoHash、HyperLogLogs、StreamsRedis 常见的几种数据结构说一下?各自的使用场景?string介绍:string 数据结构是简单的 key-value 类型。使用场景: 一原创 2022-04-24 15:50:58 · 418 阅读 · 0 评论