Redis知识点归纳整理_2020
2020-08-20 10:25:11 0 举报
AI智能生成
Redis知识点归纳整理汇总
作者其他创作
大纲/内容
Redis知识点归纳
基础知识
基本数据类型
String
List
Hash
Set
ZSet
高级数据类型
Bitmaps
HyperLogLog
Geo
Pub/Sub
文章链接:https://www.cnblogs.com/roadlandscape/p/12459170.html
文章链接:https://zhuanlan.zhihu.com/p/137122386
数据持久化
RDB (默认方式)
快照文件,默认五分钟备份一次
AOF
默认一秒备份一次,安全性高
官方推荐使用方式
https://redis.io/topics/persistence
过期策略
定时过期
惰性过期
定期过期
内存淘汰策略
noeviction
当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧
allkeys-lru
当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
allkeys-random
当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧
volatile-lru
当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)
volatile-random
当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
volatile-ttl
当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
最新Redis6.0中内存淘汰策略为8种
Redis4.0 开始从6种策略变为8种
如何选择淘汰策略
常用的淘汰算法
FIFO:First In First Out
先进先出。判断被存储的时间,离目前最远的数据优先被淘汰
LRU:Least Recently Used
最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰
LFU:Least Frequently Used
最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰
常见问题
缓存雪崩
概念
大量缓存数据同时过期,导致大量并发请求打入DB,造成DB崩溃
解决方案
1.把每个key的过期时间设置为随机值
2.设置热点数据永不过期
3.集群部署,将热点数据部署在多台机器上
缓存穿透
redis不存在用户高频访问的数据,故每次都需要调用数据库,对数据库造成巨大压力
1.校验key,对于不合法的直接return
3.BloomFilter 利用高效的数据结构和算法判断key是否在数据库中
缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
1.设置热点数据永不过期
2.增加互斥锁
Redis事务
1.multi 事务开始
2.exec 事务结束
3.discard 取消事务,放弃执行事务块内的所有命令
4.watch 监视key变化,发生变化时会取消事务
5.unwatch 取消watch命令对所有key的监视
主从复制
是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点
全量复制
使用RDB做master的完全复制,一般发生在新slave节点启动或旧slave节点重连且无法满足增量复制条件的时候
增量复制
master向slave发送每一次写操作的命令,是主从复制优先尝试的方式
复制过程
1.连接建立阶段
2.数据同步阶段
3.命令传播阶段
Redis集群
主从模式
概念:一个集群中有且只有一个主节点,主节点可读写,从节点只读。主节点下线影响写服务,不影响读服务
数据同步机制:
当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令,然后将保存的快照文件和缓存的命令发送给slave。slave接收到快照文件和命令后加载快照文件和缓存的执行命令。复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。
缺点:
master挂掉后不能对外提供写服务(salve不会自动升级为master)。因此主从模式,只提供了读写分离的特性,不满足高可用
Sentinel模式
概念:基于主从模式,多了哨兵角色。Sentinel由一个或多个Sentinel实例组成Sentinel系统可以监视任意多个主服务器,以及这些主服务器下的所有从服务器,并在被监视的主服务器下线状态时,自动将下线服务器属下的从服务器升级为新的主服务器。
1.每个节点保存的数据都一样,存在冗余,造成内存浪费。
2.因为每个节点保存的数据都一样,master的最大存储容量决定了整个集群的容量,上限有限
3.如果数据量较大,故障恢复会需要比较长的时间。
参考链接:https://www.cnblogs.com/kevingrace/p/9004460.html
Cluster模式
概念:基于主从模式+哨兵模式,引入分片设计,通过hash计算,讲数据分开存储对应节点负责的槽(slot)
优点:
高可用,可扩展。横向扩展支持海量数据
参考链接:https://redis.io/topics/cluster-spec
应用场景
缓存:热点数据
共享session
排行榜
分布式锁
incr -> increment
netnx -> setifAbsent
set -> set 利用redis的原子性
分布式ID
利用 increment 方法在value值上 +1
Increment 方法Redis进行加锁操作,无需担心初始化时出现重复值
设置有效期应用
有效期链接分享功能
过滤器
基于bitmap做布隆过滤器
位图
用户签到功能,用户登录统计等功能
GEO
计算两点之间的距离
获取某点半径多少内的点
对应面试题
1.如果有大量的key需要设置同一时间过期,一般需要注意什么?
2.如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?
3.redis是怎么持久化数据的?服务主从数据如何交互的?
4.是否使用过redis集群,集群的原理是什么?
5.如何使用redis做异步队列?
6.redis如何实现延时队列?
7.如果有多个系统同时操作(并发)Redis带的数据问题,如何保证数据一致性?
8.你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?
文章链接:https://baijiahao.baidu.com/s?id=1611955931705092609&wfr=spider&for=pc
文章链接:https://www.cnblogs.com/sunsing123/p/11093038.html
文章链接:https://blog.csdn.net/ligupeng7929/article/details/79603060
文章链接:https://www.cnblogs.com/sbj-dawn/p/11116673.html
https://www.cnblogs.com/kismetv/p/9236731.html
0 条评论
下一页
为你推荐
查看更多