Redis內(nèi)置了Lua解釋器,可以運(yùn)行一段lua腳本,完成相對復(fù)雜的操作。
實(shí)現(xiàn)一個簡單的操作:創(chuàng)建一個hash類型的key,并設(shè)置過期時間,lua代碼如下
local values = {};
for i,v in ipairs(KEYS) do
values[#values+1] = redis.pcall('hmset', v, ARGV[2], ARGV[3], ARGV[4], ARGV[5]);
redis.pcall('expire', v, ARGV[1]);
end
return {KEYS,values};
執(zhí)行腳本
$ redis-cli --eval ./scripts/hash.lua hash_1 , 100 name maria age 22
1) 1) "hash_1"
2) 1) OK
查看key
127.0.0.1:6379> hgetall hash_1
1) "name"
2) "maria"
3) "age"
4) "22"
127.0.0.1:6379> ttl hash_1
(integer) 88
封裝統(tǒng)一API即使用redis內(nèi)置的lua解釋器實(shí)現(xiàn),支持string, hash, list, set, zset 5種數(shù)據(jù)類型。
目前已封裝的api如下:
- create:創(chuàng)建key
- createNotExists: 在key不存在時創(chuàng)建,否則不創(chuàng)建
- createExists: 在key存在時創(chuàng)建,否則不創(chuàng)建
- update: 更新key值,可更改ttl,或保持原ttl
- updateBatch: 批量更新
- insert:插入值,例如向列表或集合插入元素
- insertNotExists:類似createNotExists
- insertExists:類型createExists
- get:獲取key值(多個)
- getAndSet: 獲取key并設(shè)置新的值
- find:獲取key值(單個)
- findBatch:批量獲取
- destroy:銷毀key
- destroyBatch:批量銷毀
- delete:刪除key(多個)
更多內(nèi)容見 github