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

redis通過(guò)lua腳本,獲取滿足key pattern的所有值方式

 更新時(shí)間:2021年03月25日 14:43:51   作者:舟行于無(wú)涯之海  
這篇文章主要介紹了redis通過(guò)lua腳本,獲取滿足key pattern的所有值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

我們知道,redis提供了keys命令去獲取所有滿足格式的key,如我們鍵入命令

keys "user*"

將得到所有以u(píng)ser開(kāi)頭的key

然后執(zhí)行 mget命令可以獲取多個(gè)key的值,如

但如果滿足條件的key過(guò)多,我們要將所有key拿到,再用mget去拿到所有值則為相對(duì)比較麻煩,因此可以借助xargs

redis-cli keys "user*"|xargs redis-cli mget獲取到所有key的值

也可以執(zhí)行l(wèi)ua腳本local keys = redis.call('keys', KEYS[1]); return redis.call('mget',unpack(keys));

如果需要同時(shí)輸出key和value,可以調(diào)整lua腳本

eval "local keys = redis.call('keys', KEYS[1]); local values = redis.call('mget',unpack(keys)); local keyValuePairs = {};for i = 1, #keys do keyValuePairs[i] = keys[i]..':'..values[i] end; return keyValuePairs;" 1 "user*",

最后輸出結(jié)果如下

這里簡(jiǎn)單普及下redis eval命令 和lua腳本基本用法

eval命令的格式如下

eval script numkeys key1 key2 arg1 arg2

scriptlua腳本,字符串,首尾引號(hào)必須,腳本中的雙引號(hào)全改為單引號(hào)即可

numkeyskey的數(shù)量,key和arg都是傳入lua腳本的參數(shù),下面提到

key1,key2指具體key值,上面的numkeys有多少個(gè),這里的key就有多少個(gè)

arg1,arg2key結(jié)束后就是arg。

如 eval "return 'hello'" 3 1 2 3 4 5 6 7中第一個(gè)3為key的數(shù)量,即后面的123為key,4567為arg。

在腳本中可以用KEYS[2]表式第二個(gè)參數(shù),ARGV[2]表示第2個(gè)參數(shù)值,比如我們修改上面return 'hello'的值

eval "return KEYS[3]" 3 1 2 3 4 5 6 7將返回第3個(gè)參數(shù),即3

eval "return ARGV[2]" 3 1 2 3 4 5 6 7將返回第二個(gè)值,即5

在lua腳本中使用redis.call('get',...)可調(diào)用redis命令,我們將上面的lua腳本格式化,解釋如下 :

lua中用–表示注釋

--local為局部變量,沒(méi)有l(wèi)ocal關(guān)鍵字,則視為全局變量
--redis.call是調(diào)用redis命令,下面使用了keys命令
--KEYS[1]為第1個(gè)參數(shù),lua數(shù)組下標(biāo)從1開(kāi)始
local keys = redis.call('keys', KEYS[1]);
--下面通過(guò)mget獲取所有key的值,call后面是可變長(zhǎng)參數(shù),unpack是將數(shù)組變成可變長(zhǎng)參數(shù)
local values = redis.call('mget', unpack(keys));
--定義返回結(jié)果
local keyValuePairs = {};
--#keys是獲取keys的長(zhǎng)度,這里作了個(gè)for循環(huán),將key與value對(duì)應(yīng)起來(lái)
--lua中字符串拼接是用..
for i = 1, #keys do
 keyValuePairs[i] = keys[i] .. '\t' .. values[i]
end;
--返回結(jié)果
return keyValuePairs;

補(bǔ)充:redis String鍵值對(duì)常用命令整理及Lua腳本

一、保存

1、set key value [EX seconds]|[PX milliseconds] [NX|XX]

 a. set name myname //直接設(shè)置鍵值對(duì),鍵已存在會(huì)刷新值
 b. set name myname EX 10 //在a的基礎(chǔ)上鍵值對(duì)10秒過(guò)期
 c. set name myname px 10000 //在a的基礎(chǔ)上鍵值對(duì)10000毫秒過(guò)期
 d. set name myname NX //只有鍵不存在時(shí)才能插入
 e. set name myname XX //只有鍵存在時(shí)才能插入
 f. set name myname EX 10 NX //鍵值對(duì)不存在時(shí)才能插入并且10秒過(guò)期

2、在1的基礎(chǔ)上衍生

 a. setnx name myname //等同于1.d
 b. setex name 10 myname //等于1.b

二、其他

get key //得到指定的值
exists key //判斷key是否存在,存在返回1,不存在返回0
expire key 10 // 設(shè)置key-value過(guò)期時(shí)間,成功返回1,不存在返回0,
del key //刪除指定key-value

三、Lua腳本

格式:eval script numkeys key [key...] arg [arg...]
 eval:告訴redis執(zhí)行后面的lua腳本
 script:lua腳本內(nèi)容
 numkeys:后續(xù)參數(shù)key的個(gè)數(shù)
 key [key...]:key
 arg [arg...]:值

注:num不能為空,且以key為準(zhǔn)

1:set key value

 a.eval "return redis.call('set','name','www')" 0
 b.eval "return redis.call('set',KEYS[1],'www')" 1 name
 c.eval "return redis.call('set','name',ARGV[1])" 0 www
 d.eval "return redis.call('set',KEYS[1],ARGV[1])" 1 name www

