redis的持久化策略

2023-05-16

redis提供持久化策略,在适当的时机采用适当的手段把内存中的数据持久化到磁盘中,每次redis服务启动时,都可以把磁盘上的数据再次加载到内存中使用。

  1. RDB策略(数据快照模式):在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作。
    RDB策略是redis默认的持久化策略,redis服务开启时这种持久化策略就已经默认开启了。

    i. save <seconds> <changes>:配置持久化策略
    ii. dbfilename:redis RDB持久化数据存储的文件
    iii. dir:配置redis RDB持久化文件所在目录

    	优点:
    	1. 存储的文件是紧凑的
    	2. 适用于备份,方便恢复不同版本的数据
    	3. 适用于容灾恢复,备份文件可以在其他服务器恢复
    	4. 最大化了redis的性能,备份时启动的是子线程,父进程不需要执行IO操作
    	5. 数据保存比AOF快
    	
    	缺点:
    	1. 如果Redis因为没有正确关闭而停止工作是,到上个保存点之间的数据将会丢失
    	2. 由于需要经常fork子线程来进行备份操作,如果数据量很大的话,fork比较耗时,如果cpu性能不够,服务器可能是卡顿。属于数据量大的时候,一个服务器不要部署多个Redis服务。
    

    创建快照有以下5种形式:

    1. 客户端发送BGSAVE指令,服务端会fork一条子进程将快照写入磁盘
    2. 客户端发送SAVE指令,服务端在主线程进行写入动作。一般不常使用,一般在内存不够去执行BGSVAE的时候才用
    3. 设置了SAVE配置项,如SAVE 300 100,那么当“300秒内有100次写入”时,Redus会自动触发BGSAVE命令。如果有多个配置项,任意一个满足,都会触发备份
    4. Redis通过SHUTDOWN命令接收到关闭服务器的请求、或者TERM信号时,会执行SAVE命令,这时候会阻塞所有客户端,不在执行客户端发送的任何命令
    5. 当一个Redis服务器连接另外一个Redis服务器,并像对方发送SYNC命令开始一次复制操作时,如果主服务器目前没有在执行BGSAVE操作,或者主服务器刚刚执行完,那么主服务器就会执行GBSAVE
  2. AOF策略(追加模式):采用操作日志来记录每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的指令。
    但是AOF效率低下,redis默认不开启AOF功能。

    i. appendonly:配置是否开启AOF策略。
    ii. appendfilename:配置操作日志文件

    优点:
    1. 使用AOF模式更加的灵活,因为可以有不同的fsync策略
    2. AOF是一个日志追加文件,所有不需要定位,就算断电也没有损坏问题,哪怕文件末尾是一个写到一半的命令,redus-check-aof工具也可以很轻易的修复
    3. 当AOF文件很大的,Redis会自动在后台进行重写。重写是决对安全的,因为Redis是继续往旧的文件里面追加,使用创建当前数据集所需的最小操作集合来创建一个全新的文件,一旦创建完成,Redis就会切换到新文件,开始往新文件进行追加操作
    4. AOF包含一个又一个的操作命令,易于理解和解析
    
    缺点:
    1. 对于同样的数据集,AOF文件通常要大于RDB文件
    2. AOF可能比RDB要慢,这取决于fsync策略。通常fsync设置为每秒一次的话性能仍然很高,如果关闭sfync,即使在很高的负载下也和RDB一样快。不过,即使在很大的写负载情况下,RDB还是能提供很好的最大延迟保证
    3. AOF通过递增的方式更新数据,而RDB快照是从头开始创建,RDB会更健壮和稳定(所以适用于备份)
    

总结:根据数据的特点来决定开启哪种持久化策略:一般情况下,开启RDB策略足够。

