redis延伸

简介: 在掌握了 redis 常用的五种类型以及适用场景后,快来学习更多高级操作吧

1.Redis 事务

redis 中有类似于事务的东西,保证事务执行时不被其他客户端发来的请求中断。但是和关系数据库并不相同。它的事务不支持回滚操作,因此在统一执行事务中所有命令时,即使有一条失败,之前执行过的命令仍然生效。

事务执行过程:开启事务,进行相关操作(所有操作按顺序添加到队列中),执行。

此处可能有人会问:既然不支持回滚,那么在事务执行的过程中,所处理的数据被其他人修改了,怎么办?redis 提供了一个监视器 watch 命令,它的执行过程如下:

1) 使用监视器监控一个变量

2) 使用 multi 开启事务

3) 向队列中添加一系列命令

4) 在使用 exec 统一执行队列中所有操作前,监视器会去查看监控的变量是否被更改过,如果有变化直接报错,没有则正常执行更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

看到上述执行过程后,会发现它类似于「乐观锁」

单机支持事务,集群不支持。

可以使用命令 info Replication 查看所属角色(主 Master 从 Slave 信息)

1.1 相关命令

multi 开启事务

exec 统一执行

watch 监视器「乐观锁」

1.2 模块化操作

我们在使用 python 第三方库操作 redis 时,一般通过 pipeline 管道进行接收命令,然后 execute 顺序执行管道中所有操作。

优点:可以在客户端统一收集指令;会隐式的执行 multi 与 exec 命令。

2.Redis 持久化

redis 是内存型的数据库,为保证发生宕机时可以恢复数据,所以需要持久化。共有下方两种方式:

2.1 RDB

快照持久化(把当前内存状态刷入硬盘)

1) 创建子进程执行,停顿时长(随着数据量的增大,创建子进程所耗费的时间会越来越长。比如使用了40G内存后,创建一个子进程可能耗费4s多,这4s数据库会处于停服状态)更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2) 定期触发(默认开启)

3) 手动执行 BGSAVE 命令(background save 后台保存)时触发

4) 执行 SHUTDOWN 关闭数据库时触发

2.2 AOF

追加文件的方式进行持久化

1) 保存的是操作指令

2) 默认关闭

3) 可以选择 appendsync always / everysec / no 三种方式,一般选择每秒记录一次

4) 占用磁盘一定量时会进行压缩,可手动开启配置项

在实际使用时一般两种方式都开启。

3.Redis 复制集

为了在部分节点无法通讯时,保证服务仍然可用。

3.1 设置方式

1) 服务运行时执行命令 slaveof

2) 服务启动前在 redis.conf 配置文件中填写以下代码:


slaveof <masterip> <masterport>

3.2 注意事项

只能一主多从(不允许存在互为备份的两个 master),但是可以层级化,如下图所示。

                  master
                 /     \
           slave1        slave2
          /      \
      slave3   slave4       ......

使用如下命令查看当前 redis 服务器所扮演角色:


info Replication

4.Sentinel 哨兵

1) 是一个独立的进程,安装之后默认存在,可以通过源码文件sentinel.conf 查看。

2) 哨兵独立于 redis 之外运行。

4.1 作用

看管 redis 主从角色关系,进行故障转移(failover) ,从而实现高可用。它的功能简单来说就是 master 死掉了,可以自动将 slave 上升为 master 。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

4.2 注意

至少运行3个实例,因为决定 redis 是否挂掉需要选举,超过半数投票才可以使 master 客观下线。还会在哨兵中选举出一个 leader 去故障转移,在 slave 中选出哪台被上升为 master

5.redis 用途

1) 缓存

2) 持久存储:比如数据库的冗余字段存放到 redis 中

3) 队列:消息平台,比如 celery 的消息队列实现

4) 排行榜/计数器

5) 发布订阅


相关文章
|
10月前
|
安全 Java 编译器
Java密封类:精准控制继承关系
Java密封类:精准控制继承关系
362 100
|
9月前
|
弹性计算 Linux 网络安全
2026年阿里云 ECS 云服务器自定义购买流程详解(新手版)
对于初次购买阿里云 ECS 云服务器的新手来说,自定义购买模式能灵活适配业务需求,但配置环节较多。以下结合最新操作细节,用通俗语言拆解从准备到完成的全流程,清晰说明各步骤的选择逻辑,帮助快速掌握核心操作。
|
机器学习/深度学习 人工智能 自然语言处理
迁移学习:让小数据也能驱动AI大模型
迁移学习:让小数据也能驱动AI大模型
574 99
|
9月前
|
搜索推荐 数据挖掘 API
京东商品评论API接口指南
京东商品评论API申请需通过京东开放平台,分个人与企业开发者权限。2025最新流程包括:注册账号、选择适用场景(如品牌合作需授权证明)、创建应用并申请接口权限(如item_review)。调用时需传入商品ID、页码、每页数量等参数。获取数据后可用于产品优化、运营提升与竞品分析,驱动业务决策。
|
测试技术 持续交付 开发者
《提升鸿蒙Next应用审核与上架效率之道》
为了确保应用顺利通过华为应用市场的审核并成功上架,开发者应提前熟悉审核标准和流程,优化应用质量,完善资料提交,并加强与审核团队的沟通。具体措施包括:仔细研读审核指南,确保功能完整性和稳定性,提升性能指标,规范权限申请,准确填写应用信息,准备高质量截图和视频,制定明确隐私政策,利用技术工具进行自查和自动化测试,积极参与社区交流和培训活动。
502 8
缓冲流和转换流的使用【 File类+IO流知识回顾③】
这篇文章介绍了Java中缓冲流(BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter)和转换流(InputStreamReader, OutputStreamWriter)的使用,包括它们的构造方法和如何利用它们提高IO操作的效率及处理字符编码问题。
缓冲流和转换流的使用【 File类+IO流知识回顾③】
|
存储 资源调度 监控
工作负载类型
【10月更文挑战第18天】
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | 卷积模块 | 用坐标卷积CoordConv替换Conv
💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡
|
存储 JavaScript 开发者
Vue3中的组件间通信:多种方法解析
【4月更文挑战第20天】
1479 1
|
SQL 关系型数据库 MySQL
深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥
深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