iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >redis 实战-redis 事务
  • 196
分享到

redis 实战-redis 事务

redis实战-redis事务 2021-02-21 09:02:41 196人浏览 才女
摘要

redis 实战-redis 事务   1.描述      Redis 事务单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断。     redis 事务没有隔离级别

redis 实战-redis 事务

redis 实战-redis 事务

  1.描述

 

   Redis 事务单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断。

 

  redis 事务没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询看到事务里的更新,在事务外查询不能看到”。

  redis 事务不保证原子性:redis 同一个事务中如果有一条命令运行时执行失败,其后的命令仍然会被执行,没有回滚。

 

  

  2.命令

 

  Multi、Exec、Discard和Watch是Redis事务的相关命令。
  Multi:标记一个事务块的开始。Multi 命令用于开启一个事务,它总是返回 OK 。 Multi 执行之后, 客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行, 而是被放到一个队列中, 当 Exec命令被调用时, 所有队列中的命令才会被执行。另一方面, 通过调用 Discard, 客户端可以清空事务队列, 并放弃执行事务。

  Exec:执行所有事务块内的命令。命令的回复是一个数组, 数组中的每个元素都是执行事务中的命令所产生的回复。 其中, 回复元素的先后顺序和命令发送的先后顺序一致。当客户端处于事务状态时, 所有传入的命令都会返回一个内容为 Queued 的状态回复(status reply), 这些被入队的命令将在 Exec 命令被调用时执行。

  Discard:取消事务,放弃执行事务块内的所有命令。当执行Discard命令时,事务会被放弃,事务队列会被清空,并且客户端会从事务状态中退出。

  Watch:监视一个或多少Key,如果在事务执行之前这个或这些Key被其他命令所改动,那么事务将被打断。

  UnWatch:取消Watch命令对所有Key的监视。

 

 

  

  3.示例

  3.1.    正常执行示例

  首先我们清空数据库内容,查看内容能看到数据库为空。然后Multi 开启一事务,设置两个 Key、Value值,Exec 执行事务。我们看到执行事务时,同时返回两命令的执行结果。通过查询数据库正常保存两数据内容。

   

  3.2.    放弃事务示例

  接下来,我们再来试下,放弃事务示例,首先我们清空数据库内容,查看内容能看到数据库为空。然后Multi 开启一事务,设置两个 Key、Value值,此时,我们执行Discard命令,放弃事务。通过查看数据库中内空,我们可以看到数据库中还是为空。

  

  3.3.    全体连坐示例

  全体连坐指的是什么呢?就是说其中有一条命令编译时错误,整个系列命令都将不会被执行。

  

  3.4.    冤头债主示例

  冤头债主指的是什么呢?就是说其中有一条命令运行时有问题,系列中没问题的命令会执行,有问题的命令不会成功执行。

  

  3.5.    Watch监控

  Watch 命令可以为 Redis 事务提供 check-and-set (CAS)行为。被 Watch 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 Exec 执行之前被修改了, 那么整个事务都会被取消, Exec 返回nil-reply来表示事务已经失败。

  下面我们以信用卡账号结余和债务为例:

  先初始账号结余为100,债务为0。消费20,账号结余减20,债务增加20。首先Watch监视账号结余,然后开启事务,对账号结余及债务进行操作。

  当无加塞篡改时,正常执行结果,账号结余为80,债务20。

   

  当Watch监视账号结余,有加塞篡改账号结余,比如向账号充值100,账号结余改为180时,再执行一系列命令,执行事务时,得到的结果将是未能正常更新操作。

   

  

  4.总结

  我们发现 Redis 对于事务,部分支持,不能像sql Server等关系数据库的强一致性。Watch指令,类似乐观,事务提交时,如果Key的值已被别的客户端改变,比如某个List已被别的客户端Push/Pop过了,整个事务队列都不会被执行。通过Watch命令在事务执行之前监控多个Keys,倘若在Watch之后有任何Key的值发生了改变,Exec命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。

 

  至此Redis事务介绍完毕,有不当地方,欢迎指正!

 

您可能感兴趣的文档:

--结束END--

本文标题: redis 实战-redis 事务

