一、Redis介绍
C语言开发的高性能k-v缓存中间件,支持string、set、sorted set、list、hash数据结构。
二、Redis优势
大部分操作都是纯内存操作,速度非常快
数据结构简单,操作方便
单线程,避免了频繁的上下文切换和竞争
多路IO复用模型,非阻塞IO
三、应用场景
计数器、常用缓存、回话缓存、消息队列(lpush、rpop)、分布式锁
四、Redis持久化
两种模式都开启的情况下,重启会优先选择AOF恢复。
RDB(默认):按照一定时间,将内存数据以快照形式保存到硬盘中
优点:只有一个文件,方便持久化;fork子线程来进行持久化,保证了高性能;大数据集时启动比AOF快。
缺点:安全性低、每隔一段时间进行持久化,若持久化过程中出现故障,会导致数据丢失,适合对数据严谨要求不高的场合。
AOF:Redis将每次写命令记录到单独的日志文件中,当重启Redis会从日志文件的命令执行一遍恢复数据
优点:安全性高,每一个写操作都会记录到aof文件中,即使备份过程中出现故障,也可通过redis-check-aof工具修复。aof文件过大时可以进行重写合并一些操作命令。
缺点:比RDB文件大,恢复效率低
五、key删除策略
定时删除+惰性删除
定时删除:定期扫描随机获取一些key,如果过期进行删除。
惰性删除:在访问的时候,发现key已经过期,再删除。
六、内存不足时的key淘汰策略
全局键空间设置:
写入报错、移除最近少使用的key、随机删除
设置过期时间的键空间设置:
移除最近少使用的key、随机删除、更早过期删除
七、Redis事务
三阶段:事务开始、命令入队、事务执行(一次性、顺序性、排他性)
不支持回滚、命令错误则事务内的所有命令都不执行、执行时有运行错误则正确的命令会被执行。
八、集群
1. 基于哨兵的主从模式
哨兵是redis集群中一个非常重要的组件
主要作用有:集群监控、消息通知、故障转移、配置中心
故障转移时,判断一个master节点是否不可用,需要大部分哨兵都同意才行,涉及分布式选举的问题。
即使部分哨兵节点挂掉,哨兵集群还是可以正常工作。
至少需要3个节点实例保证健壮性、哨兵+redis主从集群是不能保证数据零丢失的。
2. 官方Redis Cluster集群方案
slot卡槽,一共16384个槽,请求发送到任意节点上,接受到请求的节点会将查询请求发送到正确的节点上。
通过hash将数据分片,每个节点上存储一定的hash槽区间
缓存穿透、缓存预热、热点数据
来源:oschina
链接:https://my.oschina.net/u/2307176/blog/4703034