Redis学习笔记(八)事务 和 连接相关命令
来源:互联网 发布:淘宝店铺的货源怎么找 编辑:程序博客网 时间:2024/06/07 22:46
Redis学习笔记(八)事务 和 连接相关命令
1. 事务
1. 事务的概念和原理
- Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis中的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
- 事务的原理是先将属于一个事务的命令发送给Redis,然后在让Redis一次执行这些命令。
2. 事务相关命令
- MULTI
- 标记一个事务块的开始。 随后的指令将在执行EXEC时作为一个原子执行。
- EXEC
- 执行事务中所有在排队等待的指令并将链接状态恢复到正常 当使用WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行。
127.0.0.1:6379> MULTI //事务块的开始标记OK127.0.0.1:6379> INCR counter1QUEUED //将命令暂存在事务队列中127.0.0.1:6379> INCR counter2QUEUED127.0.0.1:6379> INCR counter3QUEUED127.0.0.1:6379> PINGQUEUED127.0.0.1:6379> GET counter1QUEUED127.0.0.1:6379> EXEC //将等待执行的事务队列中的所有命令(返回QUEUED的命令)按照发送顺序一次执行1) (integer) 12) (integer) 13) (integer) 14) PONG5) "1"//EXEC的返回值就是这些命令的返回值组成的列表,返回值顺序和命令的顺序相同。
- Redis保证一个事务中的所有命令要么被都不执行,要么都执行。
- 如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行;
- 一旦客户端发送了EXEC命令,所有的命令都会被执行,即使伺候客户端断线也没关系,因为Redis会记录所有要执行的命令。
- WATCH key [key …]
- 标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁)。
- 被监控的键一旦被修改或删除,之后的事务就不会执行。
- 监控一直会持续到EXEC命令。
- UNWATCH
- 取消一个事务中已被监视的所有key。
- 如果执行EXEC 或者DISCARD, 则不需要手动执行UNWATCH 。
127.0.0.1:6379> GET counter1"1"127.0.0.1:6379> GET counter2"1"127.0.0.1:6379> WATCH counter1 counter2 //监控这两个键OK127.0.0.1:6379> MULTI //标记事务块的开始OK127.0.0.1:6379> INCR counter1QUEUED127.0.0.1:6379> INCR counter2QUEUED//在执行EXEC命令之前,打开另一个客户端修改counter1的值127.0.0.1:6379> GET counter1"1"127.0.0.1:6379> SET counter1 100OK127.0.0.1:6379> GET counter1"100"//返回执行事务的客户端,执行EXEC命令127.0.0.1:6379> EXEC(nil) //EXEC命令执行失败,因为被监控的键被修改127.0.0.1:6379> GET counter1"100" //counter1值被另一个客户端修改为100127.0.0.1:6379> GET counter2"1" //counter2的值不变
127.0.0.1:6379> MULTI //正常执行事务OK127.0.0.1:6379> INCR counter1QUEUED127.0.0.1:6379> INCR counter2QUEUED127.0.0.1:6379> EXEC //键值都被修改1) (integer) 1012) (integer) 2127.0.0.1:6379> UNWATCH //取消被监控的键OK
- DISCARD
- 取消一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。
- 如果已使用WATCH,DISCARD将释放所有被WATCH的key。
127.0.0.1:6379> MULTIOK127.0.0.1:6379> SET counter4 10QUEUED127.0.0.1:6379> INCR counter4QUEUED127.0.0.1:6379> DISCARD //取消所有的事务OK127.0.0.1:6379> EXISTS counter4 //counter4不存在因为事务被取消(integer) 0
3. 事务中的错误处理
- 语法错误:命令不存在或命令参数个数不对。只要有一个命令有语法错误,执行EXEC命令后就会直接返回错误,语法正确的命令也不会执行。
127.0.0.1:6379> MULTI OK127.0.0.1:6379> SET test1 helloQUEUED127.0.0.1:6379> SET key (error) ERR wrong number of arguments for 'set' command127.0.0.1:6379> ERROCOMMAND key(error) ERR unknown command 'ERROCOMMAND'127.0.0.1:6379> EXEC(error) EXECABORT Transaction discarded because of previous errors.127.0.0.1:6379> EXISTS test1 //正确的命令不被执行(integer) 0
- 运行错误:运行错误指在命令执行时出现错误。如果事务里的一个命令出现运行错误,事务里其他命令依然会继续执行。
127.0.0.1:6379> MULTIOK127.0.0.1:6379> SET key 1QUEUED127.0.0.1:6379> SADD key 2 //散列类型的命令操作集合类型的键出现运行错误。QUEUED127.0.0.1:6379> SET key 3 //错误之后的命令依然会继续执。QUEUED127.0.0.1:6379> EXEC1) OK2) (error) WRONGTYPE Operation against a key holding the wrong kind of value3) OK127.0.0.1:6379> GET key //键值被错误命令之后的命令修改"3"
在关系数据库事务提供回滚(rollback)功能,但是redis不支持,因为redis在事务上保持简洁和快速。
2. 连接相关命令
- PING [message]
- 如果后面没有参数时返回PONG,否则会返回后面带的参数。
- 这个命令经常用来测试一个连接是否还是可用的,或者用来测试一个连接的延时。
127.0.0.1:6379> PINGPONG127.0.0.1:6379> PING test"test"
- ECHO message
- 返回消息。
127.0.0.1:6379> ECHO test"test"
- QUIT
- 请求服务器关闭连接。连接将会尽可能快的将未完成的客户端请求完成处理。
127.0.0.1:6379> QUIT➜ ~ 127.0.0.1:6379> EXIT➜ ~ //退出,而shutdown则是关闭服务器和客户端
- AUTH
- 为redis服务请求设置一个密码。redis可以设置在客户端执行commands请求前需要通过密码验证。通过修改配置文件的requirepass就可以设置密码。 如果密码与配置文件里面设置的密码一致,服务端就会发会一个OK的状态码,接受客户端发送其他的请求命令,否则服务端会返回一个错误码,客户端需要尝试使用新的密码来进行连接。
127.0.0.1:6379> CONFIG SET requirepass menwen //设置密码OK127.0.0.1:6379> GET test //需要验证(error) NOAUTH Authentication required.127.0.0.1:6379> AUTH errorpasswd //验证失败(error) ERR invalid password127.0.0.1:6379> AUTH menwen //验证成功OK127.0.0.1:6379> GET test //可以查看键值"this is a test"//或者在登录时指定-a选项加密码就直接能够验证,如下:➜ ~ redis-cli -a menwen127.0.0.1:6379> GET test"this is a test"
- SELECT
- 选择一个数据库,下标值从0开始,一个新连接默认连接的数据库是DB0。
127.0.0.1:6379> SELECT 1 //默认为数据库0OK127.0.0.1:6379[1]> SELECT 2 //切换到数据库1OK127.0.0.1:6379[2]> SELECT 0OK
0 0
- Redis学习笔记(八)事务 和 连接相关命令
- Redis学习笔记(八)事务 和 连接相关命令
- Redis学习笔记八、事务
- Redis学习笔记(八)——事务入门
- Redis学习笔记之八:Redis的事务
- redis连接相关命令
- Redis学习笔记 (四) 之KEY相关命令
- Redis 学习笔记(二):数据类型与相关命令
- Redis学习笔记 (四) 之KEY相关命令
- Redis 事务学习笔记
- Redis学习笔记:事务
- [Redis学习笔记]-Redis 事务
- Redis命令学习-Transaction(事务)
- Redis学习笔记2--Redis数据类型及相关命令
- Redis学习笔记2--Redis数据类型及相关命令
- Redis学习笔记2--Redis数据类型及相关命令
- Redis学习笔记2--Redis数据类型及相关命令
- Redis学习笔记(三)--事务
- thinkphp url重写规则及wamp配置
- 实现简易的PoolManager
- 一个普通买房者亲历的房价跳涨事件
- Ubuntu 14.04 LTS下安装 LNMP环境
- 关于段错误的总结
- Redis学习笔记(八)事务 和 连接相关命令
- 渔夫打渔程序
- c++基础:普通变量初始化与类内初始值初始化的不同
- Linux工作管理与系统资源查看详解
- Live Page
- trie-洛谷P2580 于是他错误的点名开始了
- 个人机器上用于hosts替换的python小脚本
- Linux -->在目录内创建文件、显示文件以及拷贝文件到一个目录都需要什么权限?
- 一个区间映射到另外一个区间算法