注意: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塊錢,現在...