主从架构&lua脚本-Redis(四)

2023-11-04

上篇文章介绍了rdb、aof持久化。

持久化RDB/AOF-Redis(三)icon-default.png?t=N4P3https://blog.csdn.net/ke1ying/article/details/131148269

  • redis数据备份策略
  1. 写job每小时copy一份到其他目录。
  2. 目录里可以保留最近一个月数据。
  3. 把目录日志保存到其他服务器,防止机器损坏。

  • 主从复制

第一步:复制一份redis.conf

第二步:将相关配置修改如下

Port 6380

# 把pid进程号写入pidfile配置文件

Pidfile /var/run/redis_6380.pid

Logfile “6380.log”

Dir  /usr/local/redis-5.0.3/data/6380

第三步:配置主从(重要)

# 从本机6379额redis复制数据

Replicaof 192.168.81.128 6379

# 只读不写

Replica-read-only yes

第四步:启动从节点

src/redis-server redis_6380.conf

第五步:连接从redis

Src/redis-cli -p 6380

 

从我搭建的结果可以看到:

6379redis写入数据,在6380里是可以看到的,并且因为配置了只读,所以我在6380redis里操作set命令不能成功。

全量复制:

1、当你为master配置了slave,不管是否是第一次连接,都会发送PSYNC命令给master请求复制数据。

2、master收到后会在后台bgsave生成最新rdb快照文件,缓存中继续接受新数据。Slave收到文件则加载到内存,再接受缓存中的master数据。(此处rdb和配置的rdb持久化没关系)

如果master收到并发连接,只会持久化一次,把这一份数据发给所有slave。

增量复制:

如果slave挂了几分钟,这时候不需要同步全量数据,只需要复制新增的master数据。

第一步:slave发送psync(offset)

第二步:master在repl backlog buffer中有offset则只同步新增数据,否则全量复制。

如果从节点太多怎么办呢,也就是主从复制风暴怎么解决?

当出现这种情况是从节点太多导致主节点同步压力过大,可以采取从节点给节点复制的方案来解决。

三、Redis LUA脚本

  1. 减少网络开销。(多个命令一起发送,所以开销少)
  2. 原子性。
  3. 事务特性。

127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

1) "key1"

2) "key2"

3) "first"

4) "second"

这段lua脚本意思是返回两个key和value,其中key1前面的2代表key的个数

 

那我们用lua脚本模拟如何实现事务的回滚以及原子性呢?

如图所示,我们先set product_stock_10016为15

Script里有一个KEYS[1]和ARGV[1],这两个值分别对应着下面代码eval的两个参数,所以a的值获取为15,b的值获取为10.

第四行很好理解,如果a>=b则走再次复制 a-b

也就是15-10

因为return 1,最后obj=1,而product_stock_10016 为5。

如果我们把语法错误 bb==0注释解开。

则会回滚。

Lua脚本不会执行,则product_stock_10016为15

因为redis是单线程,前面也说了不能有大key,获取key不能用keys命令。

这里则不能再lua脚本出现死循环和耗时运算,因为他是单线程,如果因为lua脚本耗时太长甚至死循环,则整个redis会阻塞。

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

