91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么利用RedisTemplate執行Lua腳本

發布時間:2021-07-08 17:05:57 來源:億速云 閱讀:644 作者:Leah 欄目:編程語言

SpringBoot中怎么利用RedisTemplate執行Lua腳本,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

lua 腳本

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

使用 lua 腳本的好處:

原子操作:lua腳本是作為一個整體執行的,所以中間不會被其他命令插入。減少網絡開銷:可以將多個請求通過腳本的形式一次發送,減少網絡時延。復用性:lua腳本可以常駐在redis內存中,所以在使用的時候,可以直接拿來復用,也減少了代碼量。

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的時候,上述配置沒有問題,但在Spring

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

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

2.調用腳本

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

用Mpa設置Lua的ARGV[1]

*/ Map<String, Object> argvMap = new HashMap<String, Object>(); argvMap.put("expire", 10000); argvMap.put("times", 10); /** *

調用腳本并執行

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

若是出現序列化問題,可以指定序列化方式。

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],這里對應到應用端是一個List<Map>. -- 注意,這里接收到是的字符串,所以需要用csjon庫解碼成table類型 local

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

關于SpringBoot中怎么利用RedisTemplate執行Lua腳本問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

讷河市| 甘孜| 贺兰县| 丰原市| 富源县| 中卫市| 镇坪县| 华蓥市| 松原市| 濮阳市| 丁青县| 石家庄市| 丹江口市| 沙湾县| 安吉县| 桐庐县| 沂南县| 新丰县| 永州市| 景泰县| 松桃| 广州市| 镇平县| 界首市| 抚州市| 威海市| 桓仁| 辰溪县| 凤城市| 宾川县| 永丰县| 九龙城区| 寿光市| 博野县| 泰安市| 鄂伦春自治旗| 阳春市| 庆阳市| 同仁县| 辽源市| 昭平县|