- 博客(7)
- 资源 (1)
- 收藏
- 关注
原创 【redisRDB持久化问题】
RDB快照(1)亮点1:RDB快照就像拍合影,记录当时的状态,(2)要点1:RDB快照,将此时内存中的所有的数据写入磁盘,(3)要点2:生成快照有两种方式:sava和bgsava,save是主进程执行,生成时会阻塞redis,只能执行查找。bgsave是由主进程fork出子进程执行,(4)要点3:子进程在被fork处理时,与主进程共享同一份内存,但在生成快照时采取COW机制,确保不会阻塞主进程的数据读写(5)要点4:RDB的执行频率很重要,这会影响到数据的完整性和Redis的性能稳定性。所以4.0
2022-03-14 00:37:06
1095
原创 【Redis采用fork子进程重写AOF文件时,潜在的阻塞风险】
Redis采用fork子进程重写AOF文件时,潜在的阻塞风险包括:fork子进程 和 AOF重写过程中父进程产生写入的场景,下面依次介绍。a、fork子进程,fork这个瞬间一定是会阻塞主线程的(注意,fork时并不会一次性拷贝所有内存数据给子进程,老师文章写的是拷贝所有内存数据给子进程,我个人认为是有歧义的),fork采用操作系统提供的写实复制(Copy On Write)机制,就是为了避免一次性拷贝大量内存数据给子进程造成的长时间阻塞问题,但fork子进程需要拷贝进程必要的数据结构,其中有一项就是拷
2022-03-07 20:13:54
826
1
原创 【高性能IO模型:为什么单线程Redis能那么快?】
Redis 为什么用单线程?要更好地理解 Redis 为什么用单线程,我们就要先了解多线程的开销。多线程的开销日常写程序时,我们经常会听到一种说法:“使用多线程,可以增加系统吞吐率,或是可以增加系统扩展性。”的确,对于一个多线程的系统来说,在有合理的资源分配的情况下,可以增加系统中处理请求操作的资源实体,进而提升系统能够同时处理的请求数,即吞吐率。下面的左图是我们采用多线程时所期待的结果。但是,请你注意,通常情况下,在我们采用多线程后,如果没有良好的系统设计,实际得到的结果,其实是右图所展示的那样。
2022-03-04 19:02:57
150
原创 【redis的数据结构以及rehash】
redis的数据结构:1,亮点1:string,list,set,hast,sortset都只是数据的保存形式,底层的数据结构是:简单动态字符串,双向链表,压缩列表,哈希表,跳表,整数数组。2,亮点2:Redis使用了一个哈希表保存所有的键值对。3,要点1:五种数据形式的底层实现a: string:简单动态字符串b: list:双向链表,压缩列表c: hash:压缩列表,哈希表d: Sorted Set:压缩列表,跳表e: set:哈希表,整数数组4,要点2:List ,hash
2022-03-03 17:29:27
543
原创 【Redis Cluster采用hash槽的方式映射到实例】
Redis Cluster不采用把key直接映射到实例的方式,而采用哈希槽的方式原因:1、整个集群存储key的数量是无法预估的,key的数量非常多时,直接记录每个key对应的实例映射关系,这个映射表会非常庞大,这个映射表无论是存储在服务端还是客户端都占用了非常大的内存空间。2、Redis Cluster采用无中心化的模式(无proxy,客户端与服务端直连),客户端在某个节点访问一个key,如果这个key不在这个节点上,这个节点需要有纠正客户端路由到正确节点的能力(MOVED响应),这就需要节点之间互相交
2022-03-03 01:48:29
365
1
原创 【Redis使用规范】
我总结的 Redis 使用规范分为两大方面,主要包括业务层面和运维层面。业务层面主要面向的业务开发人员:1、key 的长度尽量短,节省内存空间2、避免 bigkey,防止阻塞主线程3、4.0+版本建议开启 lazy-free4、把 Redis 当作缓存使用,设置过期时间5、不使用复杂度过高的命令,例如SORT、SINTER、SINTERSTORE、ZUNIONSTORE、ZINTERSTORE6、查询数据尽量不一次性查询全量,写入大量数据建议分多批写入7、批量操作建议 MGET/MSET 替
2022-03-03 01:38:50
1508
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人