Redis开发运维实践专题功能之事务
用Multi(Start Transaction)、Exec(Commit)、Discard(Rollback)实现。 在事务提交前,不会执行任何指令,只会把它们存到一个队列里,不影响其他客户端的操作。在事务提交时,批量执行所有指令。 一般情况下redis在接受到一个client发来的命令后会立即处理并返回处理结果,但是当一个client在一个连接中发出multi命令后,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一个队列中。当从此连接受到exec命令后,redis会顺序的执行队列中的所有命令。并将所有命令的运行结果打包到一起返回给client.然后此连接就结束事务上下文。
Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行。
使用discard命令来取消一个事务。
注意:redis只能保证事务的每个命令连续执行(因为是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的,也因此就不存在"事务内的查询要看到事务里的更新,在事务外查询不能看到"这个让人万分头痛的问题),但是如果事务中的一个命令失败了,并不回滚其他命令。另外,一个十分罕见的问题是当事务的执行过程中,如果redis意外的挂了。只有部分命令执行了,后面的也就被丢弃了。注意,如果是笔误,语法出现错误,则整个事务都无法执行。
一个简单案例表明出错也不会回滚:
127.0.0.1:6379 del q1 (integer) 0 127.0.0.1:6379 exists q1 (integer) 0 127.0.0.1:6379 multi 127.0.0.1:6379 rpush q1 bar QUEUED 127.0.0.1:6379 scard q1 QUEUED 127.0.0.1:6379 exec 1) (integer) 1 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379 exists q1 (integer) 1
当然如果我们使用的append-only file方式持久化,redis会用单个write操作写入整个事务内容。即是是这种方式还是有可能只部分写入了事务到磁盘。发生部分写入事务的情况下,redis重启时会检测到这种情况,然后失败退出。可以使用redis-check-aof工具进行修复,修复会删除部分写入的事务内容。修复完后就能够重新启动了。
Redis开发运维实践指南
本文为《Redis开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。
阿里云-DataWorks-数据分析开发到上线运维 本文主要讲解 阿里云-DataWorks- 数据分析开发到上线运维 的思路。 因本文为IT人员以技术视角阐述 日常我们做数据分析的实际开发过程所转化,适合数据分析相关人员阅读。
【SpringBoot2】运维实用篇-多环境开发 什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼顾3种环境设置,开发环境——自己用的,测试环境——自己公司用的,生产环境——甲方爸爸用的。因为这是绝对不同的三台电脑,所以环境肯定有所不同,比如连接的数据库不一样,设置的访问端口不一样等等。
《MySQL 技术大全:开发、优化与运维实战》电子版地址 MySQL 具有小巧、灵活和免费等特性,这使得它越来越多地被用于企业的实际开发中。 特别是 MySQL 数据库的开源特性,更使它得到了广泛应用。程序员要想进入 MySQL 开发 领域,除了需要有扎实的编程基础外,还需要掌握 SQL 语句的编写,熟悉 MySQL 数据库的 优化和运维,了解 MySQL 数据库的常见故障和解决方案,这样才能在竞争日益激烈的数据 库领域提高竞争力,进而实现自身的价值。
相关文章
- redis实战笔记(1)-第1章 初识Redis
- Netty、Redis、Zookeeper高并发实战 PDF 电子书 免费获取
- redis.windows.conf 本地访问模式,设置redis访问密码
- 各种redis的介绍:ServiceStack.Redis,StackExchange.Redis,CSRedis
- redis安装与使用(windows端)+Redis设置Auth认证保护+redis的管理工具:Redis Desktop Manager
- redis配置密码认证,通过密码可以进行连接
- 分布式缓存技术redis学习(三)——redis高级应用(主从、事务与锁、持久化)
- Redis 字符串(String)
- 在Java中使用Redis
- [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
- Redis开发与运维. 2.7 键管理
- Redis开发与运维. 3.4 事务与Lua
- Redis多线程与ACL
- Redis的事务
- Spring集成Redis集群(含spring集成redis代码)
- Spring Boot Redis 应用场景
- Spring Boot 2 实战:利用Redis的Geo功能实现查找附近的位置
- Golang 实现 Redis(8): TCC分布式事务
- Redis基础之事务及乐观锁(三)
- Redis哨兵机制原理详解
- 【Redis入门笔记 04】事务的基本操作
- redis使用
- Redis(1.17)redis客户端管理
- redis的hash操作在集中式session中的应用
- 深入redis内部--字典实现
- Redis分布式锁单机版和集群版(7种)
- 曹工说Redis源码(7)-- redis server 的周期执行任务,到底要做些啥
- .net下 本地锁、redis分布式锁、zk分布式锁的实现