Redis
文章平均质量分 88
light_code
code everyday!
展开
-
缓存雪崩、缓存击穿、缓存穿透
我们每次往数据库写入数据时,计算该数据的N个哈希函数值,然后分别与布隆过滤器(一个位图数组)的长度取模,得到位图上的编号,接着,这N个编号上的值置为1,这样后面查询数据是否在布隆过滤器,就可以对数据同样求N个哈希值,看看N个编号上是否都是1,是则说明数据库。在进行业务操作的时候,如果缓存和布隆过滤器中都判断不存在这个数据,那么证明这个数据一定不存在于数据库,那么,就可以不用去数据库查找数据了。缓存雪崩和缓存击穿都可通过查询数据库进行缓存重构,但是缓存穿透就不一样了,它是缓存中没有数据,数据库中也没有数据。原创 2023-09-27 22:43:06 · 302 阅读 · 0 评论 -
Redis的哨兵机制
一个哨兵判断某个节点“主观下线”后,会通知其它哨兵对该节点的存活状态做出判断,只有规定数量quorum (一般是哨兵数量 / 2 + 1)的哨兵认为该节点下线,该节点才会被哨兵标记为“客观下线”配置文件中有一个down-after-milliseconds * 10的配置项,如果主从节点在down-after-milliseconds时间内没有连接上,就可以认为主从节点断连了,而一旦这种情况超过十次,就说明这个从节点的网络状况不好,不适合作为新的主节点。主节点是否存活,如果主节点挂了,他会从从节点中。原创 2023-09-27 22:42:33 · 500 阅读 · 0 评论 -
主从复制是怎么实现的?
当从服务器与主服务器断开TCP连接时,主服务器就无法向从服务器继续进行写操作的命令传播,这时,为了保证主从数据的一致性,Redis2.8之前,采用的方法是,在从服务器与主服务器重连之后,直接进行全量复制,但是,由于从服务器其实本身之前可能已经同步了一部分数据,这时再清空进行全量复制,开销就太大了。Redis提供了主从复制模式,将数据备份到多台服务器上,较好地保证数据的丢失,同时,一台服务器故障后,其它服务器还能够提供服务。主服务器要与许多的从服务器进行全量复制时,主服务器会不停的忙于fork子进程。原创 2023-09-26 22:52:36 · 765 阅读 · 0 评论 -
Redis过期删除策略和内存淘汰策略的区别
循环中每次从过期字典中抽取20个key检查是否过期,如果过期则删除,同时记录本轮20个key中过期的key的数量expired,循环检查完20个key后判断expired是否操作检查的key的25%,超过则进入下一检查。然后,再按照一定的概率对logc进行增加,logc值越大的key,越难再增加。Redis不是采用传统的LRU算法,而是在每个对象结构体中包含了一个额外字段,记录了这个对象的最后一次访问时间,这样,在进行内存淘汰的时候,直接随机抽取5(默认)个对象,然后淘汰最久没有使用的那个。原创 2023-09-25 19:01:48 · 284 阅读 · 0 评论 -
Redis大key对持久化的影响
总的来说是两方面:一方面策略在的情况下执行写指令会直接写入磁盘,在写入大key时,会阻塞主进程较长时间另一方面,都会由主进程fork出一个子进程,这样在遇到大key的情况下,和的时候,都会造成主进程的阻塞。原创 2023-09-24 13:13:12 · 62 阅读 · 0 评论 -
RDB快照
值得注意的是,子进程执行RDB快照的过程中,如果父进程对和子进程共享的数据(已经存在的键值对)进行了修改,由于写时复制技术(具体可以参见AOF持久化),父进程修改的物理内存会被复制一份出来给子进程,然后父进程再修改它的那份数据,而这时和AOF持久化不同的地方来了,父进程修改的键值对在子进程中,还是原来的数据,RDB持久化的时候,RDB文件中记录的还是旧的数据。写时复制还有个极端的情况,就是如果子进程执行快照期间,如果主进程修改了所有数据,那么所有的共享数据在内存中就会被复制一份,也就是。原创 2023-09-24 13:10:51 · 75 阅读 · 0 评论 -
AOF持久化
其实,在AOF重写的过程中,Redis执行完一条写命令后,会同时将它放到AOF缓冲区和AOFC重写缓冲区,子进程完成AOF的重写操作,就是将其内存中的键值对一个个转换成一条条命令后,写入新的AOF文件中,会向主进程发送一个异步信号,主进程接收到信号后就会调用一个信号处理函数,其中,会做两件事,一个是将AOF缓冲区中的内容追加到新的AOF文件中(使得新的AOF保持的是最新的数据库状态),然后再将新的AOF文件改名覆盖原来的AOF文件。这样,重写完成后,就会用新的AOF文件覆盖旧的AOF文件。原创 2023-09-24 13:09:35 · 48 阅读 · 0 评论