怎么在SpringBoot中利用RedisTemplate執(zhí)行Lua腳本

本篇文章為大家展示了怎么在SpringBoot中利用redisTemplate執(zhí)行Lua腳本,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),西豐網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:西豐等地區(qū)。西豐做網(wǎng)站價(jià)格咨詢:18980820575

lua 腳本

Redis 中使用 lua 腳本,我們需要注意的是,從 Redis 2.6.0后才支持 lua 腳本的執(zhí)行。

使用 lua 腳本的好處:

原子操作:lua腳本是作為一個(gè)整體執(zhí)行的,所以中間不會(huì)被其他命令插入。
減少網(wǎng)絡(luò)開銷:可以將多個(gè)請(qǐng)求通過腳本的形式一次發(fā)送,減少網(wǎng)絡(luò)時(shí)延。
復(fù)用性:lua腳本可以常駐在redis內(nèi)存中,所以在使用的時(shí)候,可以直接拿來復(fù)用,也減少了代碼量。

1.RedisScript

首先你得引入spring-boot-starter-data-redis依賴,其次把lua腳本放在resources目錄下。

@Bean public DefaultRedisScript<List> defaultRedisScript() { 
DefaultRedisScript<List> defaultRedisScript = new DefaultRedisScript<>(); 
defaultRedisScript.setResultType(List.class); 
defaultRedisScript.setScriptSource(new ResourceScriptSource(new 
ClassPathResource("redis/demo.lua"))); return defaultRedisScript; }

在Spring Boot2.0的時(shí)候,上述配置沒有問題,但在Spring

Boot1.5測(cè)試會(huì)出錯(cuò),需要將List.class改為具體的返回類型(如Long.class)。

RedisScript的getSha1()方法可以獲取腳本摘要。

2.調(diào)用腳本

/** * List設(shè)置lua的KEYS */ List<String> keyList = new ArrayList(); 
keyList.add("count"); keyList.add("rate.limiting:127.0.0.1"); /** *

用Mpa設(shè)置Lua的ARGV[1]

*/ Map<String, Object> argvMap = new HashMap<String, 

Object>(); argvMap.put("expire", 10000); argvMap.put("times", 10); /** *

調(diào)用腳本并執(zhí)行

 */ List result = redisTemplate1.execute(redisScript, keyList, argvMap); 

System.out.println(result);

若是出現(xiàn)序列化問題,可以指定序列化方式。

public <T> T execute(RedisScript<T> script, RedisSerializer<?> argsSerializer, 
RedisSerializer<T> resultSerializer, List<K> keys, Object... args) { return 
scriptExecutor.execute(script, argsSerializer, resultSerializer, keys, args); }

3.Lua腳本

--獲取KEY local key1 = KEYS[1] local key2 = KEYS[2] --

獲取ARGV[1],這里對(duì)應(yīng)到應(yīng)用端是一個(gè)List<Map>. -- 注意,這里接收到是的字符串,所以需要用csjon庫解碼成table類型 local

receive_arg_json = cjson.decode(ARGV[1]) --獲取ARGV內(nèi)的參數(shù)并打印 local expire = 
receive_arg_json.expire local times = receive_arg_json.times

springboot是什么

springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡化配置文件。

上述內(nèi)容就是怎么在SpringBoot中利用RedisTemplate執(zhí)行Lua腳本,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站欄目:怎么在SpringBoot中利用RedisTemplate執(zhí)行Lua腳本
URL網(wǎng)址:http://bm7419.com/article18/pcehdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站改版、動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站云服務(wù)器、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名