参考:https://blog.csdn.net/q649381130/article/details/79920277

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis的持久化策略 的相关文章

  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • 使用 Redis 中的键

    我是 Redis 和键值数据库的新手 你能告诉我如何在redis中正确实现这种关系方法吗 我有一个关系表 其中两个键对应一个值 master id slave id 价值 Example 主站 ID 从属ID 价值 1 1 值1 2 1 值
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 在redis中存储多个嵌套对象

    我想在redis中存储多个复杂的json数据 但不知道如何 这是我的 json 结构 users user01 username ally email email protected cdn cgi l email protection u
  • 检查 Redis 列表中是否已存在某个值

    我想知道是否有办法检查 redis 列表中是否已存在某个键 我无法使用集合 因为我不想强制唯一性 但我确实希望能够检查字符串是否确实存在 Thanks 您的选择如下 Using LREM如果发现则更换它 维护一个单独的SET与您的LIST
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • 如何在Redis中使用HSCAN命令?

    我想在我的作业中使用 Redis 的 HSCAN 命令 但我不知道它是如何工作的 Redis 的官方页面 http redis io commands hscan http redis io commands hscan 这个命令给了我空白
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 如果没有过期的内容,Redis maxmemory-policy volatile-lru 是否会被驱逐?

    我有一个 redis 服务器 设置了maxmemory policy set to volatile lru 文档表明 当达到内存限制时 这将从设置过期的条目集中逐出 在这种情况下 redis 是否只驱逐过期的项目 如果内存中的所有内容都设
  • Flask-SocketIO redis 订阅

    我在用着https github com miguelgrinberg Flask SocketIO https github com miguelgrinberg Flask SocketIO实现 WebSocket 服务器 我需要从另一
  • Spring-boot中将redis-cache反序列化为对象的问题

    我在 Client 类中使用 JsonNode 来处理 MySQL 8 数据库中 JSON 类型的字段 即使对于 API 请求 它也能很好地工作 但是当我使用 Redis 启用缓存 我确实需要它 时 我注意到 Redis 无法序列化 Jso
  • 无法通过节点应用程序连接到redis,两者都在docker中

    我正在尝试将我的应用程序连接到 redis 但我得到 ioredis Unhandled error event Error connect ECONNREFUSED 127 0 0 1 6379 当我做 docker exec it ed

