欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

例如:

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

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

還有一種方式就是 寫一個固定的腳本傳遞參數(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。

一個使用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"

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

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

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

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

簡單的調(diào)用了一個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 緩存一個腳本,返回一個ID,之后可以通過evalsha ID 來調(diào)用它。

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

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

解釋,定義一個變量value如果獲取到了keys[1]的值,就是刪除這個值并返回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腳本的實現(xiàn)的文章就介紹到這了,更多相關(guān)redis執(zhí)行l(wèi)ua腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • window環(huán)境redis通過AOF恢復(fù)數(shù)據(jù)的方法

    window環(huán)境redis通過AOF恢復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了window環(huán)境redis通過AOF恢復(fù)數(shù)據(jù)的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Redis RDB技術(shù)底層原理詳解

    Redis RDB技術(shù)底層原理詳解

    為了使Redis在重啟之后仍能保證數(shù)據(jù)不丟失,需要將數(shù)據(jù)從內(nèi)存中以某種形式同步到硬盤中,這一過程就是持久化,本文重點給大家介紹Redis RDB技術(shù)底層原理實現(xiàn)方法,一起看看吧
    2021-09-09
  • Linux Redis 的安裝步驟詳解

    Linux Redis 的安裝步驟詳解

    這篇文章主要介紹了 Linux Redis 的安裝步驟詳解的相關(guān)資料,希望大家通過本文能掌握如何安裝Redis,需要的朋友可以參考下
    2017-08-08
  • Redis內(nèi)存碎片率調(diào)優(yōu)處理方式

    Redis內(nèi)存碎片率調(diào)優(yōu)處理方式

    Redis集群因內(nèi)存碎片率超過1.5觸發(fā)告警,分析發(fā)現(xiàn)內(nèi)因與外因?qū)е聝?nèi)存碎片,內(nèi)因為操作系統(tǒng)內(nèi)存分配機制,外因為Redis操作特性,使用Redis內(nèi)置內(nèi)存碎片清理機制可有效降低碎片率,但需注意可能影響性能,建議使用MEMORY命令診斷內(nèi)存使用情況,合理配置參數(shù)以優(yōu)化性能
    2024-09-09
  • docker安裝redis的完整步驟詳解

    docker安裝redis的完整步驟詳解

    這篇文章主要介紹了docker安裝redis的完整步驟,包括拉取鏡像、設(shè)置配置文件、編寫docker-compose.yml文件啟動Redis以及測試Redis連接,文中通過圖文及代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • 深入探究RedisJSON模塊的工作原理以及使用操作

    深入探究RedisJSON模塊的工作原理以及使用操作

    Redis推出了RedisJSON模塊,它允許開發(fā)者在Redis數(shù)據(jù)庫中直接存儲、查詢和處理JSON數(shù)據(jù),本文將詳細介紹RedisJSON的工作原理、關(guān)鍵操作、性能優(yōu)勢以及使用場景,需要的朋友可以參考下
    2024-05-05
  • Redis shake實現(xiàn)可視化監(jiān)控的示例代碼

    Redis shake實現(xiàn)可視化監(jiān)控的示例代碼

    Redis可視化監(jiān)控是通過監(jiān)控Redis服務(wù)器的各項指標和狀態(tài),并將其以可視化的方式展示給用戶,本文給大家介紹了Redis shake實現(xiàn)可視化監(jiān)控,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Redis 如何批量設(shè)置過期時間(PIPLINE的使用)

    Redis 如何批量設(shè)置過期時間(PIPLINE的使用)

    有時候我們并不希望redis的key一直存在。例如緩存,驗證碼等數(shù)據(jù),我們希望它們能在一定時間內(nèi)自動的被銷毀。本文就詳細的介紹一下Redis 如何批量設(shè)置過期時間,感興趣的可以了解一下
    2021-11-11
  • 從原理到實踐分析?Redis?分布式鎖的多種實現(xiàn)方案

    從原理到實踐分析?Redis?分布式鎖的多種實現(xiàn)方案

    在分布式系統(tǒng)中,為了保證多個進程或線程之間的數(shù)據(jù)一致性和正確性,需要使用鎖來實現(xiàn)互斥訪問共享資源,然而,使用本地鎖在分布式系統(tǒng)中存在問題,這篇文章主要介紹了從原理到實踐分析?Redis?分布式鎖的多種實現(xiàn)方案,需要的朋友可以參考下
    2024-07-07
  • Redis協(xié)議具體用法詳解

    Redis協(xié)議具體用法詳解

    在本篇文章中小編給大家整理了關(guān)于Redis協(xié)議具體用法以及相關(guān)內(nèi)容知識點,需要的朋友們學(xué)習(xí)下。
    2019-06-06

最新評論