持久化机制
Redis中的运行环境在内存中, 但是内存特点 断电即擦除.
想法:能否保存redis中的内存数据不丢失呢?
持久化: 将内存数据定期保存到磁盘中.
RDB模式
1 关于RDB模式说明
1.Redis 定期 将内存数据保存到RDB文件中.
2.RDB模式 redis默认的规则.
3.RDB模式记录的是内存数据的快照 ,持久化效率更高(只保留最新数据)
4.RDB模式由于定期持久化,可能导致数据丢失.
2 RDB命令
1: 持久化操作 save 同步操作 可能其他线程陷入阻塞
2: 后端持久化 bgsave 异步操作 用户操作不会陷入阻塞 该操作什么时候完成不清楚.
3 RDB模式配置
在redis目录下输入vim redis.conf对redis.conf进行配置
RDB默认开启
save 900 1 900秒内用户更新1次 则持久化1次
save 300 10 300秒内用户更新10次 持久化 1次
save 60 10000 60秒内用户更新10000次 持久化1次
优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
如果想让持久化性能更优,则需要通过监控的手段灵活运用.
用户操作越频繁,则持久化周期越短.
AOF模式
1 开启AOF模式
默认条件下AOF模式 默认关闭的.
在redis目录下输入vim redis.conf对redis.conf进行配置
在此页面输入":set nu"显示行数
输入":/appendonly"查找appendonly
将appendonly后面的no改为yes打开AOF模式
重启redis服务生效
2 AOF模式特点
说明: 当开启AOF策略之后,redis持久化以AOF为主.
特点:
- AOF文件默认关闭的,需要手动开启
- AOF文件记录的是用户的操作过程.则可以实现实时持久化操作.(几乎不丢数据)
- AOF文件做追加的操作,所有持久化文件较大.
- AOF持久化时,采用异步的方式进行.
- AOF文件需要定期清理.
插入数据删除然后exit进入redis目录
输入vim appendonly.aof进入此文件
.aof文件记录了用户的操作
按i进入编辑模式删除FLUSHALL操作
重启redis服务,数据恢复
4关于AOF与RDB如何选择
1.如果用户追求速度,允许少量的数据丢失 首选RDB模式. 快
2.如果用户追求数据的安全性. 首选AOF模式.
内存优化策略
1 关于内存优化的说明
Redis运行环境,在内存中. 但是内存资源有限的.不能一味的扩容.所以需要对内存数据优化.
Redis内存大小的设定:
最大内存设定
默认是10MB
1 LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面(数据)予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
维度: 时间T
2 LFU算法
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
维度: 引用次数
3随机算法
说明: 随机生成挑选数据删除.
4 TTL算法
说明: 根据设定了超时时间的数据,将马上要超时的数据提前删除.
算法优化
1.volatile-lru 设定超时时间的数据中,采用lru算法删除数据.
2.allkeys-lru 在所有的数据中 采用LRU算法删除数据.
3.volatile-lfu 在设定了超时时间的数据中 采用LFU算法删除数据.
4.allkeys-lfu 在所有数据中. 采用LFU算法删除数据.
5.volatile-random 设定了超时时间数据,采用随机的方式删除数据
6.allkeys-random 所有数据采用随机算法.
7.volatile-ttl 设定超时时间的数据,采用TTl算法删除.
noeviction 默认不删除数据. 如果内存满了,则报错返回. 默认策略