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 -> 不会删除数据,如果内存溢出报错返回.