zoukankan      html  css  js  c++  java
  • spring-data-redis使用哨兵配置一主多从

    redis自带的哨兵确实简化了高可用性的配置,使用起来也比较简单。

    首先是spring-redis-sentinel.xml(文件名可以随意命名)配置文件:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- Spring自动将该包目录下标记为@Service的所有类作为spring的Bean -->
        <context:component-scan base-package="com.zz.redis" />
    
    <!--     <context:property-placeholder location="classpath:conf/redis/redis.properties" /> -->
    
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxTotal" value="2048" />
            <property name="maxIdle" value="200" />
            <property name="numTestsPerEvictionRun" value="1024" />
            <property name="timeBetweenEvictionRunsMillis" value="30000" />
            <property name="minEvictableIdleTimeMillis" value="-1" />
            <property name="softMinEvictableIdleTimeMillis" value="10000" />
            <property name="maxWaitMillis" value="1500" />
            <property name="testOnBorrow" value="true" />
            <property name="testWhileIdle" value="true" />
            <property name="testOnReturn" value="false" />
            <property name="jmxEnabled" value="true" />
            <property name="blockWhenExhausted" value="false" />
        </bean>
    
        <bean id="redisSentinelConfiguration"
            class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
            <property name="master">
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <property name="name" value="mymaster">
                    </property>
                </bean>
            </property>
            <property name="sentinels">
                <set>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="192.168.125.128" />
                        <constructor-arg name="port" value="26379" />
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="192.168.125.129" />
                        <constructor-arg name="port" value="26379" />
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode ">
                        <constructor-arg name="host" value="192.168.125.130" />
                        <constructor-arg name="port" value="26379" />
                    </bean>
                </set>
            </property>
        </bean>
        <bean id="redisConnectionFactory"
            class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
            p:password="pwdisadmin">
            <constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg>
            <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
        </bean>
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="redisConnectionFactory" />
        </bean>
    </beans>
    复制代码

    上面的p:password="pwdisadmin"指的是redis的密码,mymaster指的是redis哨兵中配置的名字。

    然后再程序中就可以通过注解或者getBean获取redisTemplate的实例了。

    复制代码
    public static void main(String[] args) {
            ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
                    "classpath:conf/spring-redis-sentinel.xml");
            RedisTemplate<String, String> template = (RedisTemplate<String, String>) context.getBean("redisTemplate");
            template.opsForValue().set("aaa", "aaabbb");
            System.err.println(template.opsForValue().get("aaa"));
        }
    复制代码
  • 相关阅读:
    kubernetes之手动部署k8s 1.14.1高可用集群
    db2 常用配置
    db2 常用命令
    linux 常用命令
    linux for 使用
    图解Python 【第六篇】:面向对象-类-进阶篇
    图解Python 【第五篇】:面向对象-类-初级基础篇
    图解Python 【第一篇】:Python基础1
    图解Python 【第三篇】:Python-函数
    图解Python 【第二篇】:Python基础2
  • 原文地址:https://www.cnblogs.com/liuchuanfeng/p/6961337.html
Copyright © 2011-2022 走看看