网站服务公司哪个好,黄骅做网站_黄骅昊信科技|黄骅网站|黄骅网站开发|黄骅微信|黄骅,建设部网站城建学院,十大最新高科技第19章 事务
19.1 事务的实现
19.1.1 事务开始
使用multi命令开启一个事务 通过修改客户端的flags字段为REDIS_MULTI
19.1.2 命令入队
当开启事务之后#xff0c;exec、discard、watch、multi命令立即执行#xff0c;而其他命令会放入一个队列中#xff0c;并返回Queue…第19章 事务
19.1 事务的实现
19.1.1 事务开始
使用multi命令开启一个事务 通过修改客户端的flags字段为REDIS_MULTI
19.1.2 命令入队
当开启事务之后exec、discard、watch、multi命令立即执行而其他命令会放入一个队列中并返回Queued
19.1.3 事务队列
客户端的mstate保存事务队列事务保存了参数与执行函数是一个先进先出的队列
19.1.4 执行事务
遍历事务列表并将结果全部返回给客户端一次性
19.2 watch命令的实现乐观锁
用以在exec之前监视数据库键当事务修改了这些键时事务exec失败
19.2.1 使用watch命令监视数据库键
被监视的键保存为一个字典值为监视这个键的客户端链表
19.2.2 监视机制的触发
当客户端监视了某个键时若键被修改则将监听该键的客户端标识改为REDIS_DIRIY_CAS来使其感知
19.2.3 判断事务是否安全
在执行exec命令时查看标识是否为REDIS_DIRIY_CAS若是则不执行任务
19.2.4 一个完整的watch事务执行过程
在一个客户端加了watch开启事务之后若其他客户端修改了watch中操作的键之后会将watch这些键的客户端标识修改为REDIS_DIRIY_CAS该客户端再执行exec命令便会被拒绝
19.3 事务的ACID属性
19.3.1 原子性
如果在入队期间发现命令错误则不会执行但是如果在执行期间发生异常则不会回滚整个事务因此不具有原子性
19.3.2 一致性
redis数据库具有一致性不会因为特殊情况出现导致redis数据库丢失这种特性
19.3.3 隔离性
redis数据库是单线程数据库则一定具有隔离性
19.3.4 持久性
只有每次执行事务前使用SAVE命令才可以保证事务具有持久性但是这种做法效率低下所以可以认为redis数据库不具有持久性