Reids 事务,命令,场景

2024-06-05 04:04
文章标签 命令 场景 事务 reids

本文主要是介绍Reids 事务,命令,场景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

性质

原子性:事务中的所有命令要么全部执行,要么全部不执行。相比于 MySQL 中的原子性,Redis的还是稍微比较吝啬的。MySQL 中的是事务所有命令要么全部成功,要么全部不执行。在MySQL中,如果不是全部执行成功则会进行回滚操作。Redis中是没有的。

不具备一致性:redis 中没有约束,也没有回滚机制,事务执行过程中的某个修改操作出现失败,就可能引发不一致的情况。

不具备持久性:redis本身就是内存数据库,数据是存在内存中的。虽然 redis 有持久化机制。但是这个持久化机制和事务是没有关系的。

不涉及隔离性:reids为一个单线程模型的服务器程序。所有的请求/事务都是"串化"执行的。

开启事务的时候,此时客户端输入的命令,就会发送给服务器并且进入到一个队列中(不是立刻执行)。当收到执行事务的时候,此时主线程就会把队列中的任务按照顺序执行。


命令

开启事务

MULTI

执行事务

EXEC

 放弃当前事务

DISCARD

监控 key 是否在执行事务前发生改变

WATCH

watch 的实现类似与乐观锁(在加锁之前有一个预期,预期锁冲突的概率比较低,悲观锁反之)

假设有一个 key 111。第一个客户端进行 watch key (会给 key 分配一个版本号,假设为 1) ,然后 multi(开启事务)进行 set key 222。当其他的客户端对这个 key 进行修改,这个版本号就会变大(假设变成了2)。然后在第一个客户端进行 exec 执行命令的时候就会进行判定,判断这个版本号是否和原来分配的一样,一样的话说明当前这个 key 在这个事务执行的过程中,没有别的客户端进行修改,于是就进行设置 key 为 222。反正,失败,返回 nil。


场景

超卖:防止超量卖出,redis 为单线程,通过事务处理多个客户端进行买东西。

第一个客户端

开启事务
get count
if count > 0decr count
执行事务

第二个客户端

开启事务
get count
if count > 0decr count
执行事务

redis 服务器在队列中收到这些请求,当到执行事务的步骤时,才开始执行第一个事务(第二个排队),当到第二个事务时候拿到的 count 已经是 -- 后的了

这篇关于Reids 事务,命令,场景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032016

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,