AP模型.
定时
过期
惰性
淘汰策略
noevition
Lru
Lfu
Ttl(移除即将过期的key)
持久化
RDB
- 自动触发
自动和手动触发(手动备份RDB文件)
Flushall->触发rdb->数据会丢失
-
手动触发
Save 阻塞
Bgsave 不会阻塞
- 一致性Hash环
环会存在分布不均匀问题
比如上图的A分布不均匀问题
-
RedisCluster
引入了虚拟槽,16384虚拟槽,每个key%16384.
得到 0-16383的数组,
比如 x%16384 -> 0 -16384.
-
需要把槽
节点 0 -5000
节点2 5000 - 10000
节点 10000 -16384
根据hash算出来的值本身就比较的均匀了.
- 主要是引入了虚拟槽的概念.
CRC16计算得道值,决定放在哪个槽位上,槽是均匀的。找数据只需要找槽,而不需要关心节点数据具体是在哪个槽位上.
Redisson
数据丢失,主动一致性问题.
题:
1. 主 set block 1,还么有同步到从,主挂了。
新主没有loc,然后老主复活,老主flush自己的备份文件,同步新主的文件
2. 脑裂
因为网络问题,监控连不上,选出了新的主
- 选哪个从为新的主?
1. 断开时间
2. 配置文件中的slave_priority优先级
3. 偏移量
4. 进程ID
-
定时的监控锁
-
把LUA拷贝出来去运行
-
看门狗
key不存在则设置值.,时间。
存在exists则进行hincryBy进行续命操作。
他是个重入锁。
红锁
存在多个主去加锁的方式,过半的节点加锁成功才能上锁成功.
但是Redis锁都会存在续约和集群同步延迟问题,比如网络差ping超时选主,FullGC导致心跳超时问题......Lua只是解决了多条指令 set 时候 存在则重入,不存在则上锁问题 多个步骤的原子性操作.
缓存同步 略
分段锁(就是种思想)
提高并发能力
count->redis
MemberCache | Redis | |
---|---|---|
区别 | 数据结构单一hash方式 | 数据结构丰富 |
只能存储于内存中,重启后数据丢失 | ||
多线程操作 | 单线程操作 |
Redis(常见问题和功能) | 后果 | 如何解决 |
---|---|---|
BigKey | 1. 数据倾斜 2. 超时,网络阻塞(因为Key很大,传输会非常耗时,如果并发高该问题会被成倍的放大)---比如: 社交评论盖楼 | 1.监控工具,主动发现 2.redis-cli --bigkeys |
不删除,可以打散Bigkey,拆分成不同的key1 key2等结构 | ||
好用的Pipeline(比如N次hget合并) | 一次性写到redis的缓存区,然后发送给客户端 | |
SDS | 空间换时间,预留一部分用不到的空间,预分配防止数据变更造成的溢出问题 |
Screen Shot 2022-02-01 at 3.12.39 PM.pngBigKey 低版本需要 分批次删除.高版本提供了lazyfree(逻辑上删除,然后子线程跑,慢慢的删除所有
网友评论