redis操作 AOF RDB 主从复制 集群

2023-11-20

Redis操作

1.Redis的持久化
Redis提供了2个不同方式的持久化方式
RDB
RDB是指在指定的时间间隔将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时将快照文件直接读到内存中
备份是如何进行的?
Redis会单独创建一个子进程来进行持久化,同时先将数据写入到一个临时文件中,等待持久化过程都结束了,再用临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,对于数据的恢复不是非常敏感,那RDB方式比AOF方式更加的高效,RDB的缺点是最后一次持久化的数据可能会丢失。
关于fork
在Linux中,fork()会产生一个和父进程完全相同的子进程,但子进程此后会有一个exec系统调用,出于效率考虑,Linux中引入“写时复制技术”,一般情况下父进程跟子进程会公用共同的一段物理内存,只有进程空间的各段发生变化时候,才会将父进程内容复制给子进程。
关于redis.conf配置 贴图
默认为dump.rdb
在这里插入图片描述
rdb文件的保存路径,也可以修改。默认Redis启动的命令在所在的目录下
在这里插入图片描述
RDB的保存策略 重点 默认 15分钟 1次、6分钟 10次、1分钟 10000次
在这里插入图片描述
进行rdb保存时,将文件压缩,默认是开启的
在这里插入图片描述
rdbchecksum yes
在存储快照后,还可以让Redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
在这里插入图片描述
stop-writes-on-bgsave-error yes 当Redis无法写入磁盘的话,直接关掉Redis的写操作
在这里插入图片描述
rdb如果想备份的话,只需要将rdb文件拷贝到某一个地方,等到恢复的时候自动加载它即可。
rdb的优点:
恢复速度快 单独开fork线程
节省磁盘空间 进行压缩了
rdb的缺点:
虽然使用了fork技术,但当数据量特别大时候,还是会消耗性能。同时它是周期备份,当Redis意外down掉时候,就会丢失最后一次快照的
AOF
以日志的形式来记录每个写操作,将redis的指令记录下来(不记录读操作),只许追加文件但不可以修改文件,Redis启动的时候会将文件构建数据。
AOF默认是不开启的,需要手动配置。
在这里插入图片描述
如果AOF跟RDB同时开启是听AOF的。
同时,如果AOF文件损坏,可以通过 redis-check-aof --fix appendonly.aof 进行恢复
AOF同步的频率设置分为3中
在这里插入图片描述
1、始终同步,每次将Redis的写入都立刻记录日志
2、每秒同步,每秒记录,本秒的数据可能会丢失
3、不主动进行同步,将同步时机交给操作系统
AOF采用的是文件追加的方式,文件会越来越大,为了避免这种情况,增加了AOF重写机制
这么做肯定是为了提高读写效率,减少磁盘IO,通常通过3个手段、
1)进程内已经超时的数据不再写文件。
2)旧的AOF文件含有无效命令,如del key1、 hdel key2、srem keys、set a 111、set a 222等。重写使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令。
3) 多条写命令可以合并为一个,如lpush list a、lpush list b、 lpush list c 可以转化为:lpush list a b c。为了防止但挑明了过大造成客户端缓冲区溢出,对于list、set、hash、zset等类型曹组,以64个元素为界拆分为多条。
触发AOF合并的条件有两个,都要满足
在这里插入图片描述
简单来说就是大于64M后,是原来阈值的一倍就可。
AOF的优点
备份机制更稳健,丢失数据概率更低
可读的日志文本,通过操作AOF稳健,可以处理误操
AOF的缺点
比起RDB占用更多的磁盘空间。
恢复备份速度要慢
每次读写都同步的话,有一定的性能压力
存在个别Bug,造成恢复不能
项目中如何使用?
官网是两个都推荐
如果数据不敏感,单独用RDB
不建议单独用AOF,可能会出现BUG
就缓存数据的话,都不开也行
Redis主从复制
主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
在这里插入图片描述
好处是读写分离,性能扩展 容灾快速恢复
拷贝多个redis.conf文件include
开启daemonize yes
Pid文件名字pidfile
指定端口port
Log文件名字
Dump.rdb名字dbfilename
Appendonly 关掉或者换名字
这个就不详细介绍了,因为现在用的更多的是Redis集群
Redis集群主要解决的是第一个是容量不足,redis进行扩容,第二个并发写操作,redis难分探。
Redis集群的安装
1、安装ruby环境
执行yum install ruby
执行yum install rubygems
2、执行redis-3.2.0.gem 执行命令 gem install --local redis-3.2.0.gem
3、创建至少6个实例 测试的话 在用一台服务器 不同端口,正常的话至少6台服务器
拷贝多个redis.conf文件
开启daemonize yes
Pid文件名字
指定端口
Log文件名字
Dump.rdb名字
Appendonly 关掉或者换名字
安装redis cluster配置修改
cluster-enabled yes 打开集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换
最后进行合体
下面是IP地址
./redis-trib.rb create --replicas 1 202.204.124.134:6379 202.204.124.134:6380 202.204.124.134:6381 202.204.124.134:6389 202.204.124.134:6390 202.204.124.134:6391
登录进来之后,可以通过cluster nodes命令来查询集群信息
在这里插入图片描述
Redis集群中一个很重要的概念是slots
一个Redis集群一个有16384个插槽(hash slot),数据库中的每一个键都属于16384个插槽的其中一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
有几个常见的Redis集群问题
1、如果主节点下线?从节点能否自动升为主节点?
自动的
2、主节点恢复后,主从关系会如何?
down掉后,自动变成从机了
3、如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?
如果数据很重要,全覆盖都用不了,如果数据无所谓,可以用
cluster-require-full-coverage

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

