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

springboot使用redisTemplate操作lua腳本

 更新時(shí)間:2022年08月17日 14:33:24   作者:禿了也弱了。  
本文主要介紹了springboot使用redisTemplate操作lua腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

寫(xiě)在前面

操作redis使用Lua腳本有諸多好處

  • 減少網(wǎng)絡(luò)開(kāi)銷(xiāo):可以將多個(gè)請(qǐng)求通過(guò)腳本的形式一次發(fā)送,減少網(wǎng)絡(luò)時(shí)延和請(qǐng)求次數(shù)。
  • 原子性的操作:Redis會(huì)將整個(gè)腳本作為一個(gè)整體執(zhí)行,中間不會(huì)被其他命令插入。因此在編寫(xiě)腳本的過(guò)程中無(wú)需擔(dān)心會(huì)出現(xiàn)競(jìng)態(tài)條件,無(wú)需使用事務(wù)。
  • 代碼復(fù)用:客戶(hù)端發(fā)送的腳步會(huì)永久存在redis中,這樣,其他客戶(hù)端可以復(fù)用這一腳本來(lái)完成相同的邏輯。
  • 速度快:見(jiàn) 與其它語(yǔ)言的性能比較, 還有一個(gè) JIT編譯器可以顯著地提高多數(shù)任務(wù)的性能; 對(duì)于那些仍然對(duì)性能不滿(mǎn)意的人, 可以把關(guān)鍵部分使用C實(shí)現(xiàn), 然后與其集成, 這樣還可以享受其它方面的好處。**
  • 可以移植:只要是有ANSI C 編譯器的平臺(tái)都可以編譯,你可以看到它可以在幾乎所有的平臺(tái)上運(yùn)行:從 Windows 到Linux,同樣Mac平臺(tái)也沒(méi)問(wèn)題, 再到移動(dòng)平臺(tái)、游戲主機(jī),甚至瀏覽器也可以完美使用 (翻譯成JavaScript)。
  • 源碼小巧:20000行C代碼,可以編譯進(jìn)182K的可執(zhí)行文件,加載快,運(yùn)行快。

使用lua

@Test
public void redisLuaTest(){

?? ?String script1 = "if redis.call('setnx', KEYS[1], ARGV[1]) == 1 then redis.call('set', KEYS[2], ARGV[2]) return 1 else return 0 end";
?? ?Long result1 = (Long)redisTemplate.execute(
?? ??? ??? ?new DefaultRedisScript<Long>(script1, Long.class),
?? ??? ??? ?Arrays.asList("key1", "key2"),
?? ??? ??? ?"value1", "value2"
?? ?);
?? ?System.out.println(result1); // 1

?? ?// 如果key1==value1,則刪除key1,返回刪除的狀態(tài),否則返回0
?? ?String script2 = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
?? ?Long result2 = (Long)redisTemplate.execute(
?? ??? ??? ?new DefaultRedisScript<Long>(script2, Long.class),
?? ??? ??? ?Arrays.asList("key1"),
?? ??? ??? ?"value1"
?? ?);
?? ?System.out.println(result2); // 1
}

解釋

/**
第一個(gè)參數(shù)使用默認(rèn)的DefaultRedisScript即可;
List<K> keys是key的集合
Object... args是val的集合
*/
@Override
public <T> T execute(RedisScript<T> script, List<K> keys, Object... args) {
    return scriptExecutor.execute(script, keys, args);
}

key的集合,在lua中可以使用KEYS[1]、KEYS[2]……獲取,注意KEYS必須大寫(xiě)不能拼錯(cuò);
val的集合,在lua中可以使用ARGV[1]、ARGV[2]……獲取,注意ARGV必須大寫(xiě)不能拼錯(cuò)。

說(shuō)白了,使用redisTemplate操作lua,也就是傳key的集合和val的集合,這一串lua腳本可以保證其原子性的。

具體lua語(yǔ)法其實(shí)也很簡(jiǎn)單,基本掌握了if else、循環(huán)、賦值語(yǔ)句,就能應(yīng)付大部分操作redis的命令。

