Redis学习线路-思维导图
2020-11-15 20:19:31 1 举报
AI智能生成
Redis学习路线思维导图
作者其他创作
大纲/内容
线程模型
NIO多路复用-单线程模型
队列
事件分配器
事件处理器
连接应答处理器
命令请求处理器
命令回复处理器
高性能
内存计算
keys慎用 全量遍历键
SCAN cursor [MATCH] [COUNT]渐进式遍历键
单线程
完成网络IO 和键值对读写
其他线程
持久化、异步删除、集群数据同步
高可用
单副本
部署简单
数据不可靠
多副本(主从)
高可用
读写分离
故障需手动切换
主库写能力有限
主库存储能力有限
哨兵-sentinel
Sentinel集群
Redis主从
部署繁琐
故障自动切换-选举Master
不能读写分离-Slave不可读
集群-cluster
数据动态分布-0-16383个slot
无中心架构
最小配置 6 个节点以上(3 主 3 从)
主节点提供服务,从节点只作为备份,故障转移
可扩展到1000多个节点
可解决单机内存、并发、流量瓶颈
节点之间采用gossip协议,异步复制,不保证数据强一致性
避免hot-key,导致主库节点成为系统短板,可业务进行数据分片-分布到不同的主库上
避免big-key,导致网卡撑爆、慢查询
自研
根据业务自研 配置中心、故障探测、failover处理机制
扩容
水平扩容
集群-Cluster
垂直扩容
主从
哨兵-sentinel
主从复制
同步方式
全量复制
1、从节点连接主节点
2、主节点BGSAVE快照
3、主发送快照,从接收加载
4、发送缓存的命令-即增量复制
场景
Slave初始化阶段
Slave与Master差异太大
避免配置多个从节点
可采用级联结构
部分同步
redis2.8开始支持
Slave重启-差异不大
增量复制
特性
1、主从复制为异步复制
2、主从支持级联结构,即 主从从
3、主从复制,不阻塞主,也不阻塞从,只有从加载数据时 阻塞从节点的请求
4、2.8.18 采用无磁盘复制
持久化
RDB文件快照
配置
save 900 1
save 300 10
save 60 10000
save 300 10
save 60 10000
dbfilename "dump.rdb"
dir "/opt/app/redis6/data"
自动快照-策略
#在seconds秒内有changes次数据修改就触发RDB持久化
save <seconds> <changes>
save <seconds> <changes>
自动快照-被动快照SAVE、BGSAVE
优点
压缩后的二进制文件,适用于备份、全量复制及灾难恢复
RDB恢复数据性能优于AOF方式
缺点
无法做到实时持久化,每次都要创建子进程,频繁操作成本过高
保存后的二进制文件,不同版本直接存在兼容性问题
AOF文件
配置
appendfilename "appendonly.aof"
appendfsync always
auto-aof-rewrite-percentage 100
appendonly yes
appendfilename "appendonly.aof"
dir "/opt/app/redis6/data"
appendfsync always
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
策略
存储策略
always
everysec
no
重写策略
文件大小
上次重写文件大小百分比
优点
以文本形式保存,易读
记录写操作保证数据不丢失
缺点
存储所有写操作命令,且文件为文本格式保存,未经压缩,文件体积高
恢复数据时重放AOF中所有代码,恢复性能弱于RDB方式
混合持久化
配置
aof-use-rdb-preamble yes
文件结构
上部分 RDB格式
下部分AOF格式
数据结构
String
命令
GET/SET
MSET/MGET
SETNX
DEL
EXPIRE
INCR/DECR
INCRBY DECRBY
场景
单值缓存
对象缓存
MSET user1:name XXX user1:email XXX
分布式锁
计数器
Web集群session共享
分布式系统全局序列号
Hash Tables
命令
双层Map结构
HSET/HGET
HSETNX
HMSET/HMGET
HDEL
HLEN
HGETALL
HINCRBY
场景
对象缓存
用户信息
视频信息
电商购物车
以用户Id为key、商品Id为filed 商品数量为value
添加商品 hset cart:1001 1008 1
增加数量hincrby cart:1001 10088 1
商品总数 hlen cart:1001
删除商品 hdel cart:1001 10088
获取购物车所有商品 hgetall cart:1001
优点
同类数据归类整合存储,方便数据管理
相比string操作消耗内存与CPU更小
相比string存储更省空间
缺点
过期功能不能使用在field上,只能用在key上
Redis集群架构下不适合大规模使用
Linked Lists
命令
LPUSH/RPUSH
LPOP RPOP
LRANGE
BLPOP/BRPOP
功能
LPUSH+LPOP=Stack栈
LPUSH+RPOP=Queue队列
LPUSH+LTRIM=Capped Collection 有限集合
LPUSH+BRPOP=Blocking Message Queue 阻塞消息队列
场景
时间轴
微薄和微信公众号消息流
微博消息和微信公众号消息
关注消息 LPUSH
查看最新消息 LRANGE
Sets
命令
SADD SREM
SMEMBERS
SCARD
SISMEMBE
SRANDMEMBER
SPOP
运算操作
交集
SINTER
SINTERSTORE
并集
SUNION
SUNIONSTORE
差集
SDIFF
SDIFFSTORE
场景
微信抽奖
参与抽奖 SADD
查看抽奖用户 SMEMBERS
抽奖 SRANDMEMBER 、SPOP
微信微博点赞、收藏、标签
点赞 SADD
取消点赞 SREN
检查用户是否点赞 SISMEMBER
获取点赞用户列表 SMEMBES
获取点赞用户数
SCARD
集合操作微信微博关注模型
共同关注 SINTER
可能认识的人 SDIFF
集合操作 电商商品筛选
SADD brand:huawei P40
SADD brand:xiaomi MI-10
SADD os:android P40
SADD ram:8G P40
SINTER os:android ram:8G
Sorted Sets
命令
ZADD key core member
ZREM key memeber
ZSCORE key memeber
ZINCRBY
ZCRAD
ZRANGE
ZREVRANGE
集合操作
并集ZUNIONSTORE
交集ZINTERSOTE
场景
排行榜
点击新闻 ZINCRBY hotNews:20190819 1 title
展示当日排行前十 ZREVRANGE hotNews:20190819 0 9 WITHSCORES
七日搜索榜单计算 ZUNIONSTORE
展示七日排行前十
事务
原子操作
内置命令都是原子操作
管道 pipeline
批量工具-批量命令
节省网络开销等,提高性能
不支持事务
Lua脚本
客户端
jedis
redisson
收藏
0 条评论
下一页
为你推荐
查看更多