1、概述

Redis的持久化机制有两种:RDB 和 AOF ,这两种机制有什么区别?正式环境应该采用哪种机制?

我们的服务器内存资源是有限的,如果内存被Redis的缓存占满了怎么办?这就要看Redis的内存管理策略是怎么配置的了。

今天我们就来聊一下上面提出的这两个问题。

2、Redis的持久化机制

2.1 RDB

1、什么是RDB?

RDB 全称 Redis DataBase,是 Redis 默认的持久化机制。

RDB机制的原理是:每隔一段时间把Redis在内存中的数据写到磁盘,手动停止Redis服务时,也会往磁盘上写,当Redis再次启动时,会从磁盘上读取到数据,恢复到内存中。

2、RDB的好处

  • 会定时对数据进行全量备份
  • 恢复数据简单,支持远程传输
  • 可以保证备份数据的完整性
  • 恢复数据速度块

3、RDB的坏处

  • 由于是有时间间隔的备份,因此当服务异常时数据可能会丢失一部分
  • 备份时对CPU的负担较大

4、RDB在配置文件中的相关配置

1)文件名及文件保存路径的配置

2)设置同步硬盘的时间

save ""  代表不同步到磁盘,数据只在内存存储

save 300 100  代表有100个键发生变更,每300秒同步磁盘

3)其他配置

stop-writes-on-bgsave-error yes   // 设置为yes,则在写入磁盘的的过程中出错,会停止写操作

rdbcompression yes    //  设置为yes,则rdb文件在写的过程中会进行压缩,对CPU有一定损耗

rdbchecksum yes   // 设置为yes,会对rdb进行校验,对性能有一定损耗

2.2 AOF

1、什么是AOF

AOF 全称 Append Only File,默认是关闭的。

AOF是以日志的形式记录Redis的写操作,读操作不会记录。以追加的方式存储文件,恢复时会将日志文件中的写操作重新执行一遍。

2、AOF的好处

  • 以秒级进行备份,更能保证数据的完整性
  • 如果磁盘满了,可以执行redis-check-aof工具解决
  • 当日志文件太大,会自动进行优化压缩
  • 日志中的写操作,可以手动修改,恢复起来更灵活

3、AOF的坏处

  • 日志文件比RDB文件大
  • 每秒都会与磁盘有IO操作,影响性能

4、AOF在配置文件中的相关配置

1)开启AOF,设置文件名

2)设置同步策略

# appendfsync always    // 有一条写操作就同步一次(性能差)
appendfsync everysec   // 每秒同步一次(推荐)
# appendfsync no          // 不同步

3)重写策略

auto-aof-rewrite-percentage 100    // AOF文件是上次大小的100%(建议调小)
auto-aof-rewrite-min-size 64mb      // AOF文件大小达到64MB(建议调大)

以上两个配置建议修改,根据实际情况调整。

2.3 RDB 、AOF 如何选择

如果只是把Redis当缓存来用,不介意数据的丢失,建议使用RDB方式,如果对数据的完整性比较在意,建议使用AOF方式。

3、Redis的内存管理机制

我们的服务器内存资源是有限的,如果内存被Redis的缓存占满了,我们应该如何处理呢?

通过调整配置文件中的 maxmemory 和 maxmemory-policy

maxmemory 是指定内存达到多大时,执行内存优化,默认单位是byte

maxmemory-policy 是执行的优化策略:

  • noeviction  Redis的默认配置,不清理过期的缓存,没有内存则返回错误
  • allkeys-lru  推荐配置,清除最少用的旧缓存

4、综述

今天聊了一下Redis的持久化机制和内存管理机制,希望能对大家有所帮助。

希望大家多多评论交流,共同成长。

关注追风人聊Java,每天更新Java干货。

最新文章

  1. WPF资源字典的使用【转】
  2. 转换一个矩阵(2维数组)为HTML Table
  3. python 国内源
  4. MySQL的mysql_insert_id和LAST_INSERT_ID(转)
  5. BZOJ4143 [AMPPZ2014]The Lawyer
  6. Chrome的网络调试
  7. 人生的抉择—aspx、ashx、asmx文件处理请求效率比较
  8. <Learning How to Learn>Week One: Focused versus Diffuse Thinking
  9. Delphi XE5 Device compatibility
  10. iscroll.js
  11. 在CTime类中重载<<和>>
  12. 仿ios版微信应用源代码
  13. 在ASP.net中的UpdatePanel,弹窗失败解决办法
  14. PHP中include()与require()的区别
  15. ajax 提交表单(文件)
  16. 关于帧动画steps属性的理解
  17. SQL Server 结构分解
  18. FFT\NTT总结
  19. linux下查看mysql日志文件的方法
  20. JS中的柯里化(currying)

热门文章

  1. QT 如何在调试时能进入源码方式(MacOS)
  2. js 原始数据类型、引用数据类型
  3. Java面向对象07——封装
  4. 为什么npm install 经常失败
  5. ElasticSearch版本控制--java实现
  6. 【vue3】封装自定义全局插件
  7. Ubuntu 查询用户账号
  8. MySQL数据类型 储存引擎
  9. SSH以及ROS远程登录设置保姆级教程
  10. luoguP1528&2329 栅栏&切蛋糕