主从架构&lua脚本-Redis(四) 的相关文章

  • 当 Jedis 与 Spring Data 一起使用时,为什么数据会以奇怪的键存储在 Redis 中?

    我将 Spring Data Redis 与 Jedis 一起使用 我正在尝试存储带有密钥的哈希值vc list id 我能够成功插入到redis 但是 当我使用 redis cli 检查密钥时 我没有看到密钥vc 501381 相反我看到
  • 如何配置Lettuce Redis集群异步连接池

    我正在配置我的生菜重新分配池 当我按照官方文档配置时 连接池无法正常初始化 无法获取连接 官方文档指出 RedisClusterClient clusterClient RedisClusterClient create RedisURI
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • lua 和 walk_block 中的 pandoc 过滤器

    我正在尝试应用一个 LUA 过滤器 该过滤器只会更改文档的正文 而不影响元数据 而且比我想象的要难 过滤器应将文本添加到内联元素和块元素的前面和后面 如果它适用于内联元素 这里Code 对于块元素失败CodeBlock function P
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • Redis 在键过期时更新排序集

    我有一个 Redis 服务器 其中包含一组键值对和一个排序集 提供这些键值对的键的索引 键值对可以进入 已完成 状态 此时需要在 1 小时后删除它们 这可以通过在键上设置到期时间来简单地实现 但从排序集中清除它们似乎更成问题 我可以有一个过
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • Lua 中的贪婪/非贪婪模式匹配和可选后缀

    在 Lua 中 我正在尝试模式匹配和捕获 384 Critical Strike Reforged from Parry Chance as 384 Critical Strike 后缀在哪里 Reforged from s 是可选的 长版
  • ServiceStack PooledRedisClientManager 故障转移如何工作?

    根据 git commit 消息 ServiceStack 最近添加了故障转移支持 我最初认为这意味着我可以关闭我的一个 Redis 实例 并且我的池客户端管理器将优雅地处理故障转移并尝试与我的备用 Redis 实例之一连接 不幸的是 我的
  • 如何从表成员中引用lua表成员?

    我在 lua 有一张表 enUS LOCALE STHOUSANDS Thousands separator e g comma patNumber d LOCALE STHOUSANDS d regex to find a number
  • 在 Rails 应用程序上将 HASH 保存到 Redis

    我刚刚开始使用 Redis 和 Rails 所以这可能是一个愚蠢的问题 我试图将哈希值保存到 Redis 服务器 但是当我检索它时 它只是一个字符串 IE hash field gt value field2 gt value2 redis
  • 使用通配符查找键

    我已经使用分号保存了数据 redis gt keys party 1 party congress president 2 party bjp president 3 party bjp 4 party sena 是否有任何命令可以列出所有
  • .NET Core 依赖注入中的“StackExchange.Redis.ConnectionMultiplexer”应该是“AddSingleton”还是“AddScope”?

    我正在使用以下命令将 Redis 连接添加到 NET CoreStackExchange Redis 目前看起来像这样 public static IServiceCollection AddRedisMultiplexer this IS
  • 编译过程

    谁能解释一下编译是如何工作的 我似乎无法弄清楚编译是如何工作的 更具体地说 这是一个例子 我正在尝试在 MSVC 6 中编写一些代码来加载 Lua 状态 我已经 设置库的附加目录并将文件包含到正确的目录中 使用 extern C 因为 Lu
  • Redis AOF fsync(始终)与 LSM 树

    我对日志结构化合并树 LSM 树 的理解是 它利用了附加到磁盘非常快 因为它不需要查找 这一事实 只需将更新附加到预写日志并返回到客户端即可 我的理解是 这仍然提供了立即的持久性 同时仍然非常快 我不认为 Redis 使用 LSM 树 它似
  • 在 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 哈希进行排序

    Redis 有没有一种好方法来获取按值排序的哈希中的键 我查看了文档 但没有找到直接的方法 另外有人可以解释一下redis中的排序是如何实现的 以及什么吗 本文档 http redis io commands SORT using hash
  • 无法通过节点应用程序连接到redis,两者都在docker中

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