redis操作 AOF RDB 主从复制 集群 的相关文章

  • 是否可以使用带有 FUSE 文件系统的 Linux VFS 缓存?

    默认情况下 Linux VFS 缓存似乎不适用于 FUSE 文件系统 例如 read 调用似乎被系统地转发到 FUSE 文件系统 我在 FUSE 特定的远程文件系统上工作 我需要一个非常积极的缓存 我需要实现自己的页面缓存吗 或者是否可以为
  • 使用 sidekiq 处理两个独立的 Redis 实例?

    下午好 我有两个独立但相关的应用程序 他们都应该有自己的后台队列 阅读 单独的 Sidekiq 和 Redis 进程 然而 我希望偶尔能够将工作推给app2的队列来自app1 从简单的队列 推送的角度来看 如果app1没有现有的 Sidek
  • Spring RedisTemplate:8次调用后方法键挂起

    我使用 Spring RedisTemplate spring data redis 1 7 1 与 Redis 进行通信 我需要通过正则表达式获取然后删除键 例如 context user1 我用的方法 RedisTemplate key
  • connect-redis - 如何保护会话对象免受竞争条件影响

    我使用 nodejs 和 connect redis 来存储会话数据 我将用户数据保存在会话中 并在会话生命周期中使用它 我注意到两个更改会话数据的请求之间可能存在竞争条件 我尝试过使用 redis lock 来锁定会话 但这对我来说有点问
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • 如何使用Spring Cache处理redis异常?

    我目前正在开发一个包含 Spring Data Redis 和 Spring Cache 的项目 在spring data redis中 我使用redis模板调用redis 我在 try catch 块中处理 redis 模板抛出的所有异常
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi
  • 在 sidekiq 上配置 redis 身份验证

    我想我错过了一些东西 因为我在文档中找不到如何编写 redis 实例的用户名和密码以与 sidekiq 一起使用 有没有办法做到这一点 或者是通过 ENV 变量 Sidekiq 将无法识别的 Redis 选项直接传递给 Redis 驱动程序
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git

