redis淘汰策略
首先我们要明确这里说的淘汰策略是淘汰散列表中的key-value,而不是value中的各个数据结构
过期key中
volatile-lru
从设置了过期时间的键中,移除最近最少使用的键(LRU算法)。适合需要优先保留高频访问数据的场景。
volatile-lfu
从设置了过期时间的键中,移除使用频率最低的键(LFU算法)。适合需要根据访问频率淘汰的场景。
volatile-ttl
从设置了过期时间的键中,优先移除剩余存活时间(TTL)最短的键。适合需要优先淘汰即将过期数据的场景。
volatile-random
从设置了过期时间的键中随机移除键。适合对淘汰顺序无特殊要求的场景。
所有key
allkeys-lru
从所有键中移除最近最少使用的键,无论是否设置过期时间。适用于缓存系统,优先保留热点数据。
allkeys-lfu
从所有键中移除使用频率最低的键。适用于需要严格按访问频率管理的缓存。
allkeys-random
从所有键中随机移除键。适用于数据重要性均匀分布的场景。
禁止淘汰
allkeys-random
从所有键中随机移除键。适用于数据重要性均匀分布的场景。
持久化
因为redis数据库是内存数据库,所以在 关闭系统时如果没有把数据存在磁盘中就会失去数据。
Redis提供两种主要的持久化方式:RDB(Redis Database)和AOF(Append Only File)。两种方式各有优缺点,可根据实际需求选择或结合使用。
AOF持久化
aof 日志存储的是 Redis 服务器的顺序指令序列,aof 日志只记录对内存修改的指令记录;通过重放(replay)aof 日志中指令序列来恢复 Redis 当前实例的内存数据结构的状态;
AOF分类
always:每次操作都进行同步
every_sec:每秒都进行同步
no:没有特定同步策略,根据cache line刷到主存的策略进行持久化
AOF-rewrite
aof 持久化策略会持久化所有修改命令;里面的很多命令其实可以合并或者删除; aof rewrite 在 aof 的基础上,满足一定策略则 fork 进程,根据当前内存状态,转换成一系列的 redis 命令,序列化成一个新的 aof 日志文件中,序列化完毕后再将操作期间发生的增量 aof 日志 追加到新的 aof 日志文件中,追加完毕后替换旧的 aof 日志文件;以此达到对 aof 日志瘦身的目 的;
优缺点
优点:数据可靠,丢失较少,持久化过程代价低
缺点:aof文件过大,数据恢复慢
RDB持久化
基于 aof 或 aof 复写文件大的缺点,rdb 是一种快照持久化;它通过 fork 主进程,在子进程中将内 存当中的数据键值对按照存储方式持久化到 rdb 文件中;rdb 存储的是经过压缩的二进制数据;
先fork进程防止redis进行增删查改影响,进行写时复制,此时fork后的子进程的虚拟地址指向的物理存储空间和父进程一样,这时父进程触发写保护中断,如果有服务器连接redis进行操作就会使父进程指向新的物理内存地址。
优缺点
优点:rdb文件小,数据恢复快
缺点:数据丢失多,持久化过程代价高
redis主从复制
主要用来实现 redis 数据的可靠性;防止主 redis 所在磁盘损坏,造成数据永久丢失;
master是主redis,两个从redis,从redis会连接主redis,获取最新的数据,如果
全量数据同步
增量数据同步
redis哨兵模式
哨兵会检测主redis和从redis是否正常,如果主redis出现差错,哨兵会从从redis中选一个数据最新的做主redis并把信息传递给client
redis cluster集群
Redis cluster 将所有数据划分为 16384(2的14次方)个槽位,每个 redis 节点负责其中一部分槽位。 cluster 集群是一种去中心化的集群方式; 如图,该集群由三个 redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据 多少可能不一样。这三个节点相互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议 交互集群信息; 当 redis cluster 的客户端来连接集群时,会得到一份集群的槽位配置信息。这样当客户端要查找某 个 key 时,可以直接定位到目标节点。 客户端为了可以直接定位(对 key 通过 crc16 进行 hash 再对 取余)某个具体的 key 所在节 点,需要缓存槽位相关信息,这样才可以准确快速地定位到相应的节点。同时因为可能会存在客户 端与服务器存储槽位的信息不一致的情况,还需要纠正机制(通过返回 -MOVED 3999 127.0.0.1:6479 ,客户端收到后需要立即纠正本地的槽位映射表)来实现槽位信息的校验调整。 另外,redis cluster 的每个节点会将集群的配置信息持久化到配置文件中,这就要求确保配置文件 是可写的,而且尽量不要依靠人工修改配置文件;
更多资料在:https://github.com/0voice查询