Redis缓存--Redis常规属性

Redis缓存机制

三、关于Redis常规属性

1.Redis中持久化策略–RDB

1.1需求说明

说明: Redis中将数据都保存到了内存中,但是内存的特点断电及擦除. 为了保证redis中的缓存数据不丢失,则需要将内存数据定期进行持久化操作.
持久化: 将内存数据,写到磁盘中.

1.2RDB模式

特点:
1.RDB模式是Redis默认的持久化规则.
2.RDB模式记录的是Redis内存数据快照(只保留最新数据)
3.RDB模式定期持久化(时间可调) 可能会导致数据丢失.
4.RDB模式备份效率是最高的.
5.RDB模式备份阻塞式的 在备份时不允许其他用户操作. 保证数据安全性. save
命令:
1.主动备份 save 会阻塞用户操作
2.后台备份 bgsave 异步的方式进行持久化操作 不会阻塞.

1.3关于持久化配置

(1)save 900 1 900秒内,用户执行了一次更新操作时,那么就持久化一次
(2)save 300 10 300秒内,用户执行了10次更新操作. 那么就持久化一次
(3)save 60 10000 60秒内,用户执行了10000次的更新操作,则持久化一次.
(4)save 1 1 1秒内 1次更新 持久化一次!! 性能特别低.
此信息位于redis.conf配置文件中

1.4关于持久化文件名称设定

默认的条件下,持久化文件名称 dump.rdb
在这里插入图片描述

1.5 文件存储目录

在这里插入图片描述

2 Redis持久化策略–AOF

2.1 AOF特点

(1)AOF模式默认的条件下是关闭状态.需要手动开启.
(2)AOF模式记录的是用户的操作过程. 可以实现实时持久化.保证数据不丢失.
(3)AOF模式维护的持久化文件占用的空间较大.所以持久化效率不高. 并且需要定期的维护持久化文件.
(4)AOF模式一旦开启,则redis以AOF模式为主 读取的是AOF文件.

2.2 AOF配置

(1)开启AOF模式
在这里插入图片描述
(2)持久化策略
always: 用户更新一次,则持久化一次.
everysec: 每秒持久化一次 效率更高
no: 不主动持久化. 操作系统有关. 几乎不用.
在这里插入图片描述

3 Redis面试题

3.1 关于flushAll操作

业务场景:
小丽是一个特别漂亮的实习生.你是他的项目主管. 由于小丽业务不熟,在生产环境中无意执行了flushAll操作. 问如何补救??
场景1: redis中的服务只开启了默认的持久策略 RDB模式.
解决方案:
1.关闭现有的redis服务器.
2.检查RDB文件是否被覆盖. 如果文件没有覆盖.则重启redis即可.(希望渺茫)
3.如果flushAll命令,同时执行了save操作,则RDB模式无效.

场景2: redis中的服务开启了AOF模式.
解决方案:
1.关闭redis服务器.
2.编辑redis 持久化文件 将flushAll命令删除.
3.重启redis服务器

一般条件下: RDB模式和AOF模式都会开启. 通过save命令执行rdb持久化方式.

3.2单线程Redis为什么快

(1)redis运行环境在内存中,纯内存操作.
(2)单线程操作 避免频繁的上下文切换. 避免了开关链接的开销.
(3)采用了非阻塞I/O(BIO|NIO) 多路复用的机制(动态感知).
在这里插入图片描述
(4)Redis最新版本 6.0版本 6.0以前的版本都是单线程操作方式. 6.0以后支持多线程操作方式. (执行时依旧是单线程操作).

4 关于Redis内存优化策略

4.1业务场景

如果频繁使用redis,不停的向其中保存数据,并且不做删除操作,则内存必然溢出,能否优化内存策略,能否自动的删除不用的数据,让redis中保留热点数据。

4.2LRU算法

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面(数据)予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
计算维度: 自上一次以来所经历的时间T.
在这里插入图片描述
说明:LRU算法是内存优化中最好用的算法。

4.3LFU算法

LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
维度: 引用次数
常识: 计算机左移 扩大倍数
计算机右移 缩小倍数
在这里插入图片描述

4.4随机算法

随机删除数据

4.5TTL 算法

说明:将剩余存活时间排序,将马上要被删除的数据,提前删除.
在这里插入图片描述

4.6Redis默认的内存优化策略

说明1: Redis中采用的策略定期删除+惰性删除策略
说明2:
1.定期删除: redis默认每隔100ms 检查是否有过期的key, 检查时随机的方式进行检查.(不是检查所有的数据,因为效率太低.)
问题: 由于数据众多,可能抽取时没有被选中.可能出现 该数据已经到了超时时间,但是redis并没有马上删除数据.
2. 惰性策略: 当用户获取key的时候,首先检查数据是否已经过了超时时间. 如果已经超时,则删除数据.
问题: 由于数据众多, 用户不可能将所有的内存数据都get一遍.必然会出现 需要删除的数据一直保留在内存中的现象.占用内存资源.
3.可以采用上述的内存优化手段,主动的删除.

内存优化算法说明:
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算法
8.noeviction 不主动删除数据,如果内存溢出则报错返回.
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值