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等算法.