watch 用於在進行事務操作的最後一步也就是在執行exec 之前對某個key進行監視
如果這個被監視的key被改動,那麼事務就被取消,否則事務正常執行.
一般在multi 命令前就用watch命令對某個key進行監控.如果想讓key取消被監控,可以用unwatch命令
被監視的key會被儲存在兩個地方
乙個是:
typedef struct redisclient redisclient;
所有被監視的key 都儲存在redisclient中的list * watched_keys這個結構體中
typedef struct watchedkey watchedkey;
另乙個是
typedef struct redisdb redisdb;
watch命令的實現如下:
void watchcommand(redisclient *c)
// 前面我們之前被監視的key是儲存在redisclient中的list * watched_keys這個結構體中
for (j = 1; j < c->argc; j++)
watchforkey(c,c->argv[j]);
addreply(c,shared.ok);
}void watchforkey(redisclient *c, robj *key)
clients = dictfetchvalue(c->db->watched_keys,key);
//如果key對應的client 還不在的話,則通過listcreat新建乙個clients指標,並
// 把key和client 作為dict 新增到watched_keys中
//clients 為null,說明這個client是第一次新增被監視的key
if (!clients)
// 將客戶端新增到鍊錶的末尾
listaddnodetail(clients,c);
// 將新的watchedkey 田間道wacthe_keys鍊錶的結尾
wk = zmalloc(sizeof(*wk));
wk->key = key;
wk->db = c->db;
// key的引用計數加1
incrrefcount(key);
listaddnodetail(c->watched_keys,wk);
}僅僅是這個robj對應對應的refcount 即引用計數加1
void incrrefcount(robj *o)
與之相反的unwatch命令實現如下:
void unwatchallkeys(redisclient *c)
}
multi事務 watch命令
本文章是個人筆記,由學習multi okredis sadd user 1 following 2 queued redis sadd user 2 followers 1 queued redis exec 1 integer 1 2 integer 1 上面的 演示了事務的使用方式。首先使用mu...
vue中watch的用法
在平時工作中經常會遇到需要對某些資料進行監聽,根據資料的變化來執行某些操作,這個時候我們可以用到vue中的 watch,下面我們一起來看一下watch的具體用法 new vue watch newname和oldname分別對應name的新值和舊值,在函式中,可以對新舊值進行判斷來執行指定操作 使用...
vue文件中的watch
這裡是messagespan h4 這裡是obj.namespan h4 這裡是obj.agespan h4 div let a newvue computed watch 與上面的寫法效果一致 message immedaite false,deep false obj.name function...