随机推荐

  • 23.7.14——23.7.16周末作业

    思维导图 2 有1 2 3 4个数字 能组成多少互不相同且无重复的三位 都是多少 3 终端输入一个数 输出他的二进制 二进制输出不可用格式符 4 定义一个一维整型数组 使用for循环实现数组中元素的输入输出 5 终端输入两个数 求这两个数的
  • windows下PL/SQL Developer连接Orcale

    2 使用PL SQL Developer连接Orcale 这是第三方开发的工具 用于编写PL SQL 代码 调试 查看执行计划等等功能 比较方便 但是是付费软件 Oracle 没有收购这家公司 大家只能用低版本的绿色版 性能有很大的问题 而
  • JavaScript数据结构之队列

    class Queue constructor this count 0 this list this lowestCount 0 往队列添加元素 enqueue element this list this count element t
  • 补充:tensor之间进行矩阵相乘的方法总结

    利用 进行简单的矩阵乘 符号在tensor中就表示矩阵相乘 符号的矩阵相乘性质在numpy中依然适用 首先矩阵相乘的双方必须满足可以矩阵相乘的条件 只会关注两个矩阵最里面的两个维度是否符合条件 外面的维度都只表示矩阵运算的次数 甚至两个矩阵
  • PAT (Basic Level) Practice 1018 锤子剪刀布

    大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入格式 输入第 1 行给出正整数 N 10 5 即双方交锋的次数 随后 N 行
  • 解决appium-inspector连接后在Appium中报错:No route found for /sessions

    完整报错 Appium inspector 连接点击start session后在Appium中报错 HTTP lt GET sessions 404 6 ms 211 HTTP HTTP gt GET sessions HTTP HTTP
  • 判断用户是否已关注公众号

    背景 业务场景是 判断当前登录用户是否已经关注指定的官方微信公众号 没有就指引用户关注 微信公众号官方文档 https developers weixin qq com doc offiaccount Getting Started Ove
  • CocosCreator中TiledMap在真机无法读取, 浏览器和模拟器正常

    找到CocosCreator的安装路径 我这边是CocosCreator191 resources static build templates wx libs xmldom 打开dom js文件 找到第127行 将 copy ls lis
  • Ubuntu 通过 ssh 传输文件

    因为在 ubuntu 中 微信和qq不方便安装 为了便于不同电脑之间传输文件 便通过ssh 文章目录 ssh 客户端和服务端安装 简单使用 scp文件传输 免密传输 WindTerm ssh 客户端和服务端安装 安装 ssh 服务端 sud
  • 低功耗基础概念——Level Shifter cell补充

    文章目录 为什么现在的IC中高低电压差别不大 仍然需要LS level shifter H2L Level shifer L2H Level shifer Lib文件中对level shifter的描述 信号跨越不同级别电压模块进行驱动时
  • 【论文阅读】A CNN-Transformer Hybrid Approach for CropClassification Using MultitemporalMultisensor Images

    论文题目 利用多时相多传感器图像进行作物分类的CNN Transformer混合方法 目录 摘要 I INTRODUCTION II RELATE WORK A Ground Truth of Crop Types B Preprocess
  • QtWebApp介绍、下载和搭建http轻量级服务器Demo

    一 QtWebApp介绍 QtWepApp是一个C 中的HTTP服务器库 其灵感来自Java Servlet 适用于Linux Windows Mac OS和Qt Framework支持的许多其他操作系统 QtWebApp包含以下组件 HT
  • CTFshow-菜狗杯WP

    经过了48小时的奋战 在这次比赛中成功拿下4400分 同时也发现了自己的许多不足 MISC 杂项签到 下载附件后进行解压 发现是一张图片 通过二进制查看工具 WinHex 010 Editor 打开该图片 Ctrl F搜索文本 ctfsho
  • [Leetcode]回文数(python版)

    判断一个整数是否是回文数 回文数是指正序 从左向右 和倒序 从右向左 读都是一样的整数 示例1 输入 121 输出 true 示例2 输入 121 输出 false 解释 从左向右读 为 121 从右向左读 为 121 因此它不是一个回文数
  • 远程连接mysql失败异常,未配置权限,skip-name-resolve以及防火墙

    刚安装好 mysql之后 用 navicat 连接MySQL 是连不上的 mysql 默认是只能本地连接 如果需要远程连接 需要配置连接权限 我的mysql 版本是 MySQL 5 6 40 本地连接之后 需要重置密码 set passwo
  • Docker导出导入本地镜像

    镜像导出到本地 docker save o root images myminio tar myminio v1 root images myminio tar 新建镜像名 myminio v1 需导出镜像名 镜像导入 docker loa
  • sqli-labs(31-40)

    人过留名 雁过留声 人生天地间 凡有大动静处 必有猪头 Less 31 源码分析 和 Less 29 相似 就是参数使用双引号 括号引用了 注入的时候注意闭合即可 Less 32 源码分析 check addslashes 转义的字符有 反
  • 如何在PHP中以编程方式将Excel文件转换为PDF?试试Aspose

    Excel电子表格被广泛用于以行和列的形式存储和分析数据 但是 在各种情况下 需要先将Excel文件转换为PDF 然后才能通过Internet共享它们 为了自动将Excel转换为PDF 本文介绍了 如何使用PHP通过编程将Excel文件转换
  • 你们要的终极指南! 交易API接口

    股票API接口可谓是量化交易和金融工具中最重要的组成部分 一个高质量的交易API接口对于量化交易程序员而言可谓是福星 因其可使得程序员们进行后向测试 得到可靠的测试结果 验证自己制定的交易策略是否有效 甚至构建自己的财富主页 有可能成为下一
  • 主从架构&lua脚本-Redis(四)

    上篇文章介绍了rdb aof持久化 持久化RDB AOF Redis 三 https blog csdn net ke1ying article details 131148269 redis数据备份策略 写job每小时copy一份到其他目