Redis
Charles_yy
一个挣扎在学习路上的学渣渣
展开
-
Redis 哨兵模式原理
1)哨兵模式原理①哨兵如何实现相互监督的功能哨兵通过发布订阅__sentinel__:hello channel来实现这个功能。每个哨兵每隔2s会向自己监控的所有主从Redis节点发送hello message,包括自己的IP、端口、运行ID、自己监控的Master节点IP、Master节点端口。 所有主从Redis节点也会反馈这样的信息②哨兵如何故障检测基于多数投票原则第一:某个哨兵节点判定master节点故障,他会投出一票S_DOWN(主观下线)第二:当有足够多的sentinel原创 2020-10-22 22:32:32 · 319 阅读 · 0 评论 -
分布式锁有三种实现方式
分布式锁有三种实现方式:1. 数据库乐观锁;利用数据版本 Version 记录机制实现:2. 基于Redis的分布式锁; SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果。缓存过期时,通过 SetNX 获取锁,如果成功了,那么更新缓存,删除锁,需要注意的是:如果请求执行因为某些原因意外退出了,导致创建了锁但是没有删除锁,那么这个锁将一直存在,以至于以后缓存再也得不到更新。于是乎我们需要给锁加一个过期时间以防...原创 2020-10-22 20:44:09 · 478 阅读 · 0 评论 -
Redis 缓存穿透+缓存击穿+缓存雪崩
Redis 缓存穿透+缓存击穿+缓存雪崩1.缓存穿透:缓存穿透是指读的请求在缓存redis中没有命中,需要从mysql数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。 1.2解决办法: 缓存空对象 当存储层不命中后,即使数据库返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,依次保护了后端数据源。 ...原创 2020-10-22 20:25:04 · 398 阅读 · 0 评论 -
缓存与数据库数据不一致 解决方法
Redis缓存与数据库数据一致性不管是先写数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况:1.如果删除了缓存,还没有来得及写数据库,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。 2.如果先写了库,在删除缓存前,写库的线程宕机了,没有删除掉缓存,则也会出现数据不一致情况。1.第一种方案:延时双删策略+缓存超时设置在写库前后都进行删除缓存操作(redis.del(key)),并且设定合理的缓存过期时间。具体的步骤就是:.原创 2020-10-22 17:41:23 · 1199 阅读 · 0 评论 -
Redis 淘汰删除策略
Redis 淘汰删除策略目前,Redis采用的是惰性删除+定期删除的方案1. 定时删除在设置键过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作; 1.1 定时删除优劣定时删除操作对于内存来说是友好的,内存不需要操作,而是通过使用定时器,可以保证尽快的将过期键删除; 对于CPU来说不是友好的,如果过期键比较多的话,起的定时器也会比较多,删除的这个操作会占用到CPU的资源;2. 惰性删除当key被操作时(如get,set)时,Redis 会被动..原创 2020-10-22 11:25:14 · 230 阅读 · 0 评论