一、 減小網絡開銷;屢次請求在腳本中,一次便可完成redis
二、 原子操做數組
三、 複用網絡
四、 可實現熱切換數據結構
$ redis-cli --eval /qpth/test.lua rate.limiting:127.0.0.1 , 10 3函數
詳解:測試
/qpth/test.lua 腳本路徑lua
rate.limiting:127.0.0.1 要操做的鍵,在腳本中可用key[1]獲取spa
10 3 「,」後爲參數,可用ARGV[1]和ARGV[2]獲取orm
nil 空值,全部爲負值的變量和字段都爲nil索引
boolean 包括true、false
number 整點和浮點
string 二進制,單雙引號是相同的,可包含轉義字符
table Lua腳本中惟一的數據結構,可當數組、可當字典
function 函數,可儲存在變量中,可爲函數的參數或返回值
全局變量:無須聲明,直接使用,默認值爲nil
注:redis腳本中不可以使用全局變量,以防腳本之間相互影響
聲明:
local c --聲明一個局部變量,默認值爲nil
註釋:
單行註釋 -- 註釋
--[[
這是一個多行註釋
]]
賦值
Lua支持多重賦值
local a, b = 1, 2 --a的值爲1,b的值爲2
local a, b = 1, 2, 3 -- a=1 b=2 3捨棄
local a, b c = 1, 2 -- a=1,b=2 c=nil
一、 數學操做符。 + - * / %(取模) -(取負) ^冪操做符
數學操做符的操做數會自動轉換爲數字
print(‘1’+1) --2
二、 比較操做符
== 比較值和類型是否相同
~= 與==的結果正好相反
<, >, <=, >= 小於、大於、小於等於、大於等於
tonumber(‘1’) 轉換爲數字
tostring(1) 轉換爲字符串
三、 邏輯操做符
not 取反
and a and b中,若是a是false,則返回a,不然返回b
or a or b中,若是a是true,則返回a,不然返回b
四、 鏈接操做符
‘hello’ .. ‘world’ ..用於鏈接字符串,會自動把數字轉換字符串
五、 取長度操做符(可取字符串和表的長度)
prinf(#’hello’) -- 5
注:Lua腳本中只有nil和false纔是假,其他值包括空字符串和0都被認爲是真值
while 條件表達式 do
語句塊
end
repeat
語句塊
until 條件表達式
for 變量=初值,終值,步長 do
語句塊
end
for 變量1,變量2,…,變量N in 迭代器 do
語句塊
end
定義方式:
a = {}
a[‘field’] = ‘value’
prinf(a.field) --‘value’
people = { --也能夠這樣定義
name = ‘Bob’,
age = 29
}
a = {}
a[1] = ‘Bob’
a[2] = ‘Jeff’
也能夠以下:
a = {‘Bob’,’Jeff’}
注:Lua數組的索引是從1開始的,而不是0
function(num)
函數體
end
能夠將其賦值給一個局部變量
local square = function (num)
return num*num
end
redis.call(‘set’,’foo’,’bar’)