Redis知识汇总
数据类型
- Strings 字符型
- Hashes 字典
- Lists 集合
- Sets 不重复集合
- ZSet 有序集合
- bitmap
redis优点
- 速度快,数据在内存中,结构类似hashmap,查询时间复杂度是O(1)
- 支持丰富数据类型
- 支持事务,操作都是原子性
- 丰富特性:用于缓存,消息,按key设置过期时间,过期删除
Memcache对比
- 可以持久化
- 数据类型多样
- 底层模型不同,有自己的vm机制,寄生系统调用系统函数时间
单线程
使用队列技术将访问串行化
持久化
- RDB机制(在某一时间点上的切面)
优点
(1)只有一个文件 dump.rdb,方便持久化。
(2)容灾性好,一个文件可以保存到安全的磁盘。
(3)性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis的高性能)
(4)相对于数据集大时,比 AOF 的启动效率更高。
缺点
只能保证最终一致性,存在数据丢失风险 - AOF机制
优点:
(1)数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
(2)通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
(3)AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))
缺点:
(1)AOF 文件比 RDB 文件大,且恢复速度慢。
(2)数据集大的时候,比 rdb 启动效率低。
常见问题以及解决方案
- Master不进行内存快照,会阻塞主线程工作,当数据量大时候会影响redis读写性能。
- 数据重要的话,使其中一个从节点进行AOF备份,策略为1s一次,减少数据的丢失。
- 主从数据提升复制速度,使用一个局域网
- 注意加从节点时该台服务器的负载
- 主从复制采用链表结构解决单点故障,实现主从替换。
常见问题以及解决方案
- 定时删除,设置过期时间的同时指定一个定时器,定时取执行删除操作
- 惰性删除:直到数据再次被查询时再判断是否应该删除
- 定期删除:单独一个线程去检查, 删除过期键
`
淘汰策略
-
volatile lru 从设置过期时间的数据中淘汰最近没有用过的
-
volatile random 从设置过期时间的数据中随机淘汰
-
volatile-ttl 从设置过期时间的数据中淘汰快到期的
-
allkeys-lru 从所有数据集中淘汰最近没有用到的
-
allkeys-random 从所有数据集中随机淘汰
-
no-enviction 废除淘汰策略
-
策略规则
-
1.如果数据呈现幂律分布,也就是一部分数据常用一部分不常用,使用lru
-
2.如果出现平等分布,所有数据访问频率相同,使random
同步机制
- 主节点做bgsave
- 同时将后续修改记录到内存buffer中
- 开始同步rdb文件
- 从节点加载rdb到内存
- 执行主节点期键的修改操作记录