lua中的redis.call命令就是操作redis的命令,第一個(gè)參數(shù)就是redis的原始命令,后面的參數(shù)就是redis命令的參數(shù),使用起來(lái)也非常方便。

到此這篇關(guān)于springboot使用redisTemplate操作lua腳本的文章就介紹到這了,更多相關(guān)springboot redisTemplate操作lua內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Eclipse安裝Spring boot插件的步驟(圖文)

    在Eclipse安裝Spring boot插件的步驟(圖文)

    這篇文章主要介紹了在Eclipse安裝Spring boot插件的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 簡(jiǎn)單了解Mybatis如何實(shí)現(xiàn)SQL防注入

    簡(jiǎn)單了解Mybatis如何實(shí)現(xiàn)SQL防注入

    這篇文章主要介紹了簡(jiǎn)單了解Mybatis如何實(shí)現(xiàn)SQL防注入,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 如何使用BufferedReader循環(huán)讀文件

    如何使用BufferedReader循環(huán)讀文件

    這篇文章主要介紹了如何使用BufferedReader循環(huán)讀文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用

    Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用

    這篇文章主要介紹了Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用 的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 如何使用Java生成PDF文檔詳解

    如何使用Java生成PDF文檔詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Java生成PDF文檔的相關(guān)資料,PDF是可移植文檔格式,是一種電子文件格式,具有許多其他電子文檔格式無(wú)法相比的優(yōu)點(diǎn),需要的朋友可以參考下
    2023-07-07
  • spring boot Rabbit高級(jí)教程(最新推薦)

    spring boot Rabbit高級(jí)教程(最新推薦)

    RabbitMQ的消息過(guò)期是基于追溯方式來(lái)實(shí)現(xiàn)的,也就是說(shuō)當(dāng)一個(gè)消息的TTL到期以后不一定會(huì)被移除或投遞到死信交換機(jī),而是在消息恰好處于隊(duì)首時(shí)才會(huì)被處理,本篇文章給大家介紹spring boot Rabbit高級(jí)教程,感興趣的朋友一起看看吧
    2023-10-10
  • Java版水果管理系統(tǒng)源碼

    Java版水果管理系統(tǒng)源碼

    這篇文章主要為大家詳細(xì)介紹了Java版水果管理系統(tǒng)源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java迭代器中刪除元素的實(shí)例操作詳解

    java迭代器中刪除元素的實(shí)例操作詳解

    在本篇內(nèi)容里小編給各位分享了一篇關(guān)于java迭代器中刪除元素的實(shí)例操作詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • Spring Boot 自動(dòng)配置之條件注解淺析

    Spring Boot 自動(dòng)配置之條件注解淺析

    這篇文章主要介紹了Spring Boot 自動(dòng)配置之條件注解淺析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • RabbitMq中channel接口的幾種常用參數(shù)詳解

    RabbitMq中channel接口的幾種常用參數(shù)詳解

    這篇文章主要介紹了RabbitMq中channel接口的幾種常用參數(shù)詳解,RabbitMQ 不會(huì)為未確認(rèn)的消息設(shè)置過(guò)期時(shí)間,它判斷此消息是否需要重新投遞給消費(fèi)者的唯一依據(jù)是消費(fèi)該消息的消費(fèi)者連接是否己經(jīng)斷開(kāi),需要的朋友可以參考下
    2023-08-08

最新評(píng)論

济源市| 岳西县| 毕节市| 武威市| 玉溪市| 濮阳县| 通山县| 塔河县| 康平县| 鸡西市| 康平县| 呼伦贝尔市| 会宁县| 延寿县| 高清| 延吉市| 绵阳市| 随州市| 长海县| 赫章县| 吉林市| 清原| 衡山县| 红桥区| 商丘市| 内江市| 西城区| 高青县| 甘谷县| 荃湾区| 于田县| 门头沟区| 昭觉县| 蓬安县| 宜良县| 师宗县| 大名县| 清镇市| 德昌县| 扬中市| 玉环县|