最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis執(zhí)行l(wèi)ua腳本的實(shí)現(xiàn)

 更新時(shí)間:2024年10月29日 10:13:33   作者:lx18854869896  
本文主要介紹了redis執(zhí)行l(wèi)ua腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

redis EVAL命令可以執(zhí)行l(wèi)ua腳本,redis保證腳本執(zhí)行的原子性,腳本由嵌入式執(zhí)行引擎(Lua 5.1解釋器)執(zhí)行。

1,語法

EVAL script numkeys [key [key ...]] [arg [arg ...]]

第一個(gè)參數(shù) script 是腳本的源代碼
第二個(gè)參數(shù) numkeys 是輸入鍵名參數(shù)的數(shù)量
后面的就是 key 和 參數(shù)。

例如:

> EVAL "return 'Hello, scripting!'" 0
"Hello, scripting!"

其中 "return 'Hello, scripting!'" 就是lua腳本,后面的0就是沒有key 也沒有參數(shù),可以看到redis返回的就是腳本的返回值。

還有一種方式就是 寫一個(gè)固定的腳本傳遞參數(shù),比如

> EVAL "return ARGV[1]" 0 'hello scripting'
"hello scripting"
> EVAL "return ARGV[1]" 0 hello scripting
"hello"
> EVAL "return ARGV[3]" 0 hello scripting
(nil)

可以看到是從[1] 開始獲取,而不是[0],參數(shù)是以空格隔開,如果超出范圍返回nil。

一個(gè)使用key的例子

> EVAL "return { KEYS[1], KEYS[2], ARGV[1], ARGV[2], ARGV[3] }" 2 key1 key2 arg1 arg2 arg3
1) "key1"
2) "key2"
3) "arg1"
4) "arg2"
5) "arg3"

可以看到這個(gè)lua腳本可以使用{}返回多個(gè)值。不知道這個(gè)在java 里面返回的是個(gè)字符串還是list。

2,調(diào)用redis命令

可以通過 redis.call() 或 redis.pcall() 從Lua腳本調(diào)用Redis命令。兩者幾乎相同,除了調(diào)用 redis.call() 函數(shù)時(shí)產(chǎn)生的錯(cuò)誤會(huì)直接返回到執(zhí)行該函數(shù)的客戶端。相反,調(diào)用 redis.pcall() 函數(shù)時(shí)遇到的錯(cuò)誤會(huì)返回到腳本的執(zhí)行上下文。
例子:

> EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 foo bar
OK

簡單的調(diào)用了一個(gè)set命令,看起來沒有意義,但是多了可以保證原子性就有意義了,比如

> EVAL "local a=redis.call('SET',KEYS[1],ARGV[1]) local b=redis.call('SET',KEYS[2],ARGV[2]) return a and b" 2 k1 k2 v1 v2
OK

3,腳本緩存

> SCRIPT LOAD "return 'Immabe a cached script'"
"c664a3bf70bd1d45c4284ffebb65a6f2299bfc9f"
> EVALSHA c664a3bf70bd1d45c4284ffebb65a6f2299bfc9f 0
"Immabe a cached script"

可以看到使用script load 緩存一個(gè)腳本,返回一個(gè)ID,之后可以通過evalsha ID 來調(diào)用它。

至于lua腳本語言這個(gè)東西,摸索著寫寫就熟悉了。舉幾個(gè)例子:
獲取并刪除

local value = redis.call('get', KEYS[1]) if value then redis.call('del', KEYS[1]) return value else return nil end

解釋,定義一個(gè)變量value如果獲取到了keys[1]的值,就是刪除這個(gè)值并返回OK否則返回nil,還可以寫成

if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end

看起來跟shell腳本差不多吧。

