您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在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一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。
上述內容就是怎么在SpringBoot中利用RedisTemplate執行Lua腳本,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。