2:get key 類似set

3:稍微復(fù)雜點(diǎn)的語(yǔ)句

 eval "if redis.call('get',KEYS[1])==ARGV[1] then return 0 else return 1 end" 1 name www
 then end在這個(gè)語(yǔ)句中都是必須的,如果直接用
 eval "return redis.call('get',KEYS[1])==ARGV[1]" 1 name www
 返回值是nil

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流的步驟

    基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流的步驟

    滑動(dòng)窗口算法是一種基于時(shí)間窗口的限流算法,通過(guò)動(dòng)態(tài)地滑動(dòng)窗口,可以動(dòng)態(tài)調(diào)整限流的速率,Redis有序集合可以用來(lái)實(shí)現(xiàn)滑動(dòng)窗口限流,本文介紹基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流,感興趣的朋友一起看看吧
    2024-12-12
  • Redis 過(guò)期鍵刪除策略的實(shí)現(xiàn)示例

    Redis 過(guò)期鍵刪除策略的實(shí)現(xiàn)示例

    Redis的過(guò)期數(shù)據(jù)刪除策略主要有三種,包括定時(shí)刪除、惰性刪除和定期刪除,本文主要介紹了Redis 過(guò)期鍵刪除策略的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 使用Grafana監(jiān)控Redis的操作方法

    使用Grafana監(jiān)控Redis的操作方法

    這篇文章主要介紹了使用Grafana監(jiān)控Redis,號(hào)稱下一代可視化監(jiān)控系統(tǒng),結(jié)合SpringBoot使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 基于Redis6.2.6版本部署Redis?Cluster集群的問(wèn)題

    基于Redis6.2.6版本部署Redis?Cluster集群的問(wèn)題

    這篇文章主要介紹了基于Redis6.2.6版本部署Redis?Cluster集群,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Redis動(dòng)態(tài)字符串SDS的實(shí)現(xiàn)

    Redis動(dòng)態(tài)字符串SDS的實(shí)現(xiàn)

    SDS在Redis中是實(shí)現(xiàn)字符串對(duì)象的工具,本文主要介紹了Redis動(dòng)態(tài)字符串SDS的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Redis緩存雪崩的物種解決方案

    Redis緩存雪崩的物種解決方案

    在高并發(fā)系統(tǒng)中,Redis作為核心緩存組件,通常扮演著重要的"守門(mén)員"角色,當(dāng)大量緩存同時(shí)失效時(shí),會(huì)導(dǎo)致請(qǐng)求如洪水般直接涌向數(shù)據(jù)庫(kù),造成數(shù)據(jù)庫(kù)瞬間壓力劇增甚至宕機(jī),這種現(xiàn)象被形象地稱為"緩存雪崩",本文給大家介紹了Redis緩存雪崩的5種應(yīng)對(duì)措施,需要的朋友可以參考下
    2025-04-04
  • RedisTemplate的使用與注意事項(xiàng)小結(jié)

    RedisTemplate的使用與注意事項(xiàng)小結(jié)

    本文詳細(xì)介紹了RedisTemplate的用途和使用方法,RedisTemplate是Spring提供的一個(gè)工具類,用于操作Redis數(shù)據(jù)庫(kù),其API提供了豐富的方法來(lái)實(shí)現(xiàn)對(duì)Redis各種操作,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以來(lái)了解一下
    2024-10-10
  • 記錄一次并發(fā)情況下的redis導(dǎo)致服務(wù)假死的問(wèn)題解決

    記錄一次并發(fā)情況下的redis導(dǎo)致服務(wù)假死的問(wèn)題解決

    由于Redis需要依賴于操作系統(tǒng)環(huán)境,如果系統(tǒng)資源受限,比如過(guò)量的進(jìn)程在擠占系統(tǒng)資源、系統(tǒng)死鎖等情況,本文主要介紹了記錄一次并發(fā)情況下的redis導(dǎo)致服務(wù)假死的問(wèn)題解決,感興趣的可以了解一下
    2023-09-09
  • 推薦一款神仙顏值的 Redis 客戶端工具(速收藏)

    推薦一款神仙顏值的 Redis 客戶端工具(速收藏)

    這篇文章主要給大家推薦一款神仙顏值的 Redis 客戶端工具(速收藏),非常好用的redis桌面管理工具,可以運(yùn)行于Linux、Windows、Mac三大平臺(tái),并且當(dāng)加載大數(shù)量的key不會(huì)crash,感興趣的朋友跟隨小編一起看看吧
    2020-12-12
  • Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決

    Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決

    本文主要介紹了Redis腦裂導(dǎo)致數(shù)據(jù)丟失的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論

永兴县| 阳山县| 双流县| 静海县| 上蔡县| 南岸区| 封开县| 尼玛县| 扎囊县| 沿河| 巍山| 安塞县| 盈江县| 叶城县| 吉木萨尔县| 林州市| 阿拉善左旗| 靖宇县| 德化县| 大安市| 临夏县| 广宁县| 东丰县| 黄平县| 博兴县| 蚌埠市| 岚皋县| 林口县| 麦盖提县| 砚山县| 惠来县| 交口县| 祁阳县| 彰化县| 启东市| 犍为县| 嘉善县| 麻栗坡县| 饶阳县| 罗源县| 敦煌市|