学习笔记(30):Java面试Offer直通车-结合案例和框架,在面试中展示redis技能

立即学习:https://edu.csdn.net/course/play/27126/371181?utm_source=blogtoedu

Redis 的集群

主从复制模式,有一个注解点,一个或多个从节点,主节点数据同步到从节点上,读写分离,如果系统并发量不高,可以用此模式

哨兵集群(sentinel)模式实现高可用,比如在主从下都带个哨兵,如果主节点宕了,哨兵节点会在从节点里选举一个节点担任主节点,并通知调用的客户端新的主从节点地址,哨兵模式一般至少一主两从

Redis的集群:哨兵VS Cluster模式

  1. 哨兵模式里,复杂度较高,而且水平扩展不怎么好做
  2. 官方推荐cluster模式,其中预设虚拟槽的范围为0到16383
  3. 可以设置若干个节点,把key按CRC16进行hash运算,把结果堆16383取余,再放入对应节点
  4. 发生故障和扩容时,只需迁移部分数据
  5. 也可引入主从热备冗余模式,一主可以带一从或多从

 防止缓存击穿

  1. 对null值和不存在的值也做缓存,redis的值设成null,以避免访问数据库
  2. 需要设置缓存过期时间,以避免永不失效的redis对象堆积再内存里造成OOM,但如大批缓存统一设置过期时间是10秒,到某个时刻会批量失效,该时刻数据库压力大,所以超时时间一般是10+随即秒
  3. 高并发场景,多个请求同时请求一个不存在的redis键时,会同时请求数据库,会导致数据库负载过大,对此,一个线程发现key不存在,锁这个key,得到数据写后,再释放锁,如有其它线程来访问遇到锁时,或等待,或直接返回null.

引入布隆过滤器防击穿

由长度为n的若干位bit组成,每位0或者1,针对不同的key,存在若干个(假设是3)hash函数,经每个

持久化的说辞

  1. 在我们的项目里,同时用到了RDB和AOF这两种缓存持久化方案
  2. Redis缓存是放在内存里的,如果停电会丢失,需要持久化存储
  3. RDB是每隔一定时间,比如5分钟,把当前redis存为数据文件
  4. AOF是每秒以追加命令的方式做持久化,并非追加数据
  5. 需要恢复时,第一时间点用RDB恢复,再用AOF存下命令补全
  6. 不是每个场景都需要有持久化,你的项目确实并发量比较大,如果不做持久化,一旦数据丢失对DB压力过大,再考虑持久化

Redis 内存淘汰的策略和处理过期数据的策略

allkeys-lru:  尝试回收最少使用的键

volatile-lru:尝试会搜最少使用的键,仅限于在过期的键

allkeys-random:随机回收

olatile-random:随机回收,仅限于过期的键

volatile-ttl:回收在过期集合的键,并且优先回收存活时间(TTL)较短的键

设置key的时间一般设置过期时间,删除过期数据的方式有定期删除和懒删除,定期删除是每隔一段时间随机找些key,过期就删,懒删除是,get时看是否过期,过期就删,但redis里的数据量太大,不可能定期全部扫描再统一删除。

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页