随机推荐

  • 开发常用网站

    开发常用网站 开发工具 JetBrains VSCode SublimeText Web开发 微信小程序开发者文档 Node js boostrap HTML HTTP服务器 Nginx Tomcat Apache HTTP Server
  • 使用Idea创建项目的一种清晰思路

    1 打开Idea后 xff0c 选择File gt new gt project 2 选择空项目 3 将project命名为任意名称 xff0c 这里命名为Java Exercise xff0c 点Finish 4 弹出对话框 xff0c
  • Spring Boot搭建Web项目(MongoDB)

    Spring Boot搭建Web项目 环境 JDK 1 8 IntelliJ IDEA 2020 3 2 Ultimate Edition PyCharm 2020 2 4 Professional Edition Maven 3 6 bs
  • 银行家算法 C++描述

    银行家算法 C 43 43 描述 银行家算法 操作系统 银行家算法 实现代码 main cpp span class token macro property span class token directive keyword inclu
  • 三种修改windows系统MAC地址方法

    方法一 xff1a 使用windows控制面板修改 第一步 按win键 gt 输入 控制面板 并打开 第二步 打开 网络和共享中心 第三步 打开 更改适配器设置 第四步 右击 WLAN2 后点击属性 第五步 修改网络地址属性 点击配置 xf
  • 【操作系统实验】Linux环境下用进程实现生产者消费者问题——C语言完整代码+详细实验报告

    注意 代码在文末 xff0c 以下为详细实验报告 实验目的 以生产者和消费者问题为例 xff0c 学习并熟悉Linux下进程通信 同步机制的具体实现方法 xff0c 主要是了解并掌握信号量机制和共享内存的使用方法 xff0c 进一步熟悉Li
  • mariadb的源码安装

    xff08 1 xff09 登上mariadb的官方网站 2 选择下载mariadb server 3 下载10 2版本 4 找到源码安装方式 xff08 5 xff09 下载传输到主机上 6 准备编译环境 yum span class t
  • HTTP协议以及Apache的httpd配置

    HTTP协议 前言HTTP简介HTTP诞生HTTP版本历史HTTP 0 9HTTP 1 0HTTP 1 1HTTP 2 0 web资源HTTP工作流程HTTP报文报文语法格式method xff08 方法 xff09 status xff0
  • 狂神说Redis笔记,Redis【入门】就这一篇就够了!

    Redis学习笔记 视频链接 xff1a 狂神说Redis链接 1 Nosql概述 1 1 为什么要使用Nosql 1 单片机Mysql时代 90年代 xff0c 一个网站的访问量太大 xff0c 单个数据库完全够用 随着用户的增多 xff
  • manjaro一些常用软件,指令(持续更新中)

    manjaro使用很久了 xff0c 由于对linux的陌生和迷惑 xff0c 重装了很多很多很多次 xff0c 最近的系统大概是使用最久的一次 xff0c 也解决了很多以前的问题在此记录下 系统如下 xff1a 软件安装 换源 烂大街的教
  • 在开发板上安装gdb

    网上对于在开发板上安装gdb的教程大多都是将开发板的文件系统放在虚拟机主机上 xff0c 从而通过nfs挂载上去的 xff0c 主要是针对性能较差开发板 xff0c 本教程讲解的是如何在开发板上直接安装gdb 为什么不能直接将pc上交叉编译
  • Idea Intellij 远程开发调试

    一 背景 在构建MiniOB开发环境时需要Linux环境 xff0c 另外结合分布式系统 xff0c 利用较好的通信 xff0c 萌发了远程开发的想法 xff1b 实际上远程部署 开发在很久之前有过想法 xff08 大约刚开始学Spring
  • Java笔记(4)——方法重载和this关键字

    1 方法的重载 不能通过参数名去区分两个方法 不能通过返回值类型来区分两个方法 可以通过参数列表 xff1a 参数个数 xff0c 参数类型来区分 span class token keyword public span span clas
  • 基于 java+springboot 工资管理系统设计和实现

    博主介绍 xff1a 5年java开发经验 xff0c 专注Java开发 定制 远程 指导等 csdn特邀作者 专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例 500套 欢迎点赞 收藏 留言 文末获取源码联系方式 目
  • ubuntu 安装gcc 或g++ 时提示未发现软件包 gcc或g++

    问题 xff1a 安装gcc 或g 43 43 时提示未发现软件包 xff1f 1 这时 xff0c 只需更新apt get即可 xff0c 那么apt get是什么呢 xff1f apt get xff0c 是一条linux命令 xff0
  • ubuntu设置固定ip地址的方法

    ubuntu设置固定ip的方法 问题 xff1a 在连接虚拟机上的mysql数据库时 xff0c 发现连接不上了 检查了数据库的连接信息后 xff0c 发现并没有问题 xff0c 然后去虚拟机上查看ip地址 xff0c 发现是ip地址发生了
  • 在VMware Workstation中ubuntu屏幕小如何解决?-安装vm tools工具

    在VMware Workstation中ubuntu屏幕小如何解决 xff1f 安装vm tools工具 问题 xff1a 安装好ubuntu后 xff0c 开机后发现屏幕太小或没有占满全屏 xff0c 如下图所示 xff1a 解决 xff
  • 美团3.25笔试记录-第一题

    第一题 xff1a 题目描述 xff1a 小美是一个火车迷 最近她在观察家附近火车站的火车驶入和驶出情况 xff0c 发现火车驶入和驶出的顺序并不一致 经过小美调查发现 xff0c 原来这个火车站里面有一个类似于栈的结构 xff0c 如下图
  • Java中的取模(Math.floorMod())与取余(%)

    在Java中运算符 并不是取模运算 Modulo Operation xff0c 而是取余运算 Complementation 那么取模运算和取余运算的区别是什么呢 xff1f 计算方法 对于整数 a b 来说 xff0c 取模运算和取余运
  • redis的持久化策略

    redis提供持久化策略 xff0c 在适当的时机采用适当的手段把内存中的数据持久化到磁盘中 xff0c 每次redis服务启动时 xff0c 都可以把磁盘上的数据再次加载到内存中使用 RDB策略 xff08 数据快照模式 xff09 xf