redis数据安全(五)事务

一、概念:

1、介绍:Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

2、实现方法:在一个客户端操作的时候,把所有的指令一次性按照顺序排他的放在一个队列中,执行完了之后再让其他的客户端操作

二、基本操作:

1、开启事务:

设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中

 multi 
2、执行事务:

设定事务的结束位置,同时执行事务。与multi成对出现,成对使用。加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行。若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行

exec 

3、取消事务:

终止当前事务的定义,发生在multi之后,exec之前。遇到multi指令,创建队列,遇到discard指令销毁队列

discard

已经执行完毕的命令对应的数据不会自动回滚,需要在代码中实现回滚。

三、Redis事务锁:

1、问题引入:多个客户端有可能同时操作同一组数据,并且该数据一旦被操作修改后,将不适用于继续操作。

2、解决方法:在操作之前锁定要操作的数据,一旦发生变化,终止当前操作。

(1)对 key 添加监视锁,在执行exec前如果key发生了变化,终止事务执行

watch key1 [key2……] 

关系型数据库执行的锁为悲观锁,Redis的watch命令是乐观锁。

(2)取消对所有 key 的监视

unwatch

注意:

  • 一但执行 EXEC 开启事务的执行后,无论事务是否执行成功, WARCH 对变量的监控都将被取消。
  • 故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。
四、非事务型流水线:

使用事务的一个好处是底层的客户端会通过流水线来提高事务执行时的性能。下面看下不使用事务时使用流水线来进一步提升命令的执行性能。将标准的Redis连接替换成流水线连接,减少通信往返的次数。

以java为例,可以使用executePipelined打包执行命令,一次发送给redis服务器执行。

/*** 使用pipeline*/@Testvoid pipeLineTest() {List<Object> objects = redisTemplate.executePipelined(new SessionCallback<String>() {@Overridepublic String execute(RedisOperations operations) throws DataAccessException {redisTemplate.opsForList().leftPush("pipe", "k1");redisTemplate.opsForList().rightPush("pipe", "k2");redisTemplate.opsForList().leftPop("pipe");redisTemplate.opsForList().rightPop("pipe");return null;}});objects.stream().forEach(System.out::println);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412498.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘计算的挑战和机遇(结合RDH-EI)

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 &#x1f332;序言&#x1f334;前端代码的引入&#x1f38b;约定前后端交互接口&#x1f343;后端服务器代码实现&#x1f6a9;UserController.java&#x1f6a9;BookController.java ⭕总结 &#x1f332;序言 该图书管理系统&#xff0c;博主将一步一步进行实现。…

nginx入门学习

nginx简介 nginx 是什么?用来干嘛的 通俗解释&#xff1a;客户端向服务器请求时&#xff0c;提供让多个服务器一起处理请求的东西 是一个反向代理服务器&#xff0c;能够提供负载均衡&#xff0c;和进行反向代理的功能 正向代理&反向代理 客户端向代理服务器请求&#…

Leetcode24-找到两个数组中的公共元素(2956)

1、题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;它们分别含有 n 和 m 个元素。 请你计算以下两个数值&#xff1a; 统计 0 < i < n 中的下标 i &#xff0c;满足 nums1[i] 在 nums2 中 至少 出现了一次。 统计 0 < i < m 中的下标 i &…

Docker安装Nginx并部署MySQL容器构建

一.MySQL容器的构建 1.创建MySQL根目录及配置文件夹&data文件夹 mkdir -p mysql/{conf,data} 2.上传配置文件 将配置文件上传到conf文件夹&#xff08;数据库配置文件已放到置顶资源中&#xff09; 3.命令构建MySQL容器 /soft/mysql/conf/my.cnf:/etc/my.cnf目录为我们…

CSS实现的 Loading 效果

方式一、纯CSS实现 代码&#xff1a;根据需要复制 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS Animation Library for Developers and Ninjas</title><style>/* ---------------…

Dubbo服务暴露机制解密:深入探讨服务提供者的奥秘【九】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Dubbo服务暴露机制解密&#xff1a;深入探讨服务提供者的奥秘【九】 前言服务暴露机制简介服务注册与发现协议选择与拓展动态代理实现结语&#xff1a; 前言 在分布式系统中&#xff0c;服务的暴露是…

【React】Redux的使用详解

文章目录 Redux的三大原则Redux官方图react-redux使用 1、创建store管理全局状态​ 2、在项目index.js根节点引用 3、 在需要使用redux的页面或者组件中&#xff0c;通过connect高阶组件映射到该组件的props中 redux中异步操作如何使用redux-thunkcombineReducers函数 Re…

IPv6自动隧道---6to4隧道

IPv6 over IPv4自动隧道特点 由于IPv4兼容IPv6隧道要求每一个主机都要有一个合法的IP地址,而且通讯的主机要支持双栈、支持IPv4兼容IPv6隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替。 6to4隧道 集手动隧道和自动隧道的优点于一身,提出6to4的目的是为IPv4网络…

目标检测开源数据集——道路坑洼

一、危害 对车辆的影响&#xff1a;道路坑洼会导致车辆行驶不稳&#xff0c;增加车辆的颠簸&#xff0c;不仅影响乘坐舒适度&#xff0c;还可能对车辆的悬挂系统、轮胎等造成损害。长期在坑洼路面上行驶&#xff0c;车辆的减震系统、悬挂系统等关键部件容易受损&#xff0c;进…

【计算机组成与体系结构Ⅱ】多Cache一致性的模拟分析(实验)

实验八&#xff1a;多Cache一致性的模拟分析 一、实验目的 1&#xff1a;加深对多 Cache 一致性的理解。 2&#xff1a;进一步掌握解决多 Cache一致性的目录协议和监听协议的基本思想。 3&#xff1a;掌握在各种情况下&#xff0c; 目录协议和监听协议是如何工作的&#xf…

Jupyter Notebook

2017年左右在大学里都听说过Jupyter Notebook&#xff0c;并且也安装用了一段时间&#xff0c;后来不知道什么原因没有用了。估计是那时候写代码的时候多一些&#xff0c;因为它可以直接写代码并运行结果&#xff0c;现在不怎么写代码了。 介绍 后缀名为.ipynb的json格式文件…