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

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

99%的人都选错了! 路由器WiFi双频合一还是分开好的专业解析与适用场景探讨

《99%的人都选错了!路由器WiFi双频合一还是分开好的专业解析与适用场景探讨》关于双频路由器的“双频合一”与“分开使用”两种模式,用户往往存在诸多疑问,本文将从多个维度深入探讨这两种模式的优缺点,... 在如今“没有WiFi就等于与世隔绝”的时代,越来越多家庭、办公室都开始配置双频无线路由器。但你有没有注

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer