共计 1779 个字符,预计需要花费 5 分钟才能阅读完成。
reids 默认条件下反对数据的长久化操作。当 Redis 中有数据时会定期将数据保留到磁盘中。当 Redis 服务器重启时,会依据配置文件读取指定的长久化文件 实现内存数据的复原
长久化形式
RDB 模式
特点:
1.RDB 模式是 Redis 的默认的长久化策略
2.RDB 模式记录的是 Redis 内存数据的快照 ,最新的快照会笼罩之前的内容 所有 RDB 长久化文件占用空间更小 长久化的效率更高
3.RDB 模式因为是定期长久化 所以 可能导致数据的失落 是周期性的
命令:
- save 要求立刻马上长久化 同步的操作 其余的 Redis 操作会陷入阻塞的状态
- bgsave 开启后盾运行 异步的操作 因为是异步操作 所以无奈保障 rdb 文件是最新的,须要期待
配置:
1. 长久化文件名称:
2. 长久化文件地位
dir ./ 相对路径的写法
dir /usr/local/src/redis 绝对路径写法
3.RDB 模式长久化策略
AOF 模式
默认是敞开的,须要手动开启
特点:
1. 是异步的操作 记录的是用户的操作的过程 能够避免用户的数据失落
2. 因为记录的是程序的运行状态,所以长久化文件绝对较大,复原数据的工夫长 须要人为的优化长久化文件
长久化操作的总结
1. 如果不容许数据失落 应用 AOF 形式
2. 如果谋求效率 运行大量数据失落 应用 RDB 模式
3. 如果既要保障效率 又要保证数据 则应该配置 Redis 的集群 主机应用 RDB 从机应用 AOF
对于 Redis 内存策略
对于内存策略的阐明
阐明:Redis 数据的存储都在内存中. 如果始终想内存中存储数据 必然会导致内存数据的溢出.
解决形式:
- 尽可能为保留在 redis 中的数据增加超时工夫.
- 利用算法优化旧的数据.
LRU 算法
特点: 最好用的内存优化算法.
LRU 是 Least Recently Used 的缩写,即 最近起码应用 ,是一种罕用的页面置换算法,抉择最近最久未应用的页面予以淘汰。该算法赋予每个页面一个拜访字段,用来记录一个页面自上次被拜访以来所经验的工夫 t,当须淘汰一个页面时,抉择现有页面中其 t 值最大的,即最近起码应用的页面予以淘汰。
维度: 工夫 T
LFU 算法
LFU(least frequently used (LFU) page-replacement algorithm)。即最不常常应用页置换算法 ,要求在页置换时置换援用计数最小的页,因为常常应用的页应该有一个较大的援用次数。然而有些页在开始时应用次数很多,但当前就不再应用,这类页将会长工夫留在内存中,因而能够将引 用计数寄存器定时右移一位 ,造成指数衰减的均匀应用次数。
维度: 应用次数
RANDOM 算法
随机删除数据
TTL 算法
把设定了超时工夫的数据将要移除的提前删除的算法.
Redis 内存数据优化
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 如果内存溢出了 则报错返回. 不做任何操作. 默认值
对于 Redis 缓存面试题
问题形容: 因为海量的用户的申请 如果这时 redis 服务器呈现问题 则可能导致整个零碎解体.
运行速度:
- tomcat 服务器 150-250 之间 JVM 调优 1000/ 秒
- NGINX 3- 5 万 / 秒
- REDIS 读 11.2 万 / 秒 写 8.6 万 / 秒 均匀 10 万 / 秒
缓存穿透
问题形容: 因为用户 高并发 环境下拜访 数据库中不存在的数据时 , 容易导致缓存穿透.
如何解决: 设定 IP 限流的操作 nginx 中 或者微软服务机制 API 网关实现.
缓存击穿
问题形容: 因为用户 高并发 环境下, 因为某个数据之前存在于内存中, 然而因为非凡起因 (数据超时 / 数据意外删除) 导致 redis 缓存生效. 而使大量的用户的申请间接拜访数据库.
俗语: 趁他病 要他命
如何解决:
1. 设定超时工夫时 不要设定雷同的工夫.
2. 设定多级缓存
缓存雪崩
阐明: 因为 高并发 条件下 有 大量的数据生效 . 导致 redis 的命中率太低. 而使得用户间接拜访数据库(服务器) 导致奔溃, 称之为缓存雪崩.
解决方案:
1. 不要设定雷同的超时工夫 随机数
2. 设定多级缓存.
3. 进步 redis 缓存的命中率 调整 redis 内存优化策略 采纳 LRU 等算法.