概述
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
缓存策略
主要是为了提高用户获取数据的速度,让响应更快,降低用户访问物理设备的频次,要求缓存中的数据就是数据库中的数据。
缓存的设计
1、数据结构为 key-value 结构
2、C语言开发
3、被动使用LRU算法维护内存大小
4、设计时效性
5、持久化策略
6、事务控制
redis配置
修改redis.conf文件
1、关闭IP绑定
2、关闭保护模式
3、开启后台启动
redis持久化策略
redis有两种持久化策略,一种是RDB模式,一种是AOF模式。
redis会定期将内存中的数据保存到持久化文件中,如果redis服务器宕机重启时,会根据配置文件中的持久化文件名称实现数据的读取,从而实现了内存数据的恢复。
RDB模式
- 1、RDB模式是redis默认开启的策略。
- 2、RDB模式记录的是redis数据的内存快照,执行效率高,恢复数据速度快。
- 3、RDB模式周期性的进行持久化,会导致少量的数据丢失。
- 4、RDB模式是同步操作,持久化时会造成线程阻塞。
配置
1、指定RDB模式的名称
2、指定持久化文件位置,默认条件在当前目录下生成
持久化命令
save /bgsave
save:要求立即进行持久化,这是其他线程会陷入阻塞
bgsave:在后台进行持久化操作,但是不知道具体什么时间完成,当redis空闲时就会经型持久化,不会产生阻塞,异步操作。
RDB模式持久化策略
save 900 1 900秒内如果执行1次更新操作,则持久化1次.
save 300 10 300秒内如果执行了10次更新操作,则持久化1次.
save 60 10000 60秒内如果执行了10000次更新操作,则持久化1次.
save 1 1 1秒内如果执行了1次更新操作,则持久化1次. 效率太低
AOF模式
- 1、AOF模式默认条件下的关闭的,需要手动开启。
- 2、AOF模式记录的是用户的操作过程,将用户的操作命令追加到持久化文件中,所以AOF的持久化文件较大,恢复数据慢,需要定期维护该文件。
- 3、AOF模式可以实现实时的数据持久化。
- 4、AOF模式是异步操作,不会陷入阻塞
配置
1、开启AOF模式
2、指定持久化文件名称
AOF模式内存策略
appendfsync always 用户执行一次更新操作,则持久化一次
appendfsync everysec 每秒持久化一次. 效率较高但是低于RDB模式.
appendfsync no 持久化的时间由操作系统决定 一般不用.
关于持久化方式的选择
原则:如果允许少量的数据丢失,则首选RDB模式。如果内存数据不允许丢失,则选用AOF模式。
实际用法:
- 1、redis当作缓存时,使用RDB模式
- 2、redis当作数据库或消息中间件时,使用AOF模式
Redis内存策略
redis内存配置
1、内存大小的配置
2、修改内存策略为lru
先说两种算法
1、LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
2、LFU算法
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
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 将马上要超时的数据提前删除.
8.noeviction 默认的策略 如果内存数据满足,但是不删除数据,直接报错返回.