日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis lua

發布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis lua 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis

支持復雜數據類型? : key-value, string, list, set, hash table, sorted set,?

其他有用特性:??????????? TRANSACTION, SCRIPT


TRANSACTION

WATCH 監視key; 若在事務開始之前key發生改變, 則不進行事務。

UNWATCH 解除監視

MULTI 開始事務

redis command; 注意, 這里只能是一組redis command, 不能夾雜任何數據邏輯。。。 類似于SQL事務中的一組SQL命令

EXEC 執行事務 /? DISCARD 放棄事務


那么,類似需求如何滿足呢?? transaction是滿足不了這種需求【CAS, check and save】;且這種需求是業務邏輯中非常常見的。。。

if ( db.key > 10) {? ++db.key;? saveTOdb(db.key); }


SCRIPT(lua)

script也能保證原子性。 為了保證原子性(同時也保證主從一致), 內嵌的lua做了修改、去掉隨機函數等。

[root@mobile_dev2 src]# cat test2.lua

if redis.call("EXISTS", KEYS[1]) == 1 thenlocal cur = redis.call("GET", KEYS[1])if cur >= ARGV[1] thenreturn redis.call("INCR", KEYS[1])end return cur elsereturn 0 end

[root@mobile_dev2 src]# ./redis-cli SET XX 5
OK
[root@mobile_dev2 src]# ./redis-cli GET XX
"5"

[root@mobile_dev2 src]# ./redis-cli EVAL "$(cat test.lua)" 1 "XX" 10? # 5>=10 failed,所以輸出原值5.
"5"


[root@mobile_dev2 src]# ./redis-cli SET XX 10
OK
[root@mobile_dev2 src]# ./redis-cli GET XX
"10"

[root@mobile_dev2 src]# ./redis-cli EVAL "$(cat test.lua)" 1 "XX" 10
"11"

SCRIPT的鍵和參數

如上。 redis的lua函數,可以有兩個表。 KEYS表 是redis中存的key; ARGV表是存放傳入參數的。

???

命令?lua 腳本KEYS表長度逐個的KEYS逐個的ARGV
./redis-cliEVAL?"$(cat test2.lua)"1"XX"10
??????



其他

多個客戶端可以并發的發送數據請求, 但redis server在處理這些請求可以看做是單線程的。

redis保證SCRIPT的原子性,處理該腳本時不會有其他command或者SCRIPT在同時被處理;

因此可以保證業務邏輯的正確性。 避免各類數據庫中常見的臟數據、舊數據等問題。


如上, 同時必須保證SCRIPT的簡單高效; 否則會導致其后的處理請求統統延時。。。


./redis-cli SCRIPT LOAD "$(cat test.lua)"??? ###LOAD之后是lua腳本源碼。。。


http://www.redisdoc.com/en/latest/

http://www.redisbook.com/en/latest/index.html !!!!!!!!!!!!!!!!!!!

總結

以上是生活随笔為你收集整理的redis lua的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。