Redis 使用 Lua 作為腳本語言。以 CentOS 7.0 + Redis 3.0.2 為例:
# 1. 下載編譯 Lua 5.3.0
curl -R -O https://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux
# 2. 缺少 readline 庫時
yum -y install gcc make ncurses-devel readline-devel
make linux
make install
# 3. 驗證
lua


first.lua
local msg = 'Hello, World!'
return msg
兩種執行方式:
redis-cli --eval /root/lua/first.lua(推薦)redis-cli EVAL "$(cat first.lua)" 0(0 表示無 KEY 參數)兩者輸出相同:"Hello, World!"
second.lua
-- KEYS[1] = 計數器鍵 (links:counter)
-- KEYS[2] = Hash 表鍵 (links:urls)
-- ARGV[1] = 原始長網址
local link_id = redis.call("INCR", KEYS[1])
redis.call("HSET", KEYS[2], link_id, ARGV[1])
return link_id
執行:
# 方式一
redis-cli --eval /root/lua/second.lua links:counter links:urls , https://www.bnersoft.com/
# 方式二
redis-cli EVAL "$(cat second.lua)" 2 links:counter links:urls https://www.bnersoft.com/
驗證結果:
> KEYS *
1) "links:counter"
2) "links:urls"
> GET links:counter
"1"
> HGETALL links:urls
1) "1"
2) "https://www.bnersoft.com/"

KEYS 數組:腳本中用 KEYS[1]、KEYS[2]... 訪問,傳入時放在 --eval 後、逗號前。ARGV 數組:腳本中用 ARGV[1]... 訪問,傳入時放在逗號後。redis.call():在腳本中原子性執行 Redis 命令,保證腳本整體原子性。