数据库ACID,redis实现方式
开启redis事务,使用multi+exec命令。中间的操作命令会存入FIFO队列,exec命令会依次执行这些命令。通过watch命令可以监控某个key是否被修改,如果某个key被修改,则监控这个key的客户端REDIS_DIRTY_CAS标识会被打开。而当这个客户端使用exec提交事务时,首先会校验REDIS_DIRTY_CAS标识是否被打开,如果被打开则当前事务不会提交,否则提交。
WATCH 命令是一个乐观锁(optimistic locking),它可以在 EXEC 命令执行之前,监视任意数量的数据库键,并在 EXEC 命令执行时,检查被监视的键是否至少有一个已经被修改过了,如果是的话,服务器将拒绝执行事务,并向客户端返回代表事务执行失败的空回复。
每个 Redis 数据都保存着一个 watched_keys 字典,字典的键就是被 WATCH 命令监视的数据库键,而字典的值则是一个链表,链表中记录了所有监视相应数据库键的客户端
取消数据库键的监视
验证:
“一致”指的是数据符合数据库本身的定义和要求,没有包含非法或者无效的错误数据。
入队错误
执行错误
redis宕机
appendfsync
选项的值为 always
时,程序总会在执行命令之后调用同步(sync)函数,将命令数据真正保存到硬盘里,因此这种配置下的事务是具有持久性的。原文:https://www.cnblogs.com/fjrgg/p/14721375.html