ToB企服应用市场:ToB评测及商务社交产业平台
标题:
第83篇 Redis中的事件区别
[打印本页]
作者:
农妇山泉一亩田
时间:
2024-12-10 03:02
标题:
第83篇 Redis中的事件区别
1.与关系型数据库事件的区别
Redis事件是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事件执行过程中不会被其他客户端发来的命令所打断。也就是说,Redis事件就是
一次性、顺序性、排他性
的执行一个队列中的一系列命令。
Redis事件和关系型数据库的事件不太一样,它
不包管原子性,也没有隔离级别
的概念。
事务不保证原子性,但是Redis命令本身是原子性的
复制代码
1. Redis事件没有隔离级别的概念
批量操纵在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事件里的查询要看到本事务的更新或别的事件的修改更新操纵的题目。(Mysql里的事件的语句不是放入队列,而是直接执行)
2. Redis不包管原子性
Redis中,单条命令是原子性执行的,但事件不包管原子性,且没有回滚。事件中任意命令执行失败,别的的命令仍会被执行。
2.Redis事件的运行流程
2.1 Redis事件相关命令
Multi :开始事件
Exec :执行事件中的所有命令,即提交;
discard :放弃事件;和回滚不一样,Redis事件不支持回滚。
WATCH:监视Key改变,用于实现乐观锁。如果监视的Key的值改变,事件最终会执行失败。
UNWATCH:放弃监视。
2.2 没有隔离级别
当事件开启时,事件期间的命令并没有执行,而是加入队列,只有执行EXEC命令时,事件中的命令才会按照顺序执行,也就是说事件间就不会存在数据脏读、不可重复读、幻读的题目,因此就没有隔离级别。
2.3 事件不包管原子性
如上图所示,在通过EXEC执行事件时,其中命令执行失败不会影响到其他命令的执行,因此并没有包管同时乐成和同时失败的原子操纵,尽管这样,Redis事件中也
没有提供回滚
的支持
官方来由为:包管Redis的性能
事实上如果利用Redis命令语法错误,或是将命令运用在错误的数据类型键上(如对字符串举行加减乘除等),从而导致业务数据有题目,这种情况认为是编程导致的错误,应该在开发过程中解决,避免在生产环境中发生;
由于不消支持回滚功能,Redis内部简单化,而且还比较快;
多数事件失败是由语法错误大概数据布局类型错误导致的,语法错误说明在命令入队前就举行检测的,而类型错误是在执行时检测的,Redis为提升性能而采用这种简单的事件,这是差别于关系型数据库的,特别要留意区分。Redis之以是保持这样简易的事件,完全是为了包管高并发下的核心题目——性能。
2.4 语法错误(编译器错误)
在开启事件后,A的转出操纵命令打成了
DECRBYa
,最终会导致事件提交失败,所有命令都不会执行,A、B保存原值。
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> DECRBYa A 500
(error) ERR unknown command 'DECRBYa', with args beginning with: 'A' '500'
127.0.0.1:6379(TX)> INCRBY B 500
QUEUED
127.0.0.1:6379(TX)> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> mget A B
1) "1000"
2) "100"
127.0.0.1:6379>
复制代码
2.5 类型错误(运行时错误)
在运行时检测类型错误,此时势务并没有回滚,而是跳过错误命令继续执行, 结果B值改变、A保存原值。
小结
当事件中命令语法利用错误时,最终会导致事件执行不乐成,即事件内所有命令都不执行;
当事件中命令知识逻辑错误,就比如给字符串做加减乘除操纵时,只能在执行过程中发现错误,这种事件执行中失败的命令不影响其他命令的执行。
3.利用WATCH实现乐观锁
WATCH通过监视指定Redis Key,如果没有改变,就执行乐成,如果发现对应值发生改变,事件就会执行失败,如下图:
三种方式可以取消监视:
事件执行之后,不管是否执行乐成还好是失败,都会取消对应的监视;
当监视的客户端断开毗连时,也会取消监视;
可以手动UNWATCH取消所有Key的监视;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4