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

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优