Redis
优点:
1.速度快
redis里面的所有数据都是存在内存中所以减少了操作数据对于IO磁盘的读写操作的限制,从而提高数据读取和操作的速度
redis在接受客户端请求的时候是属于单线程操作
使用I/O多路复用模型--后续补充说明
高效的数据结构--后续补充说明
2.支持多种数据类型
支持五种数据类型
3.支持事务
操作都是原子性,要么全部完成要么全部不完成
4.丰富的特性
可以用于缓存/消息/按照key设置过期时间,过期后会自动删除
redis里面一共是有16个数据库编号为0-15
数据类型
支持五种数据类型
String(字符串)
list(列表)
hash(哈希)
set(集合)
zset(有序集合)
持久化机制
RDB持久化
数据采用数据集快照的形式进行部分持久化模式,记录数据库的所有的键值对,在某一个时间点将数据写入的临时文件,持久化结束以后用这个临时文件替换上一次持久化的文件从而达到数据而定恢复但是这个存在数据丢失的现象
AOP持久化
是将所有的命令记录以redis的命令请求格式进行完全的持久化存储保存为aof文件,读的操作不进行记录
持久化方式 | RDB | AOF |
---|---|---|
占用存储空间 | 小(数据级:压缩) | 大(指令级:重写) |
存储速度 | 慢 | 快 |
恢复速度 | 快 | 慢 |
数据安全性 | 会丢失数据 | 依据策略决定 |
资源消耗 | 高/重量级 | 低/轻量级 |
启动优先级 | 低 | 高 |
redis过期键的删除策略
1.定时删除(时间换空间)
创建一个定时器,当key设置了有过期时间,当过期时间到达的手定时器任务就会立即执行对键的删除操作
优点:节约内存,到点就删除释放不必要的内存空间
缺点:CPU压力大会影响到redis服务器的吞吐量
2.惰性删除(空间换时间)
数据到达过期时间,不做处理,等待下次访问数据的时候,我们需要判断
1).未过期,返回数据
2)过期了,删除数据,返回不存在
优点:节约了cpu的性能,发现需要删除的时候才会删除
缺点:内存的压力比较大,出现长期占用内存的数据
3.定期删除
就是周期性的轮询redis数据库中的失效性数据,采取随机抽取的策略,你利用过期数据占比的方式控制删除的频率
cpu性能的占用设置有峰值,检测频率可自定义的设置
内存压力不是很大,长期占用的内存的冷数据会被持续清理
周期性抽查存储空间(随机抽查,重点抽查)----后续补充说明
redis的回收策略(淘汰策略)
三类八种
一.易失数据
1.volatile-lru
挑选最近使用最少的数据淘汰
2.volatile-lfu
挑选最近使用次数最少的数据进行
3.volatile-ttl
挑选将要过期的数据进行淘汰
4.volatile-random
任意选择数据进行淘汰
二.检测全库的数据
1.allkeys-lru:挑选最近最少使用的数据淘汰
2.allkeLyRs-lfu::挑选最近使用次数最少的数据淘汰
3.allkeys-random:任意选择数据淘汰,相当于随机
三.放弃数据驱逐
1.no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发OOM(Out Of Memory)
redis的同步机制是什么
主从复制
哨兵
缓存预热/雪崩/穿透/击穿
1.缓存预热
原因:请求数量过高/主从之间的吞吐量过高
方案:优先加载热点数据/利用分布式服务器同时进行数据的读取提速数据的加载过程/使用队列的形式进行/或者使用内容分发网络----后续进行补充说明
2.缓存雪崩
原因:在一个较短的时间出现大量的key过期了/访问缓存数据未命中进而访问数据库进而导致数据库同时接收到大量的请求无法及时的进行处理或者数据量的激增导致数据库直接崩溃
方案:设置过期时间的时候尽可能的将时间点分散,监控即将过期的数据进行判断是否需要进行延时处理作为热点数据,访问非常非常频繁的数据可以设置为永久进行处理,切换淘汰策略(如果是在lru和lfu的策略情况下具体的根据实际情况而定)
3.缓存穿透
指的是某个key过期了,但是这个key的访问量巨大/或者短时间redis对数据库发起了同一数据的大量访问
方案:设置热点数据的时间分配或者设置为永不过期的设置
二级缓存设置不同的失效时间
4.缓存击穿
出现大面积的访问未被命中或者出现非正常的url访问攻击
获取的数据再数据库里面不存在/返回的是null未进行持久化存储直接进行返回,出现恶意攻击服务器
方案:缓存null值对于查询的null值进行长期的使用或者进行定期淘汰策略/白名单策略/给设置的key添加规则,不满足规则的直接拒绝访问