关于Redis配置说明
Redis持久化的说明
redis默认条件下支持数据的持久化操作,当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.AOF模式默认条件下是关闭的,需要手动开启,开启之后需要重启才能生效。
2.AOF模式是异步的操作,记录的是用户的操作的过程,可以防止用户的数据丢失。
3.由于AOF模式记录的是程序的运行状态,所以持久化文件相对较大,恢复数据的时间长, 需要人为的优化持久化文件。
配置:
总结:
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等算法.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。