服務(wù)熱線:
13342898875
Redis lua主要用途:
(1)描述界面:WOW和劍網(wǎng)三的界面都是用LUA寫的;
(2)溝通引擎:游戲圖形引擎提供了一些接口庫(kù),可以在LUA中調(diào)用;
(3)服務(wù)器端:有些游戲,例如劍網(wǎng)三,在服務(wù)器端也會(huì)大量使用LUA。
那么下面就阿里云優(yōu)惠券平臺(tái)的小編一起來(lái)看看Redis lua命令支持及限制。
Lua 腳本功能是 Reids的最大亮點(diǎn), 通過(guò)內(nèi)嵌對(duì) Lua 環(huán)境的支持, Redis 解決了長(zhǎng)久以來(lái)不能高效地處理 CAS (check-and-set)命令的缺點(diǎn), 并且可以通過(guò)組合使用多個(gè)命令, 輕松實(shí)現(xiàn)以前很難實(shí)現(xiàn)或者不能高效實(shí)現(xiàn)的模式。
阿里云Redis主從版本、集群版本、讀寫分離版本都支持Lua相關(guān)命令。用戶如果發(fā)現(xiàn)無(wú)法執(zhí)行Eval相關(guān)命令,比如報(bào)"ERR command eval not support for normal user"的時(shí)候可以再控制臺(tái)進(jìn)行一個(gè)小版本升級(jí)完成,升級(jí)過(guò)程中有閃斷和只讀影響,請(qǐng)?jiān)跇I(yè)務(wù)低峰期進(jìn)行操作。
集群版本限制
默認(rèn)阿里云Redis會(huì)對(duì)lua腳本做一定限制,目的是為了保證腳本里面的所有操作都在相同slot進(jìn)行,如果用戶能夠在代碼確保所有操作都在相同slot而又想打破Redis集群的lua限制的話可以通過(guò)控制臺(tái)修改script_check_enable參數(shù)為0,則后端不會(huì)對(duì)腳本進(jìn)行校驗(yàn)。
云Redis集群對(duì)lua腳本限制如下:
所有key都應(yīng)該由 KEYS 數(shù)組來(lái)傳遞,redis.call/pcall 中調(diào)用的redis命令,key的位置必須是KEYS array(不能使用Lua變量替換KEYS),否則直接返回錯(cuò)誤信息,"-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS arrayrn"。
所有key必須在1個(gè)slot上,否則返回錯(cuò)誤信息,"-ERR eval/evalsha command keys must be in same slotrn"。
調(diào)用必須要帶有key,否則直接返回錯(cuò)誤信息, "-ERR for redis cluster, eval/evalsha number of keys can't be negative or zerorn"。
13342898875