Redis知识导图
2021-07-05 18:09:31 0 举报
AI智能生成
redis知识架构思维导图
作者其他创作
大纲/内容
核心数据结构与应用场景
string
分布式session<br>
token
后端接口缓存
分布式递增编号生成
文章阅读数或网页浏览数统计
分布式锁
hash
对象缓存
购物车
list
用于模拟数据结构
栈
队列
阻塞队列
用于做消息中间件(一般不用,使用专业mq)<br>
模拟消息推送
set
模拟抽奖
文章点赞
共同好友统计
zset
记录排名<br>
高性能原理<br>
单线程
内存数据库
epoll实现IO多路复用<br>
Redis持久化<br>
RDB快照模式<br>
写时复制机制COW
持久化内存内数据
save与bgsave
AOF(append-only file)
记录修改操作指令<br>
AOF的重写
混合持久化
AOF+RDB的形式
redis4.0版本引入
加快大量持久化数据恢复的速度
RDB和AOF的优劣
Redis Lua脚本<br>
Redis 2.6版本加入对lua脚本支持<br>
减少网络开销
院子操作
替代redis事务功能
使用注意<br>
避免死循环
避免耗时操作
Redis 管道(Pipeline)<br>
一次发送多条命令<br>
减少网络io开销
非原子操作
操作结果一次返回
避免管道中插入过多命令
Redis主从架构
将对主节点的读操作压力分散到子节点
主从数据复制原理
从节点断点续传原理
对主节点缓冲区数据部分复制
使用树二叉树结构构件主从<br>
缓解主从复制风暴
哨兵模式<br>
高可用
只有一个主节点对外提供哨兵服务<br>
无法支持高并发
哨兵节点不提供读写服务<br>
哨兵节点用于监控实例节点
用于将主从的主节点ip返回给客户端
主节点宕机之后进行选举<br>
哨兵leader选举流程
很少再使用该模式
Cluster集群架构<br>
多个主从节点群组成的分布式服务器集群<br>
复制、高可用和分片特性
数据被分配到16384个槽位之中<br>
槽位定位算法
使用crc16hash算法散列之后取模16384<br>
跳转重定位
如果客户端请求的槽位不在本服务器上,将请求重定位到正确的节点<br>
集群节点间的使用gossip协议通讯<br>
gossip协议的多种消息<br>
meet<br>
邀请新节点加入集群通讯<br>
ping
频繁发送ping消息互相通讯,交换元数据<br>
pong
作为meet和ping消息的返回
fail
用于传播某个节点宕机的信息
等等
集群过半生效机制
防止脑裂
redis节点数推荐为奇数,并大于3个master节点
从节省机器资源的角度出发
redis集群对于批量操作命令的支持
只支持落在同一个slot下的操作
redis分布式锁
需考虑问题<br>
使用setnx命令作为锁
设置锁存活时间<br>避免服务宕机导致无法释放锁
为服务器分配id为锁的值避免其他服务器释放锁<br>
锁时长过期业务未执行完成的问题<br>
使用定时任务进行锁续命
使用Redission框架<br>
提供了分布式锁的完善实现
大量请求操作热点key<br>
使用分段锁来提高性能
redis缓存设计<br>
缓存穿透
原因
自身业务代码或数据问题
被恶意攻击、爬虫造成大量命中
解决
缓存空对象
布隆过滤器
缓存击穿
大量缓存同时失效
同一批缓存失效时间设置为同一时间段内的不同时间点<br>
缓存雪崩
缓存层崩溃引发蝴蝶效应导致系统崩溃
解决
保证缓存层高可用性
Redis sentinel<br>
Redis Cluster<br>
依赖隔离组件限流熔断并降级<br>
Sentine
Hystrix
热点缓存key重建优化
热点key失效瞬间大量线程重建缓存导致后端压力过大
解决
使用互斥锁
只允许一条线程重建缓存
开发规范与性能优化
键值设计
key名设计
可读性和管理性
简洁性
不要包含特殊字符
value设计
拒绝bigkey
字符串类型
超过10kb
非字符串
元素超过5000个
bigkey的危害
导致redis阻塞
导致网络拥塞
过期删除问题
bigkey的删除
使用hscan,sscan,zscan渐进式删除
避免bigkey过期自动使用del删除
如何优化bigkey
拆
选择合适的数据类型
控制key的生命周期
命令使用
使用数据集操作的使用需要明确N的值
禁用keys、flushall、flushdb等命令<br>
合理使用select
使用批量操作提升效率
原生命令:mget,mset
非原生命令:可以使用pipeline提升效率<br>
Redis事务功能较弱,使用lua替代
客户端的使用
避免多个应用使用同一个redis实例
使用带连接池的数据库框架
0 条评论
下一页