Redis学习笔记之Redis事务

2019-08-12  本文已影响0人  Moine0828

Redis事务四大命令:EXEC,MULTI,WATCH,DISCARD

当redis处于事务开启的状态时,获取的客户端命令时会先判断是否是上面四大命令中的一个,如果不是,redis会将命令放置到一个事务队列中,而不是立即执行,然后返回给客户端QUEUED。如果是,那么命令会被立即执行。如果接收的是EXEC命令,redis会将事务队列中的所有命令提交。事务队列是一个FIFO的队列,是一个multiCmd结构组成的数组。

WATCH命令是一个乐观锁,被监控的key保存在一个watched_keys字典中。字典的键是被监控的键值,而字典的值是一个链表,记录着监控这个key的所有客户端。对于所有数据库修改命令,例如SET,LPUSH,DEL,SADD等等,redis执行之后都会对watched_keys字典进行检查,如果刚刚修改的键是被监控的,那么redis会将客户端的REDIS_DIRTY_CAS标志打开,表示事务安全性已经被破坏。当客户端发来EXEC命令时,服务端会先检查REDIS_DIRTY_CAS这个标志,如果不安全,则服务端拒绝执行这个事务的提交命令。

事务的ACID
上一篇 下一篇

猜你喜欢

热点阅读