本文链接: http://www.lsjlt.com/news/5358.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis 事务
    目录 Redis 事务一、Redis事务的概念:二、redis事务提出的逻辑:三、redis事务的基本操作四、事务的执行流程五、redis锁六、redis分布式锁 Redis 事务 一...
    99+
    2023-09-08
    redis 数据库 java
  • redis演练(3) redis事务管理
    redis vs memcached。redis与memcached对比,redis不仅适合做缓存,而且可以做存储,这就有点数据库的影子了。说到数据库,事务是一个很重要的一个方面。数据库事务(简称:事务)是...
    99+
    2024-04-02
  • Redis实战:Redis在Java中的基本使用
    本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实...
    99+
    2023-08-31
    redis java 数据库
  • Redis怎么实现事务操作
    Redis 实现事务操作的方式是使用 MULTI 和 EXEC 命令进行事务的开启和执行。 使用 MULTI 命令开启事务,表示后...
    99+
    2024-05-07
    Redis
  • Redis队列详解(springboot实战)
    前言 MQ应用有很多,比如ActiveMQ,RabbitMQ,Kafka等,但是也可以基于redis来实现,可以降低系统的维护成本和实现复杂度,本篇介绍redis中实现消息队列的几种方案,并通过springboot实战使其更易懂。 1...
    99+
    2023-10-25
    java 数据结构 redis spring boot Powered by 金山文档
  • redis事务的用法
    这篇文章将为大家详细讲解有关redis事务的用法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis事务MULTI, EXEC, DISCARD and WATCH ...
    99+
    2024-04-02
  • Redis事务怎么用
    小编给大家分享一下Redis事务怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务:127.0.0.1:6379> ...
    99+
    2024-04-02
  • Spring Boot集成Redis实战操作
    最近在使用Spring Boot,发现其功能真是强大,可以快速的集成很多的组件功能,非常方便:今天就来介绍下,如何集成Redis。定义Redis 是一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符...
    99+
    2023-06-02
  • 《Redis实战篇》六、秒杀优化
    6、秒杀优化 6.0 压力测试 目的:测试1000个用户抢购优惠券时秒杀功能的并发性能~ ①数据库中创建1000+用户 这里推荐使用开源工具:https://www.sqlfather.com/ ,导...
    99+
    2023-09-02
    redis 数据库 java
  • 《Redis实战篇》四、分布式锁
    文章目录 4.1 基本原理和实现方式对比4.2 Redis分布式锁的实现核心思路4.3 实现分布式锁版本一4.4 Redis分布式锁误删情况说明4.5 解决Redis分布式锁误删问题4.6 分布式锁的原子性问题4.7 Lua脚本解决...
    99+
    2023-08-17
    redis 分布式 java
  • Docker中redis集群部署实战
    目录环境准备安装gcc-c++查看版本创建Redis网卡创建6个redis服务在/var目录下创建脚本文件create_redis_script.sh编写脚本内容查看脚本文件赋予create_redis_script.s...
    99+
    2022-11-27
    Docker中redis集群部署 docker搭建redis集群 docker安装redis集群
  • 你了解Redis事务吗
    目录前言ACID属性说明原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)Redis如何实现事务实现原理事务相关命...
    99+
    2022-11-13
    Redis 事务
  • Redis中事务是什么
    这篇文章主要介绍Redis中事务是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!相关命令命令格式作用返回结果WATCHWATCH key [key ...]将给出的Keys标记为...
    99+
    2024-04-02
  • PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
    PHP使用Redis实战实录系列 PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis...
    99+
    2023-08-30
    php redis 开发语言
  • redis事务有什么用
    这篇文章主要介绍了redis事务有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。是什么可以一次执行多个命令,本质是一组命令的集合。一个...
    99+
    2024-04-02
  • Redis事务支持ACID吗
    小编给大家分享一下Redis事务支持ACID吗,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是事务的 ACID鬼吹灯之《云南...
    99+
    2024-04-02
  • redis实现分布式事务的方法
    小编给大家分享一下redis实现分布式事务的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题描述:某电商平台,首发一款新品...
    99+
    2024-04-02
  • redis实现事务的原理是什么
    这篇文章主要介绍redis实现事务的原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!原子性(atomicity):一个事务是一个不可分割的最小工作单位,要么都成功要么都失败。...
    99+
    2024-04-02
  • 《Redis实战篇》三、优惠券秒杀
    文章目录 3.1 全局唯一ID3.2 Redis实现全局唯一Id3.3 添加优惠卷3.4 实现秒杀下单3.5 库存超卖问题分析3.6 乐观锁解决超卖问题3.7 优惠券秒杀-一人一单3.8 集群环境下的并发问题 3.1 全局唯...
    99+
    2023-08-23
    redis 数据库 java
  • Spring Boot中使用Redis实战案例
    目录1.依赖2.依赖关系3.配置4.RedisTemplate5.基础操作6.事务总结1.依赖 maven依赖如下,需要说明的是,spring-boot-starter-data-r...
    99+
    2023-05-16
    springboot使用redis springboot redis配置 spring boot  redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作