liunx篇】 十二. Redis持久化机制和内存回收机制 五

中国加油,武汉加油!

篇幅较长,配合目录观看

案例准备

  1. 本案例基于liunx篇】 十二. Redis发布订阅和超时指令 四

1. Redis持久化机制

Redis会定期的把内存中的数据持久化到硬盘上,当Redis服务关闭后,重启Redis会自动把硬盘的数据恢复到内存中继续使用。

1.1 Redis两种持久化方式

1.1.1 RDB(快照,默认的方式)

  1. 记录当前Reids一瞬间的内存结构,以文件的形式保存的硬盘上。
  2. save: 手动进行快照,这个过程是前台快照,在执行的快照的的过程中,Redis是拒绝写命令的。
  3. bgsave: 手动进行快照,这个过程是后台快照,Redis会启动一个新的线程执行快照,当前线程是接收执行写命令的(它是把写的命令放到缓存中)

1.1.1.1 修改配置

cd /usr/local/redis3/bin
vim redis.conf
save 900 1   # 配置快照的频率,意思是900s之内有1个数据发送了变化就拍快照。
save 300 10
save 60 10000 
stop-writes-on-bgsave-error yes # 因为bgsave命令是启动一个新的线程执行快照,当前线程还是接收写命令的,如果新线程在执行快照的过程中出现错误是否停止写命令,默认是yes,这样用户可以感知到执行快照失败。 
rdbchecksum yes # 快照时检查快照的完整性
dbfilename dump.rdb  # 生成快照文件的名字(可以把这个文件发送给别人,启动后缓存就会有的对应的数据)
dir ./   #快照文件存放的位置

1.1.2 AOF(只追加文件)

AOF把服务器执行的所有写(增删改)的命令记录在一个文件中,并在服务器启动时,通过重新执行这些命令来还原数据集。

1.1.2.1 修改配置

appendonly no # 是否开启只追加文件
appendfilename "appendonly.aof" # 只追加文件的名称
# 只追加文件记录评率
# appendfsync always # 每次执行写操作后记录到只追加文件中(绝对安全)
appendfsync  everysec # 每秒中记录一次只追加文件(默认值)
# appendfsync  no # 不主动记录只追加文件,需要手动记录
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb # 只追加文件的大小,超过64兆新建一个文件记录命令
aof-load-truncated yes # 如果最后一个命令出现错误,是否丢弃。

1.2 快照 VS 只追加文件

  1. 快照:记录和恢复的速度快,数据的安全性不高(因为他是按照时间来记录的)
  2. 只追加文件:记录和恢复的速度慢(命令一旦很多久执行慢),数据安全性高(因为最多只丢失1s的数据)
  3. 如果Redis只是作为缓存服务器话,快照和只追加文件都可以关闭,这样可以大大的提高Redis读写性能,如果对数据要求安全性很高,则两个都可以开启。

2. Reids内存回收机制

cd /usr/local/redis3/bin
vim redis.conf
算法名称 算法描述
volatile-lru 只限于设置了 expire 的部分; 优先删除最近最少使用的 key
allkeys-lru 所有key通用; 优先删除最近最少使用的 key
volatile-random 采用随机淘汰策略删除超时的键值对
allkeys-random 只限于设置了 expire 的部分; 随机删除一部分 key
volatile-ttl 只限于设置了 expire 的部分; 优先删除剩余时间短的key
noeviction 不淘汰任何键值对,当内存已满,只支持读,不支持写

2.1 注意

为了提高垃圾回收的策略,LRU和TTL算法都不是精确的算法,而是一个近似的算法。
就是他会根据探测样本的数量设置,来进行探测,然后根据探测到这几个进行淘汰。
LRU:看命中率

maxmemory-samples 5 #设置抽取的样本数量

2.2 总结

  1. 默认的回收策略:默认不回收
  2. 设置回收的算法:LRU,random,TTL
  3. 算法不是精确的,而是采样的方式,可以设置采样的个数,默认是5个
发布了126 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TheNew_One/article/details/105248357