一、Redis主从集群

Redis提供了三种分布式方案:主从模式、哨兵模式和集群模式。

  1. 主从模式

    • 主从模式是Redis集群最基本的模式,主库负责读写,从库负责读。主库的数据会同步到从库,但是从库写的数据不会自动同步到主库。
    • 主从模式可以提高系统的读取性能,实现读写分离。但是应急能力比较差,如果主库宕机,需要手动进行故障恢复。
  2. 哨兵模式

    • 哨兵模式为主从模式提供了高可用性解决方案。哨兵节点会定期检查主节点和从节点的运行状态,如果发现主节点发生故障,哨兵节点会在从节点中选举出一个新的主节点,并通知其他的从节点和哨兵节点。
    • 哨兵模式还可以接收客户端的查询请求,返回当前的主节点信息,从而实现客户端的透明切换。
  3. 集群模式

    • 集群模式提供了更高的可用性和可扩展性。它将数据分布在多个节点上,每个节点负责一部分数据的存储和访问。
    • 集群模式还提供了自动分片、数据迁移和故障恢复等功能,可以动态地添加或删除节点,实现水平扩展。

二、Redis淘汰策略

Redis提供了多种内存淘汰策略来处理内存超出限制的情况。当Redis的内存使用达到最大允许的内存值,且没有更多的内存空间容纳新数据时,根据配置的淘汰策略,Redis会选择删除合适的键进行空间内存释放。以下是Redis支持的几种淘汰策略:

  1. noeviction:不淘汰任何数据,如果内存已经满了,不支持客户端写入新的数据,会直接返回错误。
  2. allkeys-lru:移除最近最少使用的key,不区分是否设置了过期时间。
  3. allkeys-random:随机移除某个key,不区分是否设置了过期时间。
  4. volatile-lru:在设置了过期时间的键空间中,移除最近最少使用的key。
  5. volatile-random:在设置了过期时间的键空间中,随机移除某个key。
  6. volatile-ttl:在设置了过期时间的键空间中,有更早过期时间的key优先移除。
  7. volatile-lfu(某些版本支持):针对设置了过期时间的key,按照一段时间内的访问频次,淘汰掉访问频次最低的key。
  8. allkeys-lfu(某些版本支持):不区分过期时间,按照一段时间内访问频次最低的key进行淘汰。

这些策略可以根据应用的需求进行选择,以达到最佳的性能和资源利用率。