随机推荐

  • 2023华为OD机试真题【双指针/优雅子数组】

    题目内容 如果一个数组中出现次数最多的元素出现大于等于K次 被称为K 优雅数组 k也可以被称为优雅阈值 例如 数组1 2 3 1 2 3 1 它是一个3 优雅数组 因为元素1出现次数大于等于3次 数组1 2 3 1 2就不是一个3 优雅数组
  • 蓝桥杯 填字母游戏(博弈论)

    小明经常玩 LOL 游戏上瘾 一次他想挑战K大师 不料K大师说 我们先来玩个空格填字母的游戏 要是你不能赢我 就再别玩LOL了 K大师在纸上画了一行n个格子 要小明和他交替往其中填入字母 并且 1 轮到某人填的时候 只能在某个空格中填入L或
  • 寻找3的幂

    目录 题目 题目接口 题目思路 第一点 第二点 第三点 代码实现 普通版本 提交 递归版本 提交 结语 题目 在ledcode刷题网站上 有这样一道题 寻找3的幂 题目接口 bool isPowerOfThree int n 题目思路 第一
  • 【HTML】HTML5的拖放你用了吗

    HTML HTML5的拖放你用了吗 引言 github HTML HTML5的拖放你用了吗 内容速递 看了本文您能了解到的知识 在 HTML5 中 拖放是标准的一部分 任何元素都能够拖放 拖放的操作 多用在拖拽排序列表 游戏拼图等 下文中出
  • 华为OD机试 - 贪吃蛇(Java)

    题目描述 贪吃蛇是一个经典游戏 蛇的身体由若干方格连接而成 身体随蛇头移动 蛇头触碰到食物时 蛇的长度会增加一格 蛇头和身体的任一方格或者游戏版图边界碰撞时 游戏结束 下面让我们来完成贪吃蛇游戏的模拟 给定一个N M的数组arr 代表N M
  • roslaunch error: ERROR: cannot launch node of type

    今天在因为github上有个之前的包更新了 重新git clone后出现了一个问题 ERROR cannot launch node of type crazyflie demo controller py can t locate nod
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注 大部分参考内容来自 征途Pro FPGA Verilog开发实战指南 基于Altera EP4CE10 2021 7 10 上 贴个下载地址 野火FPGA Altera EP4CE10征途开发板 核心板 野火产品资料下载中心 文档 hd
  • MySQL报错的解决Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘

    使用数据库工具连接或还原数据库数据时 提示Can t connect to local MySQL server through socket var lib mysql mysql sock 处理方法 1 修改配置文件 vim etc m
  • 二叉树结构的建立与遍历

    实验项目 1 编写建立二叉树的二叉链表存储结构 左右链表示 的程序 并以适当的形式显示和保存二叉树 2 完成二叉树的7种遍历操作 3 给定一个二叉树 编写算法完成下列应用 1 判断其是否为完全二叉树 2 求二叉树中任意两个结点的公共祖先 输
  • wps日期加减算天数_日期相减之后的天数怎么用公式计算 - 卡饭网

    如何在Excel中得到两个日期相减的天数 如何在Excel中得到两个日期相减的天数 有的小伙伴在使用Excel软件时 想要知道两个日期相减后的天数 但是却不知道使用什么公式 也不知道公式中的数据的含义 那么小编就来为大家介绍一下吧 具体如下
  • Python安装教程(版本3.8.10)windows10

    Python目前已支持市面上的各大主流操作系统 在Linux Unix Mac系统已经自带Python环境 本章将介绍在Windows系统上安装Python 一般下载 executable installer x86 表示是 32 位的机器
  • 基于Python Django 搜索的目标站点内容监测系统设计

    1 简介 基于搜索的目标站点内容监测系统 包括登陆 首页 数据采集 爬虫分析 数据管理 修改密码和用户管理等功能 2 技术栈 说明 技术栈 备注 后台 Python Django 前端 HTML 数据库 MYSql 架构 B S 结构 3
  • MySQL数据库保姆级安装教程

    俗话说从入门到放弃 从入门到入土 开始学习MySQL之前我们一定是要做环境准备的 接下来我们来讲解一下MySQL的安装 一 MySQL下载 MySQL 1 大家可以尝试在官网首页寻找下载入口 也可以使用我提供的MySQL的安装包进行下载安装
  • 数据结构之双向链表,实现双向链表的增删改查

    目录 一 双向链表的定义 1 双向链表节点的定义 2 双向链表的初始化 二 双向链表的函数接口实现 1 双链表的尾插 2 双向链表的尾删 3 双向链表的头插 4 双向链表的头删 6 双向链表在pos前面插入 7 双向链表删除pos位置的节点
  • 1.Twitter开发者之如何申请一个twitter开发者账号

    Twitter开发者之如何申请一个twitter开发者账号 教大家申请一个推特开发者账号满足后面的使用 保证每一步都给大家介绍到 非常详细 希望帮助大家注册好自己的账号 1 先打开Twitter的账号注册界面 选择使用手机号码或电子邮箱注册
  • C51单片机实验——脉冲计数显示(proteus+asm)

    前言 脉冲信号输入进2级74LS14整形 T1接收脉冲信号并计数 显示在LED 外部中断0控制计数器的启动 停止 外部中断1控制计数器的清零复位 P1 0控制LED的段选口使能信号 P1 1控制LED的位选口使能信号 Proteus电路图
  • ios代码大全】代码例子区全区搜索索引

    IOS 类代码 我自己做的翻书效果 小猫咪再次登场 2011 03 02 如何实现QQLive HD界面 附代码 2011 03 02 tabelviewcell 点击设置背景图片 2011 03 02 基于UDP的聊天程序 借鉴iphon
  • OpenGL ES 3.0 Programming Guide 1-3

    一 introduction to OGLES 3 0 OGLES 3 0 Graphics Pipeline VertexBuffer ArrayObj gt VertexShader texture transform feedback
  • C51的1602LCD液晶显示

    C51的1602LCD液晶显示 1 引脚功能介绍 2 基本操作时序 3 1602 液晶的指令介绍 4 实例 1 引脚功能介绍 1602 液晶就是可以显示 2 行 每行 16 个字符的液晶 一共 16 个引脚 每个引脚的功能 我们都可以在它的
  • redis操作 AOF RDB 主从复制 集群

    Redis操作 1 Redis的持久化 Redis提供了2个不同方式的持久化方式 RDB RDB是指在指定的时间间隔将内存中的数据集快照写入磁盘 也就是行话讲的Snapshot快照 它恢复时将快照文件直接读到内存中 备份是如何进行的 Red