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

相关文章

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中,

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接