新网站推广方法,wordpress域名绑定费用,分销代理平台,国外免费建站网站搭建1、Redis事务概念
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令#xff0c;一个事务中所有命令都会被序列化。在事务执行过程#xff0c;会按照顺序串行化执行队列中的命令#xff0c;其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说一个事务中所有命令都会被序列化。在事务执行过程会按照顺序串行化执行队列中的命令其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
Redis不保证原子性Redis中单条命令是原子性执行的但事务不保证原子性且没有回滚。事务中任意命令执行失败其余的命令仍会被执行。Redis事务没有隔离级别的概念批量操作在发送 EXEC 命令前被放入队列缓存并不会被实际执行也就不存在事务内的查询要看到事务里的更新事务外查询不能看到。换句话说也就是所有命令在事务中并没有直接执行而是要在执行命令发起后才会开始执行。
Redis事务的三个阶段
开启事务Multi命令入队…执行事务Exec
2、Redis事务基本操作命令
2.1、MULTI EXEC
127.0.0.1:6379 MULTI //开启事务
OK
127.0.0.1:6379 set ke1 y1
QUEUED
127.0.0.1:6379 set ke2 y2
QUEUED
127.0.0.1:6379 get ke2
QUEUED
127.0.0.1:6379 set ke3 y3
QUEUED
127.0.0.1:6379 Exec //执行事务
1) OK
2) OK
3) y2
4) OK
2.2、Discard
127.0.0.1:6379 MULTI //开启事务
OK
127.0.0.1:6379 set ke1 y1
QUEUED
127.0.0.1:6379 set ke2 y2
QUEUED
127.0.0.1:6379 set ke3 y3
QUEUED
127.0.0.1:6379 Discard //放弃事务事务中的命令都不会执行
OK
127.0.0.1:6379 get ke1
(nil) // 因为放弃了事务查询不到ke13、Redis事务的异常
3.1、编译异常 命令有错事务中的命令都不会执行。
127.0.0.1:6379 set kk1 y1
QUEUED
127.0.0.1:6379 set kk2 y2
QUEUED
127.0.0.1:6379 get kk3 y3 //这是一个错误命令
(error) ERR wrong number of arguments for get command
127.0.0.1:6379 get kk4 y4
(error) ERR wrong number of arguments for get command
127.0.0.1:6379 set kk3 y3
QUEUED
127.0.0.1:6379 set kk4 y4
QUEUED
127.0.0.1:6379 Exec //这里因为上面错误进而整个事务列队都无法执行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379 get kk3 //因为事务执行错误所以取不到kk3的值
(nil)
3.2、运行异常 事务队列中存在逻辑性语法错误其他命令是可以执行的所以说Redis没有原子性的说法。
127.0.0.1:6379 MULTI
OK
127.0.0.1:6379 set k1 v1
QUEUED
127.0.0.1:6379 INCR k1 //“v1”怎么加一所以是错的
QUEUED //并不是命令错误运行前Redis无法识别
127.0.0.1:6379 set k2 v2
QUEUED
127.0.0.1:6379 get k2
QUEUED
127.0.0.1:6379 exec
1) OK
2) (error) ERR value is not an integer or out of range //报错了
3) OK //其他的正常执行
4) v2
4、总结
总的来说redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。值得注意的是它的非原子性和没有隔离级别的特性