Redis为什么会快
- 完全基于内存的操作,绝大多数的请求都是内存的操作,并不需要通过硬盘进行存储,数据存于内存之中。
- 采用单线程,不存在多线程或者多线程切换导致消耗CPU,无需考虑各种锁的问题,不会出现死锁导致的性能消耗。
- 采用多路I/O复用模型,而非阻塞I/O;
- 数据结构简单,对数据操作也简单。
- 直接自己构建了VM机制,避免调用系统函数的时候,浪费时间去移动和请求。
Redis的数据类型
- String:可存储字符串、整数或者浮点数,适用于做简单的键值对缓存。
- List:可存储列表,适用于存储一些列表型的数据结构、比如粉丝列表、文章评论列表等。
- Set:存储无序集合,适用于交集、并集、差集操作,比如两个人粉丝列表的交集。
- Hash:存储包含键值对的无序散列表,适用于结构化的数据,比如对象。
- ZSet:存储有序集合,如获取排名前几名的用户。
Redis的应用场景
- 计数器
- 缓存
- 会话缓存
- 全页缓存
- 查找表
- 消息队列
- 分布式锁实现
Redis持久化机制
持久化是指将内存数据写入磁盘中去,防止宕机导致数据丢失。
Redis拥有两种持久化机制 RDB 和 AOF
RDB
RDB是Redis默认的持久化方式,按照一定时间将内存数据以快照形式保存到硬盘中,产生对应的数据文件dump.rdb。
优势:
- 只有一个dump.rdb,便于持久化。
- 容灾性好,一个文件可保存到安全的磁盘。
- 数据集较大时,比AOF的启动效率高。
劣势:
- 数据安全性低。由于是隔一段时间进行持久化,如果在此期间发生故障,会导致数据丢失。
- 备份时候占用内存, 在备份时会创建一个子进程,将数据写入临时文件,再将临时文件替换备份文件,因此持久化和数据恢复选择夜间较为合适。
AOF
AOF持久化是将Redis执行的每次写命令记录到单独的日志文件中,当重启redis就会重新从持久化的日志文件恢复数据 。当redis同时开启RDB和AOF时,将优先使用AOF。
优势:数据完整性和一致性更高,即便发生故障数据也能恢复。
劣势:当记录内容越来越多的时候,数据恢复速度也会越来越慢,
Redis过期键删除策略
- 定期过期:设置过期时间的key都需要创建一个定时器,到期时间自动清除。
- 惰性过期:每访问一个key,才进行判断key是否过期,过期则进行清除。
- 定期过期:每隔一段时间扫描一定数量的key,并清除过期的。