SpringBoot RedisTemplate 集群使用lua

按照如此配置redis SpringBoot RedisTemplate 集群配置使用

1、執(zhí)行一個(gè)簡(jiǎn)單的lua腳本

  public void eval() {
        try {
            DefaultRedisScript<Object> script = new DefaultRedisScript<>();
            script.setResultType(Object.class);
            script.setScriptText("return {ARGV[1]}");
            script.getSha1();
            List<String> keys = new ArrayList<>();
            keys.add("key1");
            keys.add("key2");
            Object execute = redisTemplate.execute(script, keys, 10L);
            System.out.println(execute);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

2、解決問題

1??、會(huì)報(bào)此錯(cuò)誤:EvalSha is not supported in cluster environment
在stackoverflow找到解決辦法點(diǎn)此
總結(jié)就是為了能在集群環(huán)境支持EvalSha,需要切換使用LettuceConnectionFactory,故替換 SpringBoot RedisTemplate 集群配置使用里面的redisConnectionFactory配置為如下:

@Bean
LettuceConnectionFactory redisConnectionFactory(RedisClusterConfiguration configuration) {
    return new LettuceConnectionFactory(configuration);
}

同時(shí)需要引入包:

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>

2??、會(huì)報(bào)此錯(cuò)誤:CROSSSLOT Keys in request don't hash to the same slot--keys不能落在同一個(gè)節(jié)點(diǎn)
上面的代碼傳入了兩個(gè)key,key1、key2,但算slot的時(shí)候發(fā)現(xiàn)并未落在同一個(gè)slot里面。
針對(duì)提示,那就讓keys落在同一個(gè)slot里面就行啦
使用hash tag(hash tag是用于hash的部分字符串開始和結(jié)束的標(biāo)記),即如果key的結(jié)構(gòu)為{XXX}key,則只會(huì)對(duì){}里面的XXX進(jìn)行分區(qū),就會(huì)落到同一個(gè)slot里面啦。
將上面的代碼部分改動(dòng):

keys.add("{test}key1");
keys.add("{test}key2");

再次運(yùn)行代碼就能得到輸出為:[10]
此問題其實(shí)在redis文檔中有說明redis 中文eval說明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.1 Redis集群的設(shè)計(jì)原則和初衷 在官方文檔Cluster Spec中,作者詳細(xì)介紹了Redis集群為什么要...
    Flame_1109閱讀 2,275評(píng)論 1 5
  • 關(guān)于redis的安裝、配置及啟動(dòng),參考Redis簡(jiǎn)單配置使用 1.添加依賴 2.添加配置文件 3.添加配置類 Re...
    憂郁的小碼仔閱讀 1,176評(píng)論 2 7
  • 1 redis概述 1.1 什么是redis ??Redis的全稱是REmote Dictionary Serve...
    一把君子劍閱讀 531評(píng)論 0 0
  • 基本目標(biāo)與設(shè)計(jì)基本思想 Redis cluster 目標(biāo) 高性能,并且能線性擴(kuò)展到1000個(gè)節(jié)點(diǎn)。不需要代理,使用...
    tafeng閱讀 2,864評(píng)論 0 0
  • 一、Windows redis單機(jī)安裝 1、下載Windows redis版本 官方?jīng)]有 Windows版本的 R...
    宇宙小神特別萌閱讀 2,510評(píng)論 1 7

友情鏈接更多精彩內(nèi)容