《Redis》概念图|数据类型/结构/事务/持久化
2022-05-05 13:55:40 0 举报
仅供个人学习,持续更新,一起加油
作者其他创作
大纲/内容
RDBfork子进程来生产rdb文件,父进程继续支持客户端,实现了copy-on-write子进程写完,redis就用新rdb替换旧rdbPs. rdb文件就是redis的数据文件本身!(rdb=redis database)
配置中心
Set无序不重复
hashtable
缓存雪崩问题:缓存中大量数据同时过期
raw
Redis怎样监听大量请求?
监控
高可用哨兵和集群的实现基础
List(2^32-1)链表结构,可以当栈/队列`Lpush/Rpop/Brpop(Block rpop)`
底层的八种数据结构:REDIS_ENCODING_INT(long 类型的整数)【int REDIS_ENCODING_EMBSTR (编码的简单动态字符串)【embstr REDIS_ENCODING_RAW (简单动态字符串)【raw REDIS_ENCODING_HT (字典)【hashtable REDIS_ENCODING_LINKEDLIST (双端链表)【linkedlist REDIS_ENCODING_ZIPLIST (压缩列表)【ziplist REDIS_ENCODING_INTSET (整数集合)【intset REDIS_ENCODING_SKIPLIST (跳跃表和字典)【skiplist===redis中String没有沿用C中的string类型,而是自定义了一种sds类型代表string,“简单动态字符串”,增加了len字段、flag字段等,其中len字段带来了很多好处
QuickList
解决:1. 给过期时间设为随机,减少同时概率;2. 对于分布式缓存,将热点数据分散在不同缓存数据库上3. 设置热点数据永不过期(活动期间内永不过期)
增量复制只会把主从库网络断连期间主库收到的命令,同步给从库【嗯??
String
全量复制发生在第一次复制时
Reactor响应者模式
持久化
Hash
compare and swap
被动触发RDB
redis.conf配置
通知通知晋升(新主从关系)
三种集群模式
发布订阅模式pub-sub模式,使用了dict数据结构
故障转移管理slave晋升master
watch multi...exec
缓存击穿攻击:大并发请求缓存中没有而数据库有的数据,导致数据库瞬时压力巨大
redis-server退出且未开启aof时
1. 主节点和从节点(理论上)存的是同一份数据!2. 数据只能从master ==sync==> slave3. 只有master能写,主从都能被读,slave只能被master同步不能直接被client写
Zset
ziplist
五种常用数据类型
intSet
主观/客观下线
flushall
缓存问题
AOFappend-only-file
五种常用集合/容器
缓存穿透攻击:请求缓存中没有的key,导致绕过缓存
> publish channel-1> publish channel-111> publish channel-2> subscribe channel-1> psubscribe channel*. (p是pattern的意思> punsubscribe channel-1*
Redis事务
作用
哨兵选举
Cluster模式
int
主从复制
dict的k-v模型
skipList:
哨兵机制Sentinel
IO多路复用程序:File Event Handler
主动触发RDB1. save 主进程进行持久化,同步,阻塞客户端请求2. bgsave 后台执行,异步,不阻塞客户端请求
事务监控乐观锁CAS【watch
数据冗余从有主的数据备份
不提供回滚
八种结构体:
触发机制
故障恢复主坏了从顶上
解决:1. 设置热点数据永不过期;2. 接口限流、熔断、降级;3. 加互斥锁,强行让请求一个一个来到数据库
负载均衡分担读压力
配置示例:save 秒 请求次数---save 900 1save 300 10save 60 10000即请求频率越高,持久化频率也越高(防丢失
embstr编码sds
主节点发送rdb文件给从节点进行全量复制,主节点自己出发bgsave
解决:1. 增加接口层校验、用户鉴权;2. 对缓存和数据库都没有的key,在缓存中存入key-null,设置较短过期时间;3. 布隆过滤器。类似一个hashset,快速判断一个key是否存在于某容器,不存在就直接返回。(关键在于hash算法和容器大小)
可以理解是一个拥有二分查找功能的链表。同Level的形成一个层级的链表
0 条评论
下一页