缓存服务器Redis 08 Redis集群算法及持久化策略及内存优化

redis集群数据存储原理

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

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

image
image

题目分析

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 -> 不会删除数据,如果内存溢出报错返回.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值