0


Redis 强化之一


缓存使用原则

什么时候,什么样的数据能够保存在Redis中?

1.数据量不能太大(存在内存,所以数据量不能太大)

2.使用越频繁(查询),越适合用Redis保存数据,来减轻数据库的压力

3.保存在Redis中的数据一般不会是数据库中频繁修改的


缓存淘汰策略

Redis将数据保存在内存中, 内存的容量是有限的,如果Redis服务器的内存已经满了,还需要向Redis中保存新的数据,就需要缓存的淘汰策略,清除一些数据。

  • noeviction:返回错误,抛出一个异常**(是默认的缓存淘汰策略)**

可以设置满足某些条件的信息删除后,再将新的信息保存

  • allkeys-random:所有数据中随机删除数据
  • volatile-random: 过期时间的数据中随机删除数据
  • volatile-ttl:删除剩余有效时间最少的数据
  • allkeys-lru:所有数据中删除上次使用时间距离现在最久的数据
  • volatile-lru有过期时间的数据中删除上次使用时间距离现在最久的数据
  • allkeys-lfu:所有数据中删除使用频率最少
  • volatile-lfu:****有过期时间的数据中删除使用频率最少

Redis持久化

  • Redis将信息保存在内存(内存的特征就是一旦断电,所有信息都丢失 ),所有数据丢失后,再重新加载数据,就需要从数据库从新查询所有数据,这个操作耗费时间,而且对数据库的压力也非常大。
  • 有些业务先将数据保存在Redis,隔一段时间和数据库同步的,如果Redis断电,这段时间的数据就完全丢失了。
  • Redis支持持久化的功能,可以防止Redis的重启对数据库带来额外的压力和数据的丢失,
  • 持久化是将Redis中保存的数据,以指定方式保存在Redis当前服务器的硬盘上(断电数据也不会丢失)。再启动Redis时,可以利用硬盘中的信息来恢复数据

Redis实现持久化有两种策略:

RDB:(Redis Database Backup)

RDB本质上就是数据库快照(就是当前Redis中所有数据转换成二进制的对象,保存在硬盘上)

默认情况下,每次备份会生成一个dump.rdb的文件,当Redis断电或宕机后,重新启动时,会从这个文件中恢复数据,获得dump.rdb中所有内容。

实现这个效果我们可以在Redis的配置文件中添加如下信息

save 60 5

上面配置中:

  • 60表示秒
  • 5表示Redis的key被修改的次数

**配置效果:**1分钟内如果有5个key以上被修改,就启动rdb数据库快照程序

优点:

  • 因为是整体Redis数据的二进制格式,数据恢复是整体恢复的(最后一次生成的rdb中的数据包括之前的数据没有丢失)

缺点:

  • 生成的rdb文件是一个硬盘上的文件,读写效率是较低的
  • 如果突然断电,只能恢复最后一次生成的rdb中的数据

AOF(Append Only File):

AOF策略是将Redis运行过的所有命令(日志)备份下来,保存在硬盘上

这样即使Redis断电,我们也可以根据运行过的日志,恢复为断电前的样子

我们可以在Redis的配置文件中添加如下配置信息

appendonly yes

经过这个设置,就能保存运行过的指令的日志了

理论上任何运行过的指令都可以恢复

但是实际情况下,Redis非常繁忙时,我们会将日志命令缓存之后,整体发送给备份,减少io次数以提高备份的性能和对Redis性能的影响

实际开发中,配置一般会采用每秒将日志文件发送一次的策略,断电最多丢失1秒数据

优点:

相对RDB来讲,信息丢失的较少

缺点:

因为保存的是运行的日志,所以占用空间较大

实际开发中RDB和AOF是可以同时开启的,也可以选择性开启

Redis的AOF为减少日志文件的大小,支持AOF rewrite

简单来说就是将日志中无效的语句删除,能够减少占用的空间

标签: redis 缓存 java

本文转载自: https://blog.csdn.net/qq_55112725/article/details/127280641
版权归原作者 �欢快↑㎡ 所有, 如有侵权,请联系我们删除。

“Redis 强化之一”的评论:

还没有评论