lua pcall 返回值_Redis和Lua整合
Redis整合Lua
Redis的消息模式
Redis實現分布式鎖
常見的緩存問題
減少網絡開銷,在Lua腳本中可以把多個命令放在同一個腳本中運行。
原子操作,redis會將整個腳本作為一個整體執行,中間不會被其他命令插入。換句話說,編寫腳本的過程中無需擔心會出現競態條件。
復用性,客戶端發送的腳本會永遠存儲在redis中,這意味著其他客戶端可以復用這一腳本來完成同樣的邏輯。
Redis整合Lua腳本
通過執行redis的eval命令,可以運行一段lua腳本。EVAL script numkeys key [key ...] arg [arg ...]命令的具體說明如下:script參數:是一段Lua腳本程序,它會被運行在Redis服務器上下文中,這段腳本不必(也不應該)定義為一個Lua函數。
numkeys參數:用于指定鍵名參數的個數。
key [key ...]參數:從EVAL的第三個參數開始算起,使用了numkeys個鍵(key),表示在腳本中所用到的那些Redis鍵(key),這些鍵名參數可以在Lua中通過全局變量KEYS數組,用1為基址的形 式訪問( KEYS[1], KEYS[2],以此類推)。
arg [arg ...]參數:可以在Lua中通過全局變量ARGV數組訪問,訪問的形式和KEYS變量類似( ARGV[1] 、 ARGV[2] ,諸如此類)。
Lua腳本中調用Redis命令
我們可以在Lua腳本中調用Redis命令:redis.call()
redis.pcall()
SCRIPT命令
另外一方面在Redis中有一些管理Lua腳本的命令:SCRIPT FLUSH:清除所有腳本緩存
SCRIPT EXISTS:根據給定的腳本校驗和,檢查指定的腳本是否存在于腳本緩存
SCRIPT LOAD:將一個腳本裝入腳本緩存,返回SHA1摘要,但并不立即運行它
SCRIPT KILL:殺死當前正在運行的腳本
?
EVALSHA
EVAL 命令要求你在每次執行腳本的時候都發送一次腳本主體(script body)。Redis 有一個內部的緩存機制,因此它不會每次都重新編譯腳本,不過在很多場合,付出無謂的帶寬來傳送腳本主體并不是最佳選擇。為了減少帶寬的消耗, Redis 實現了 EVALSHA 命令,它的作用和 EVAL 一樣,都用于對腳本求值,但它接受的第一個參數不是腳本,而是腳本的 SHA1 校驗和(sum)。下面我們舉兩個使用Lua腳本的例子:return redis.call('set', KEYS[1], ARGV[1])上面是一個set腳本,在redis中我們可以這樣使用:redis-cli -h 192.168.24.131 -p 6380 --eval test.lua n3, 'eleven'總結一下利用Redis整合Lua,主要是為了性能以及事務的原子性。因為redis幫我們提供的事務功能太差。總結
以上是生活随笔為你收集整理的lua pcall 返回值_Redis和Lua整合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: floodlight ovs 更改拓扑_
- 下一篇: java中删除最大的数,【Java练习】