Redis知识点
Memcache
Redis和Memcache的区别?
优点:
- MC 处理请求时使用多线程异步 IO 的方式,可以合理利用 CPU 多核的优势,性能非常优秀;
- MC 功能简单,使用内存存储数据;
- MC 的内存结构以及钙化问题;
- MC 对缓存的数据可以设置失效期,过期后的数据会被清除;
- 略采用延迟失效,就是当再次使用数据时检查是否失效;
- 满时,会对缓存中的数据进行剔除,剔除时除了会对过期 key 进行清理,还会按 LRU 策略对数据进行剔除。
缺点: - key 不能超过 250 个字节;
- value 不能超过 1M 字节;
- key 的最大失效时间是 30 天;
- 只支持 K-V 结构,不提供持久化和主从同步功能。
Redis优点:
- Redis 采用单线程模式处理请求。采用非阻塞的异步事件处理机制;另一个是缓存数据都是内存操作 IO 时间不会太长,单线程可以避免线程上下文切换产生的代价。
- Redis 支持持久化,所以 Redis 不仅仅可以用作缓存,也可以用作 NoSQL 数据库。
- 相比 MC,Redis支持多种数据格式,例如 list、set、sorted set、hash 等。
- Redis 提供主从同步机制,Cluster 集群部署能力,能够提供高可用服务。
Redis数据结构
String、Hash、List、Set、SortedSet
String
redis中最常用的数据结构
应用场景:
- 缓存功能
- 计数器
- 共享session
Hash
类似于Map的一种结构
List
有序列表
应用:
- 消息队列
- 数据分页
Set
无序列表,自动去重
基于set交集并集差集操作
SortedSet
排序的 Set
应用:
- 排行榜
- 带权重的队列
Redis指令
keys
Redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。
Redis常见问题
- 缓存雪崩 大量key同一时间失效,解决方法:缓存失效时间设置随机值
- 缓存穿透 查询一个不存在的key,解决方法:参数校验,布隆过滤器
- 缓存击穿 一个热点key瞬间失效,解决方法:热点数据永不过期
缓存穿透
Redis持久化
RDB做镜像全量持久化,AOF做增量持久化。
Redis 提供了 RDB 和 AOF 两种持久化方式,RDB 是把内存中的数据集以快照形式写入磁盘,实际操作是通过 fork 子进程执行,采用二进制压缩存储;AOF 以文本日志的形式记录 Redis 处理的每一个写入或删除操作。
RDB 把整个 Redis 的数据保存在单一文件中,比较适合用来做灾备,但缺点是快照保存完成之前如果宕机,这段时间的数据将会丢失,另外保存快照时可能导致服务短时间不可用。
AOF 对日志文件的写入操作使用的追加模式,有灵活的同步策略,支持每秒同步、每次修改同步和不同步,缺点就是相同规模的数据集,AOF 要大于 RDB,AOF 在运行效率上往往会慢于 RDB。
RDB会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要AOF来配合使用。在redis实例重启时,会使用RDB持久化文件重新构建内存,再使用AOF重放近期的操作指令来实现完整恢复重启之前的状态。
Redis集群
Redis Sentinal 着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。
Redis Cluster 着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。