关于Redis常规属性

Redis中持久化策略-RDB

1 - 需求说明:

Redis中数据都保存到了内存中,但是内存的特点断电及擦除. 为了保证redis中的缓存数据不丢失,则需要将内存数据定期进行持久化操作.
持久化:将内存数据,写到磁盘中

2 - RDB模式

特点 :
  • RDB模式是Redis默认的持久化规则
  • RDB模式记录的是Redis内存数据快照(只保留最新数据)
  • RDB模式定期持久化(时间可调) 可能会导致数据丢失.
  • RDB模式备份效率是最高的.
  • RDB模式备份阻塞式的 在备份时不允许其他用户操作. 保证数据安全性.
命令:
  • 主动备份 save 会阻塞用户操作
  • 后台备份 bgsave 异步的方式进行持久化操作 不会阻塞.

3 - 关于持久化配置

  • save 900 1 900秒内,用户执行了一次更新操作时,那么就持久化一次
  • save 300 10 300秒内,用户执行了10次更新操作. 那么就持久化一次
  • save 60 10000 60秒内,用户执行了10000次的更新操作,则持久化一次
  • save 1 1 1秒内 1次更新 持久化一次!! 性能特别低.

在redis.conf 配置文件里找

4 - 关于持久化文件名称设定

默认的条件下,持久化文件名称 dump.rdb

redis rdb 默认目录 redis rdb默认策略_内存优化

5 - 文件存储目录

./ 代表当前文件目录. 意义使用绝对路径的写法

redis rdb 默认目录 redis rdb默认策略_内存优化_02


Redis中持久化策略-AOF

1 - AOF特点

  • AOF模式默认的条件下是关闭状态.需要手动开启
  • AOF模式记录的是用户的操作过程. 可以实现实时持久化.保证数据不丢失
  • AOF模式维护的持久化文件占用的空间较大.所以持久化效率不高. 并且需要定期的维护持久化文件
  • AOF模式一旦开启,则redis以AOF模式为主 读取的是AOF文件

2 - 开启AOF模式

redis rdb 默认目录 redis rdb默认策略_数据库_03

3 - 持久化策略

  • always: 用户更新一次,则持久化一次
  • everysec: 每秒持久化一次 效率更高
  • no: 不主动持久化. 操作系统有关. 几乎不用

关于Redis内存优化策略

业务场景

如果频繁使用redis,不停的向其中保存数据,并且不做删除操作,则内存必然溢出. 能否优化内存策略.能否自动的删除不用的数据,让redis中保留热点数据!!!

LRU算法

简介 :

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面据)予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

计算维度: 自上一次以来所经历的时间T.

redis rdb 默认目录 redis rdb默认策略_redis rdb 默认目录_04


说明:LRU算法是内存优化中最好用的算法.

LFU算法

简介 :

LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

维度: 引用次数

常识: 计算机左移 扩大倍数,计算机右移 缩小倍数

redis rdb 默认目录 redis rdb默认策略_缓存_05

TTL算法

说明:

将剩余存活时间排序,将马上要被删除的数据,提前删除.

redis rdb 默认目录 redis rdb默认策略_数据库_06

Redis默认的内存优化策略

说明 1:

Redis中采用的策略定期删除+惰性删除策略

说明 2 :
定期删除 : redis默认每隔100ms 检查是否有过期的key, 检查时随机的方式进行检查.(不是检查所有的数据,因为效率太低.)
问题 : 由于数据众多,可能抽取时没有被选中.可能出现 该数据已经到了超时时间,但是redis并没有马上删除数据.
惰性策略 : 当用户获取key的时候,首先检查数据是否已经过了超时时间. 如果已经超时,则删除数据.
问题 : 由于数据多, 用户不可能将所有的内存数据都get一遍.必然会出现 需要删除的数据一直保留在内存中的现象 占用内存资源
可以采用上述的内存优化手段,主动的删除.
内存优化算法说明 :
  • volatile-lru 在设定超时时间的数据 采用LRU算法进行优化
  • allkeys-lru 在所有的数据采用LRU算法进行优化
  • volatile-lfu 在设定了超时时间的数据中采用LFU算法优化
  • allkeys-lfu 在所有的数据中采用LFU算法进行优化
  • volatile-random 在设定了超时时间的数据 采用随机算法
  • allkeys-random 所有数据采用 随机算法
  • volatile-ttl 设定超时时间的TTl算法
  • noeviction 不主动删除数据,如果内存溢出则报错返回.

一致性hash算法

算法介绍

一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。 [1] 在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动态伸缩等问题 [2] 。
作用: 解决缓存数据,在哪存储的问题…

算法说明

尝识 :
  • 如果数据相同,则hash结果必然相同
  • 常见hash值 由8位16进制数组成. 共用多少种可能性? 2^32

1 - 平衡性

平衡性是指hash的结果应该平均分配到各个节点,这样从算法上解决了负载均衡问题
说明 :
由于节点是通过算数计算得到的结果则有可能出现负载不均衡的现象

通过虚拟节点实现数据的平衡
平衡性 : 尽可能保证节点数据量均衡 虚拟节点 : 为数据量少的节点净夺数据

redis rdb 默认目录 redis rdb默认策略_缓存_07

2 - 单调性

单调性是指在新增或者删减节点时,不影响系统正常运行
原则 : 如果节点新增/减少 应该尽可能保证原始数据尽可能不变

3 - 分散性

分散性是指数据应该分散地存放在分布式集群中的各个节点(节点自己可以有备份),不必每个节点都存储所有的数据

将数据分散存储,即使将来服务器宕机,则影响只是一部分,.而不是全部.

谚语: 鸡蛋不要放到一个篮子里.

redis rdb 默认目录 redis rdb默认策略_redis rdb 默认目录_08