Redis的持久化机制与内存管理机制
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干货。
Redis的持久化机制与内存管理机制的更多相关文章
- Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制
Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制 http://w ...
- Spark内存管理机制
Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行 ...
- 浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
- ARC内存管理机制详解
ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...
- 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
- 【Cocos2d-x 3.x】内存管理机制与源码分析
侯捷先生说过这么一句话 : 源码之前,了无秘密. 要了解Cocos2d-x的内存管理机制,就得阅读源码. 接触Cocos2d-x时, Cocos2d-x的最新版本已经到了3.2的时代,在学习Coco ...
- Spark 1.6以后的内存管理机制
Spark 内部管理机制 Spark的内存管理自从1.6开始改变.老的内存管理实现自自staticMemoryManager类,然而现在它被称之为"legacy". " ...
- python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...
- Java虚拟机内存管理机制
自动内存管理机制 Java虚拟机(JVM)在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区 ...
随机推荐
- QT常用控件(一)——菜单栏和对话框
引言 QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar).多个工具栏(tool bars).多个锚接部件(dock widgets).一个状态栏(status ...
- 一张图带你搞懂Javascript原型链关系
在某天,我听了一个老师的公开课,一张图搞懂了原型链. 老师花两天时间理解.整理的,他讲了两个小时我们当时就听懂了. 今天我把他整理出来,分享给大家.也让我自己巩固加深一下. 就是这张图: 为了更好的图 ...
- RHCE_DAY01
shell概述 shell是一个程序,它连接了用户和Linux内核,它可以解释用户输入的命令传递给内核,让用户可以更加方便的使用Linux系统 shell 本身并不是内核的一部分,它只是站在内核的基础 ...
- 华为eNSP基础入门-配置SSH远程登录
eNSP 华为模拟器ensp (Enterprise Network Simulation Platform) 是华为官方推出的一款强大的图形化网络仿真工具平台,主要对企业网路由器.交换机.WLAN等 ...
- 了解CSS in JS(JSS)以及在React项目中配置并使用JSS
目录 认识JSS 什么是JSS JSS 的常见实现 JSS 的好处与坏处 好处 坏处 使用模块化CSS实现JSS 安装插件 在React项目中的tsconfig.json中添加配置 vscode项目中 ...
- JVM内存调整
JVM内存调整 先试着调整一下idea的 找到软件安装位置/bin/idea64.exe.vmoptions 给他直接整个起飞的,改成 -Xms512m -Xmx1500m 找到Java安装的位置/j ...
- Sqli-Labs less1-4
首先,记录一下基础知识,可能不全: 几个常用的函数: 1.version() --Mysql版本 2.user() --数据库用户名 3.database() --数据库名 4.@@datad ...
- redis的过期策略和淘汰策略
过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查 ...
- 解决Mongoose 返回的文档过大导致模板引擎art-template无法渲染的问题,错误-RangeError: Maximum call stack size exceeded
参考:https://blog.csdn.net/qq_40659195/article/details/88411838 最近尝试用Node写一个小案例,使用到了MongoDB,使用过的人可以知道, ...
- 上传jar包到nexus
注释掉: org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.meeno.boot.oa.OaAutoConfigur ...