广告
返回顶部
首页 > 资讯 > 数据库 >redis 分布式缓存实战-redis 事务
  • 360
分享到

redis 分布式缓存实战-redis 事务

redis分布式缓存实战-redis事务 2017-03-11 07:03:22 360人浏览 绘本
摘要

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 事务

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

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

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

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

下载Word文档
猜你喜欢
  • redis 分布式缓存实战-redis 事务
    redis 分布式缓存实战-redis 事务   1.描述    redis 事务单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断。   redis 事务没有隔离级...
    99+
    2017-03-11
    redis 分布式缓存实战-redis 事务
  • redis分布式缓存实现
    第一:Redis 是什么?Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API.第二:出现背景数据结构(Data Structure)需求越来越多, 但memcache...
    99+
    2023-06-03
  • 如何实现redis分布式缓存
    摘要: 第一:Redis 是什么? Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越...
    99+
    2022-10-18
  • Redis+Caffeine实现分布式二级缓存组件实战教程
    目录前言所谓二级缓存分布式二级缓存的优势如何使用组件?核心实现方法关于分布式本地缓存失效前言 在生产中已有实践,本组件仅做个人学习交流分享使用。github:https://github.com/axinSoochow/...
    99+
    2022-08-08
    Redis Caffeine分布式二级缓存 Redis Caffeine二级缓存
  • redis 实战-redis 事务
    redis 实战-redis 事务   1.描述      redis 事务单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断。     redis 事务没有隔离级别...
    99+
    2021-02-21
    redis 实战-redis 事务
  • Redis分布式缓存与秒杀
    目录一、单点Redis的问题二、RDB三、AOF四、Redis优化秒杀流程1、秒杀步骤:2、Redis优化秒杀步骤:3、秒杀的Lua脚本 4、调用秒杀的lua脚本5、通过线程池,操作阻塞队列五、基于Redis实...
    99+
    2023-04-03
    Redis分布式缓存 Redis分布式秒杀
  • SpringBoot使用Redis实现分布式缓存
    目录springboot使用Redis实现分布式缓存Redis实现主从复制Redis集群的构建 springboot使用Redis实现分布式缓存 1、环境构建 ​ 1.1 ...
    99+
    2023-05-14
    Java Springboot使用Redis分布式缓存 Redis分布式缓存 Springboot分布式缓存
  • 《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
  • 利用Redis实现分布式缓存预热
    利用Redis实现分布式缓存预热的实践在现代大型应用程序中,缓存是提升性能和减少服务器负荷的常见方法之一。而分布式缓存预热则是在高并发场景下常用的优化技术之一。本文将介绍如何利用Redis实现分布式缓存预热,并给出具体的代码示例。什么是缓存...
    99+
    2023-11-07
    缓存 分布式 redis
  • Redis如何实现分布式缓存功能
    Redis如何实现分布式缓存功能,需要具体代码示例摘要:Redis是一个高性能的数据缓存和存储系统,它具备分布式特性,可以支持分布式缓存的功能。本文将介绍Redis如何实现分布式缓存,并提供具体的代码示例来帮助读者理解。概述分布式缓存是一种...
    99+
    2023-11-07
    redis 实现 分布式缓存
  • 如何使用redis实现分布式缓存
    本文小编为大家详细介绍“如何使用redis实现分布式缓存”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用redis实现分布式缓存”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2022-10-19
  • 利用Redis实现分布式缓存一致性
    利用Redis实现分布式缓存一致性在现代分布式系统中,缓存起着非常重要的作用。它可以大大降低系统对数据库的访问频率,提高系统的性能和吞吐量。而在分布式系统中,为了保证缓存的一致性,我们需要解决多个节点之间的数据同步问题。在本文中,我们将介绍...
    99+
    2023-11-07
    缓存 分布式 redis
  • Redis如何实现分布式缓存一致性
    Redis如何实现分布式缓存一致性,需要具体代码示例缓存是提高系统性能的重要手段之一,而分布式缓存则能够进一步提升系统的并发能力和扩展性。Redis作为一种常用的内存数据库,具有快速、高效的特点,广泛被用于分布式缓存的实现。在分布式缓存中,...
    99+
    2023-11-07
    缓存 分布式 redis
  • 基于Redis缓存怎么实现分布式锁
    本篇内容介绍了“基于Redis缓存怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是分布式锁首先我们先来简单了解一下什么是...
    99+
    2023-06-19
  • Redis分布式缓存与秒杀怎么实现
    本篇内容介绍了“Redis分布式缓存与秒杀怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单点Redis的问题数据丢失问题Redi...
    99+
    2023-07-05
  • redis实现分布式事务的方法
    小编给大家分享一下redis实现分布式事务的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题描述:某电商平台,首发一款新品...
    99+
    2022-10-18
  • Redis如何实现分布式缓存的扩展性
    Redis是一款开源的内存数据库,具有高速读写、数据持久化等优势,是现在企业级应用中广泛使用的缓存服务。针对分布式缓存,Redis提供了多种扩展性方案,使其能够高效地满足企业高并发业务,本文将重点讨论Redis如何实现分布式缓存的扩展性。一...
    99+
    2023-11-07
    redis 分布式缓存 扩展性
  • Redis分布式锁防止缓存击穿的实现
    缓存击穿 和缓存穿透不同的是,缓存击穿是指:缓存中没有,但是数据库中存在的热点数据。 例如:首页的热点新闻,并发访问量非常大的热点数据,如果缓存过期失效,服务器会去查询DB,这时候如...
    99+
    2022-11-13
  • 如何使用Redis实现分布式缓存更新
    如何使用Redis实现分布式缓存更新在分布式系统中,缓存起到了重要的作用,可以大大提升系统的性能和可扩展性。而Redis作为一种高性能的内存数据库,常用于分布式缓存的实现。本文将为您介绍如何使用Redis实现分布式缓存的更新,并给出具体的代...
    99+
    2023-11-07
    分布式 redis 缓存更新
  • 分布式事务实战
    转载本文需注明出处:微信公众号EAWorld,违者必究。引言:微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发,从而被越来越多的开发者和公司推崇运用。但系统微服务化后,一个看似简单...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作