-
谈谈你对redis的理解
- redis是一个基于内存的高性能的key-value形式的数据库,它支持字符串(String) ,列表(List),集合(Set),有序集合(SortedSet),哈希(Hash) 五种基础的数据结构。
-
redis的优点
- 速度快,因为所有的数据都是存在内存中的。
- 支持丰富的数据类型:字符串、列表、集合、有序集合和哈希。
- 丰富的特性:订阅发布功能、key过期策略、事务等。
- 持久化存储:提供 RDB 和 AOF 两种数据的持久化存储方案。
-
redis的持久化机制
- redis提供了两种持久化机制,实现数据的持久化到硬盘。
- rdb(快照):在指定的时间间隔内将内存中的数据集快照写入磁盘。默认使用快照持久化方式,在对应的目录下生成一个dump.rdb文件,在重启后,会加载dump.rdb文件恢复数据。
-
# save "" save 900 1 save 300 10 save 60 10000 # By default Redis will stop accepting writes if RDB snapshots are enabled # (at least one save point) and the latest background save failed.
save 900 1表示:900秒内有1次更改,则将内存中的数据快照写入磁盘。
-
save 300 10表示:300秒内有10次更改,则将内存中的数据快照写入磁盘。
-
save 60 10000表示:60秒内10000次更改,则将内存中的数据快照写入磁盘。
- 工作原理:从主进程fork一个子进程,子进程先将数据写入临时rdb文件中,子进程写完数据后,用新的文件替换原来的旧文件。
-
- aof(日志):redis 默认不开启aof模式。它的出现是为了弥补rdb的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
- 手动开启,将配置文件中的appendonly的no修改为yes
appendonly yes
- 指定本地数据库文件名,默认值为 appendonly.aof
appendfilename "appendonly.aof"
- AOF的三种持久化方式
# appendfsync always appendfsync everysec # appendfsync no
- always:一直写,每次发生数据变化就写到磁盘,性能比较差,但安全性最高。
- everysec:默认设置,每秒钟同步一次,将多个写命令同步到硬盘。
- no:让操作系统决定何时进行同步。
- AOF的重写机制
- AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多。所以redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,redis就会对AOF文件的内容压缩。
auto-aof-rewrite-percentage 100 // 当前写入日志文件的大小超过上一次rewrite之后的文件大小的百分之100时就是2倍时触发Rewrite auto-aof-rewrite-min-size 64mb // 当前aof文件大于64mb后触发
描述:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。
- AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多。所以redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,redis就会对AOF文件的内容压缩。
- 手动开启,将配置文件中的appendonly的no修改为yes
- 总结持久化
- Redis 默认开启RDB持久化方式,在指定的时间间隔内,更改次数达到指定数量就执行写操作,将内存中的数据写入到磁盘中。
- RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
- Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
- AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
- Redis 针对 AOF文件大的问题,提供重写机制。
- 建议RDB和AOF都开启,RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。
-
Redis有哪几种数据淘汰策略
- volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
- allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据。