(1)Redis的内存淘汰策略是什么?
当Redis的内存超过最大允许的内存之后,Redis会触发内存淘汰策略,删除一些不常用的数据,以保证Redis服务器的正常运行。
Redisv4.0前提供 6种数据淘汰策略:
volatile-lru:只对设置了过期时间的键进行淘汰,淘汰策略是LRU。(Least Recently Used,即删除最近最少访问的键)
allkeys-lru:对所有键(包括没有设置过期时间的键)采用LRU淘汰策略。(最常用)
volatile-ttl:淘汰即将过期的键,优先淘汰剩余生存时间(TTL)较短的键。
volatile-random:随机淘汰那些设置了过期时间的键。
allkeys-random:随机淘汰所有键,不论是否设置了过期时间。
no-eviction:当内存达到限制时,不进行数据淘汰,而是拒绝所有会导致内存超出限制的写入请求,并返回错误。
Redisv4.0后增加以下两种:
volatile-lfu:只对设置了过期时间的键进行淘汰,淘汰策略是LFU(Least Frequently Used),删除使用频率最低的键。
allkeys-lfu:对所有键(包括没有设置过期时间的键)采用LFU淘汰策略。
(2)介绍一下Redis的哨兵机制?
哨兵模式:master节点挂掉后,哨兵进程会主动选举新的master,可用性高。但是每个节点存储的数据是一样的,浪费内存空间。数据量不是很多,集群规模不是很大,需要自动容错容灾的时候使用。(在主节点出现故障时,自动识别并执行故障转移操作,将一个从节点提升为主节点,同时更新其它从节点向新主节点的复制关系,确保整个集群的高可用性。)
Redis Sentinel部署架构:Redis Sentinel集群和Redis数据集群。其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel的节点数量要满足2n+1(n>=1)的奇数个。