一??redis 的擴展應用 lua
redis如何保證原子操作
說明:引入'lua腳本',核心解決'原子性'問題
①??redis為什么引入lua?
lua腳本本身'體積小',啟動'速度快'
②??redis引入lua的優勢
小結: 類似'自定義redis命令'
③??redis中如何使用lua
④??EVAL
說明: '內置'的 lua解釋器的版本是'5.1','避免'語法'兼容性'問題注意: 從哪個版本redis引入'對lua'的支持語法: EVAL script numkeys key [key ...] arg [arg ...]
細節: '多個lua語句'之間使用'分號'隔開
需求: 在'lua腳本'中獲取redis'相關參數'
⑤??call和pcall函數
需求'1':查看call和pcall函數'報錯'的'差異性'
需求'2':call'函數'的使用
補充:'()'是pcall函數的參數,里面的參數'類似'在redis-cli客戶端中'執行命令','逗號變成空格'
⑥??lua和redis的數據轉換
思考:'何時發生'數據類型轉換?
redis使用的數據類型
--- 獲取一個參數
local expire = ARGV[1]--- 由于lua腳本接收到參數都會'轉為String',如果要使用'數字'類型,必須'強轉'
tonumber(expire)
⑦??lua類型轉redis類型
說明:eval命令的'返回值'的類型強調:lua腳本的'return 返回值'被轉換成'redis數據結構'
備注:redis數據類型和lua數據類型并'不完全'對應
備注: 希望lua返回一個'浮點數',那么應該將它作為一個'字符串',比如'ZSCORE'命令
⑧??redis數據結構轉換為lua類型
1、lua通過'redis.call()'或者'redis.pcall()'函數執行redis命令2、者兩個函數調用'返回值'被轉換成了'lua數據結構'測試方法:首先在lua腳本中'執行redis命令',然后'type'下查看類型