ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
下面是一个`Redis`服务的数据结构定义: ~~~c typedef struct redisDb { dict *watched_keys; //被 watch 命令监视的 key int id; //Database ID //...省略了其他属性 } redisDb; ~~~ 可以看到,`redisDb`中的`watched_keys`存储了一个字典,这个字典当中的`key`存的就是被监视的`key`,然后字典的值存的就是客户端`id`。每个客户端还有一个标记属性`CLIENT_DIRTY_CAS`,一旦我们执行了一些如`set`、`sadd`等能修改`key`值对应`value`的命令,那么客户端的`CLIENT_DIRTY_CAS`标记属性将会被修改,后面执行事务提交命令`exec`时发现客户端的标记属性被修改过(乐观锁的体现),则会拒绝执行事务。