redis中的watch命令

2021-08-15 15:01:21 字數 1362 閱讀 6244

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...