到此這篇關(guān)于redis執(zhí)行l(wèi)ua腳本的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)redis執(zhí)行l(wèi)ua腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis分布式鎖及安全問題解決

    Redis分布式鎖及安全問題解決

    在分布式環(huán)境中,遇到搶購等訪問共享資源的場景時(shí),需要我們有一種鎖機(jī)制去解決并發(fā)問題,本文主要介紹了Redis分布式鎖及安全問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 基于Redis位圖實(shí)現(xiàn)系統(tǒng)用戶登錄統(tǒng)計(jì)

    基于Redis位圖實(shí)現(xiàn)系統(tǒng)用戶登錄統(tǒng)計(jì)

    這篇文章主要介紹了基于Redis位圖實(shí)現(xiàn)系統(tǒng)用戶登錄統(tǒng)計(jì),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Redis實(shí)現(xiàn)主從復(fù)制方式(Master&Slave)

    Redis實(shí)現(xiàn)主從復(fù)制方式(Master&Slave)

    這篇文章主要介紹了Redis實(shí)現(xiàn)主從復(fù)制方式(Master&Slave),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Redis緩存過期淘汰策略用法解讀

    Redis緩存過期淘汰策略用法解讀

    這篇文章主要介紹了Redis緩存過期淘汰策略用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • Redis初識、Redis的安裝與啟動(dòng)、Redis命令及Java客戶端詳解

    Redis初識、Redis的安裝與啟動(dòng)、Redis命令及Java客戶端詳解

    Redis作為當(dāng)前最流行的內(nèi)存數(shù)據(jù)庫之一,以其高性能、豐富的數(shù)據(jù)結(jié)構(gòu)和靈活的持久化機(jī)制,廣泛應(yīng)用于緩存、消息隊(duì)列、分布式鎖等場景,這篇文章主要介紹了Redis初識、Redis的安裝與啟動(dòng)、Redis命令及Java客戶端的相關(guān)資料,需要的朋友可以參考下
    2026-05-05
  • Redis BloomFilter實(shí)例講解

    Redis BloomFilter實(shí)例講解

    這篇文章主要介紹了Redis BloomFilter實(shí)例。BloomFilter不需要存儲(chǔ)key,節(jié)省空間,在某些對保密要求非常嚴(yán)格的場合有優(yōu)勢。想要進(jìn)一步了解BloomFilter運(yùn)用實(shí)例的小伙伴可以了解一下這篇文章
    2021-09-09
  • K8s部署Redis主從集群教程

    K8s部署Redis主從集群教程

    本文介紹了在Kubernetes環(huán)境下搭建Redis集群的詳細(xì)步驟,包括環(huán)境準(zhǔn)備、安裝NFS、創(chuàng)建PV卷、搭建Redis集群、集群初始化、主從切換測試以及開放外網(wǎng)端口等內(nèi)容
    2025-01-01
  • Redis五種數(shù)據(jù)結(jié)構(gòu)在JAVA中如何封裝使用

    Redis五種數(shù)據(jù)結(jié)構(gòu)在JAVA中如何封裝使用

    本篇博文就針對Redis的五種數(shù)據(jù)結(jié)構(gòu)以及如何在JAVA中封裝使用做一個(gè)簡單的介紹。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Redis Scan命令的基本使用方法

    Redis Scan命令的基本使用方法

    這篇文章主要給大家介紹了關(guān)于Redis中Scan命令的基本使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 16個(gè)Redis的常見使用場景

    16個(gè)Redis的常見使用場景

    這篇文章主要介紹了Redis 常見使用場景的相關(guān)資料,需要的朋友可以參考下文
    2021-08-08

最新評論

新野县| 柘城县| 凤山县| 乐山市| 安溪县| 文安县| 泰和县| 沙坪坝区| 读书| 南京市| 甘孜| 韶关市| 上饶县| 固始县| 林周县| 花垣县| 博客| 泌阳县| 江北区| 青浦区| 霍林郭勒市| 舟山市| 望谟县| 金秀| 都昌县| 山阴县| 阳曲县| 昆山市| 望奎县| 乌拉特中旗| 阳谷县| 无棣县| 微博| 闽侯县| 抚顺市| 林口县| 苍溪县| 额尔古纳市| 洛宁县| 呼玛县| 丹江口市|