LUA批量原子性操作redis

2021-10-23 06:20:59 字數 1083 閱讀 8453

注意:lua指令碼的下標是從1開始的

//批量執行redis指令碼拼接

stringbuffer script = new stringbuffer();

for (int i = 1; i <= rediskeyarr.length; i++)

defaultredisscript redisscript = new defaultredisscript();

redisscript.setscripttext(script.tostring());

// 批量執行

stringredistemplate.execute(redisscript, keylist);

/**

* lua redis 指令碼回滾

* @param redismap

*/public void redisluarollback(mapredismap)

//從map中獲取redis 中需要回滾的key

listkeylist = new arraylist<>(redismap.keyset());

//list轉陣列為了傳多個key

string rediskeyarr = keylist.toarray(new string[keylist.size()]);

//回滾指令碼拼接

stringbuffer script = new stringbuffer();

for (int i = 1; i <= rediskeyarr.length; i++)

log.info("lua指令碼批量回滾key:{},結果={}", keylist, jediscluster.eval(script.tostring(), rediskeyarr.length, rediskeyarr));

}

Lua指令碼實現Redis組合操作的原子性

我們一定會在專案中遇到過這種場景 一段 中,redis進行多次取值存值,雖然單個redis操作具有原子性,但是redis組合操作就不能保證整體的原子性了,這時候我們可以通過lua指令碼來實現redis組合操作的原子性。lua指令碼能夠保證redis所有操作的原子性,但是需要注意,lua指令碼中的命令...

lua指令碼保證Redis多條命令原子性

redis能執行lua指令碼,一段lua指令碼可以作為乙個整體,這樣將多條redis命令寫入lua,即可以實現事務的原子性,下面演示了jedis和redistemplate是如何呼叫lua指令碼的 完成的功能是 set my key1 my value1 ex 15 nx,lua指令碼很神奇不需要加...

原子性,原子操作

舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在...