乐趣区

关于redis集群:缓存服务器Redis-08-Redis集群算法及持久化策略及内存优化

redis 集群数据存储原理

hash 槽算法 / 分区算法:
RedisCluster 采纳此分区,所有的键依据哈希函数 (CRC16[key]%16384) 映射到 0-16383 槽内,共 16384 个槽位,每个节点保护局部槽及槽所映射的键值数据. 依据主节点的个数, 平衡划分区间.
算法: 哈希函数: Hash()=CRC16[key]%16384

当向 redis 集群中插入数据时, 首先将 key 进行计算. 之后将计算结果匹配到具体的某一个槽的区间内, 之后再将数据 set 到治理该槽的节点中.


题目剖析

redis 中最多存储 16384 个 key—- 错
例:CRC16(KEY1)%16384 = 2000/CRC16(KEY2)%16384 = 2000
示意 key1 和 key2 都归节点 1 进行治理. 至于节点到底是否可能存储 由内存决定.

Redis 集群中最多有 16384 台主机,
Redis 集群中起码有 3 台主机.

Redis 长久化策略

长久化需要阐明

Redis 数据都保留在内存中, 如果内存断电则导致数据的失落. 为了保障用户的内存数据不失落, 须要开启长久化机制.
长久化 —- 定期将内存中的数据保留到磁盘中.

长久化分类

阐明:Redis 中的长久化形式次要有 2 种.
形式 1: RDB 模式 dump.rdb 默认的长久化形式
形式 2: AOF 模式 appendonly.aof 默认敞开的须要手动的开启

RDB 模式

1. 阐明:
RDB 模式是 Redis 中默认的长久化策略.

2. 特点:
1).RDB 模式能够实现定期的长久化, 然而可能导致数据失落.(相似冷备份)
2).RDB 模式作的是内存数据的快照, 并且后拍摄的快照会笼罩之前的快照. 所以 长久化文件较小. 复原数据的速度较快. 工作的效率较高.

3. 命令:
用户能够通过命令要求 redis 进行长久化操作.
1).save 是同步操作 要求 redis 立刻执行长久化操作. 用户可能会陷入阻塞状态.
2).bgsave 是异步操作, 开启独自的线程执行长久化操作. 长久化时不会影响用户的应用. 不能保障立刻马上执行.

4. 长久化策略阐明:
LG: save 900 1 redis 在 900 秒内执行一次 set 操作时则长久化一次.
用户操作越频繁则长久化的周期越短.

5. 长久化目录: 能够执行长久化文件生成的地位.dir ./

6. 长久化文件名称的设定.dbfilename dump.rdb

AOF 模式

1. 特点:
1).AOF 模式 默认的条件下是敞开状态 , 须要手动的开启.
2).AOF 模式 记录的是用户的执行的状态. 所以长久化文件占用空间绝对较大. 复原数据的速度较慢. 所以效率较低.
3). 能够保 证用户的数据尽可能不失落.

2. 配置:
1). 开启 AOF 配置appendonly yes
2).AOF 模式的长久化策略

appendfsync always               如果用户执行的了一次 set 操作则长久化一次
appendfsync everysec                aof 每秒长久化一次
appendfsync no                不被动长久化.

对于 RDB/AOF 模式特点

1. 如果用户能够容许大量的数据失落能够选用 RDB 模式 (快).
2. 如果用户不容许数据失落则选用 AOF 模式.
3. 理论开发过程中个别 2 种形式都会配置. 个别主机开启 RDB 模式, 从机开启 AOF 模式.

理论状况

如果在线上执行了 FLUSHALL 命令怎么办?
— 应该将 AOF 模式中 flushAll 删除, 之后重启 redis 即可.

Redis 内存优化

Redis 能够当做内存应用, 然而如果始终往里存储不删除数据, 则必然导致内存溢出.

LRU 算法

1.LRU 是 Least Recently Used 的缩写,即最近起码应用 ,是一种罕用的页面置换算法, 抉择最近最久未应用的页面予以淘汰 。该算法赋予每个页面一个拜访字段,用来记录一个页面自上次被拜访以来所经验的工夫 t,当须淘汰一个页面时,抉择现有页面中其 t 值最大的,即最近起码应用的页面予以淘汰。
2. 维度: 工夫 T
3.LRU 算法是当下实现内存清理的最优算法.

LFU 算法

1.LFU(least frequently used (LFU) page-replacement algorithm)。即 最不常常应用页置换算法 ,要求在页置换时置换援用计数最小的页,因为常常应用的页应该有一个较大的援用次数。然而有些页在开始时应用次数很多,但当前就不再应用,这类页将会长工夫留在内存中,因而能够将 援用计数寄存器定时右移一位,造成指数衰减的均匀应用次数。
2. 维度: 援用次数

Random 算法 — 随机

TTL 算法

监控残余的存活工夫, 将存活工夫少的数据提前删除.

Redis 内存优化策略

1.volatile-lru  在设定了超时工夫的数据中, 采纳 lru 算法.
2.allkeys-lru  所有数据采纳 lru 算法
3.volatile-lfu  在超时的数据中采纳 lfu 算法
4.allkeys-lfu -> 所有数据采纳 lfu 算法
5.volatile-random -> 设定超时工夫的数据采纳随机算法
6.allkeys-random -> 所有数据随机删除
7.volatile-ttl ->  删除存活工夫少的数据
8.noeviction -> 不会删除数据, 如果内存溢出报错返回.
退出移动版