Day12 Redis

AP模型.

定时

过期

惰性

淘汰策略

noevition

Lru

Lfu

Ttl(移除即将过期的key)

持久化

RDB

  1. 自动触发

自动和手动触发(手动备份RDB文件)

Flushall->触发rdb->数据会丢失

  1. 手动触发

    Save 阻塞

    Bgsave 不会阻塞

  • 一致性Hash环

环会存在分布不均匀问题

比如上图的A分布不均匀问题

  • RedisCluster

    引入了虚拟槽,16384虚拟槽,每个key%16384.

    得到 0-16383的数组,

    比如 x%16384 -> 0 -16384.

  • 需要把槽

节点 0 -5000

节点2 5000 - 10000

节点 10000 -16384

根据hash算出来的值本身就比较的均匀了.

  • 主要是引入了虚拟槽的概念.
Screen Shot 2022-01-30 at 10.13.23 AM.png

哈希槽,一致性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 空间换时间,预留一部分用不到的空间,预分配防止数据变更造成的溢出问题

BigKey 低版本需要 分批次删除.高版本提供了lazyfree(逻辑上删除,然后子线程跑,慢慢的删除所有

Screen Shot 2022-02-01 at 3.12.39 PM.png

你可能感兴趣的:(Day12 Redis)