服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - spring集成redis cluster详解

spring集成redis cluster详解

2021-02-19 23:15cenmin JAVA教程

这篇文章主要介绍了spring集成redis cluster详解,分享了maven依赖,Spring配置,增加connect-redis.properties 配置文件等相关内容,具有一定参考价值,需要的朋友可以了解下。

客户端采用最新的jedis 2.7

1.maven依赖:

?
1
2
3
4
5
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>

2.增加spring 配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" >
            <property name="maxWaitMillis" value="-1" />
            <property name="maxTotal" value="1000" />
            <property name="minIdle" value="8" />
            <property name="maxIdle" value="100" />
    </bean>
 
    <bean id="jedisCluster" class="xxx.JedisClusterFactory">
        <property name="addressConfig">
            <value>classpath:connect-redis.properties</value>
        </property>
        <property name="addressKeyPrefix" value="address" />  <!-- 属性文件里 key的前缀 -->
        
        <property name="timeout" value="300000" />
        <property name="maxRedirections" value="6" />
        <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />
    </bean>

3.增加connect-redis.properties 配置文件

这里配置了6个节点

?
1
2
3
4
5
6
address1=*:*
address2=*:*
address3=*:*
address4=*:*
address5=*:*
address6=*:*

4.增加java类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Pattern;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean {
    private Resource addressConfig;
    private String addressKeyPrefix ;
    private JedisCluster jedisCluster;
    private Integer timeout;
    private Integer maxRedirections;
    private GenericObjectPoolConfig genericObjectPoolConfig;
    private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$");
    @Override
        public JedisCluster getObject() throws Exception {
        return jedisCluster;
    }
    @Override
        public Class<? extends JedisCluster> getObjectType() {
        return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);
    }
    @Override
        public Boolean isSingleton() {
        return true;
    }
    private Set<HostAndPort> parseHostAndPort() throws Exception {
        try {
            Properties prop = new Properties();
            prop.load(this.addressConfig.getInputStream());
            Set<HostAndPort> haps = new HashSet<HostAndPort>();
            for (Object key : prop.keySet()) {
                if (!((String) key).startsWith(addressKeyPrefix)) {
                    continue;
                }
                String val = (String) prop.get(key);
                Boolean isIpPort = p.matcher(val).matches();
                if (!isIpPort) {
                    throw new IllegalArgumentException("ip 或 port 不合法");
                }
                String[] ipAndPort = val.split(":");
                HostAndPort hap = new HostAndPort(ipAndPort[0], Integer.parseint(ipAndPort[1]));
                haps.add(hap);
            }
            return haps;
        }
        catch (IllegalArgumentException ex) {
            throw ex;
        }
        catch (Exception ex) {
            throw new Exception("解析 jedis 配置文件失败", ex);
        }
    }
    @Override
        public void afterPropertiesSet() throws Exception {
        Set<HostAndPort> haps = this.parseHostAndPort();
        jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);
    }
    public void setAddressConfig(Resource addressConfig) {
        this.addressConfig = addressConfig;
    }
    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }
    public void setMaxRedirections(int maxRedirections) {
        this.maxRedirections = maxRedirections;
    }
    public void setAddressKeyPrefix(String addressKeyPrefix) {
        this.addressKeyPrefix = addressKeyPrefix;
    }
    public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {
        this.genericObjectPoolConfig = genericObjectPoolConfig;
    }
}

5.到此配置完成

使用时,直接注入即可, 如下所示:

?
1
2
@Autowired
JedisCluster jedisCluster;

总结

以上就是本文关于spring集成redis cluster详解的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://www.open-open.com/code/view/1453520799651

延伸 · 阅读

精彩推荐
  • JAVA教程java中UDP简单聊天程序实例代码

    java中UDP简单聊天程序实例代码

    这篇文章主要介绍了java中UDP简单聊天程序实例代码,有需要的朋友可以参考一下 ...

    java技术网3682019-10-27
  • JAVA教程java设计模式之观察者模式学习

    java设计模式之观察者模式学习

    这篇文章主要为大家详细介绍了java设计模式之观察者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    BBOYBX2762020-07-26
  • JAVA教程java应用领域分析

    java应用领域分析

    在这篇文章里,我们将更确切地知道哪种类型的项目是使用Java完成的,Java运用在哪些主要领域和部门,以及Java在现实世界的哪些地方起着什么作用,需要的朋友...

    用户60926954844272021-01-03
  • JAVA教程详解java装饰模式(Decorator Pattern)

    详解java装饰模式(Decorator Pattern)

    这篇文章主要为大家详细介绍了java装饰模式Decorator Pattern,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,对装饰器模式感兴趣的小...

    码农教程4832020-04-15
  • JAVA教程常用输入字节流InputStream介绍

    常用输入字节流InputStream介绍

    下面小编就为大家带来一篇常用输入字节流InputStream介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    WMlin1382020-12-20
  • JAVA教程详解shiro缓存机制

    详解shiro缓存机制

    Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现。下面通过实例代码给大家分享shiro缓存...

    动力节点8252021-01-06
  • JAVA教程java生成字母数字组合的随机数示例 java生成随机数

    java生成字母数字组合的随机数示例 java生成随机数

    这篇文章主要介绍了java生成字母数字组合的随机数的示例,大家参考使用吧 ...

    java教程网4932019-11-04
  • JAVA教程java版简单的猜数字游戏实例代码

    java版简单的猜数字游戏实例代码

    猜数字游戏是一款经典的游戏,该游戏说简单也很简单,说不简单确实也很难,那么下面这篇文章主要给大家介绍了java版简单的猜数字游戏的相关资料,文中...

    花花妹子。4692020-10-06