redis集群实战(单台机器Windows环境下搭建3主3从redis集群)

本文主要展示在单台win10机器上搭建三主三从redis集群。

搭建过程

主要参考作者: 每天都在变得更好的阿飞  的两篇博客

Redis集群主从复制(一主两从)搭建配置教程【Windows环境】https://blog.csdn.net/u010648555/article/details/79427606

《Redis创建高可用集群教程【Windows环境】》https://blog.csdn.net/u010648555/article/details/79427608

这两篇博客非常详细的介绍了搭建过程,里面还有相应软件的下载地址。

注意:

1、由于域名问题,在安装RubyGems时,最终的ruby镜像源修改为 Ruby China http://gems.ruby-china.com/ ,后缀不再是org!!!。

安装在安装RubyGems的下载地址 https://rubygems.org/pages/download, 下载后解压,当前目录切换到解压目录中,如 D:\Program Files\redis\rubygems-2.6.12 然后在命令行执行ruby setup.rb安装RubyGems。

2、redis-trib.rb文件需要使用(redis3.2.0即可)的源码压缩包中src文件夹下的redis-trib.rb文件。

下载redis源码版压缩包:http://download.redis.io/releases/

若redis-trib.rb文件版本较低,会出现以下错误:

WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead.

redis cluster使用

导入依赖:

    <!--引入reids-->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

配置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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <description>redis cluster configuation</description>

    <bean id="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
        <!--连接池中最大空闲连接数, 默认8个-->
        <property name="maxIdle" value="${redis.pool.maxIdle}"/>
        <!--连接池中最小空闲连接数-->
        <property name="minIdle" value="${redis.pool.minIdle}"/>
        <!--连接池中最大连接数, 默认8个-->
        <property name="maxTotal" value="${redis.pool.maxTotal}"/>
        <!--是否启用pool的jmx管理功能, 默认true-->
        <property name="jmxEnabled" value="${redis.pool.jmxEnabled}"/>
        <!--当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时-->
        <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>
        <!--连接空闲的最小时间,达到此值后空闲连接将可能会被移除。负值(-1)表示不移除-->
        <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/>
        <!--对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3-->
        <property name="numTestsPerEvictionRun" value="${redis.pool.numTestsPerEvictionRun}"/>
        <!--向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,
           并尝试获取继续获取。默认为false。建议保持默认值.-->
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
        <!--向连接池“归还”链接时,是否检测“链接”对象的有效性。默认为false。建议保持默认值-->
        <property name="testOnReturn" value="${redis.pool.testOnReturn}"/>
        <!--“空闲链接”检测线程(用于释放链接)检测的周期(毫秒)。如果为负值,表示不运行“检测线程”。默认为-1-->
        <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/>
        <!--连接耗尽时是否阻塞, false报异常,true阻塞直到超时, 默认true-->
        <property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}"/>
    </bean>

    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster" destroy-method="close">
        <constructor-arg>
            <set>
                <bean id="jedisClusterNode1" class="redis.clients.jedis.HostAndPort">
                    <constructor-arg value="${jedisClusterNode.1.host}"/>
                    <constructor-arg value="${jedisClusterNode.1.port}"/>
                </bean>
                <bean id="jedisClusterNode2" class="redis.clients.jedis.HostAndPort">
                    <constructor-arg value="${jedisClusterNode.2.host}"/>
                    <constructor-arg value="${jedisClusterNode.2.port}"/>
                </bean>
                <bean id="jedisClusterNode3" class="redis.clients.jedis.HostAndPort">
                    <constructor-arg value="${jedisClusterNode.3.host}"/>
                    <constructor-arg value="${jedisClusterNode.3.port}"/>
                </bean>
            </set>
        </constructor-arg>
        <!--redis的连接超时时间-->
        <constructor-arg value="${redis.connectionTimeout}"/>
        <!--redis获取数据超时时间-->
        <constructor-arg value="${redis.soTimeout}"/>
        <!--redis出现异常最大重试次数-->
        <constructor-arg value="${redis.maxAttempts}"/>
        <constructor-arg ref="genericObjectPoolConfig"/>
    </bean>

</beans>

redis.properties配置

# 本地redis集群配置
jedisClusterNode.1.host=127.0.0.1
jedisClusterNode.1.port=20000
jedisClusterNode.2.host=127.0.0.1
jedisClusterNode.2.port=20001
jedisClusterNode.3.host=127.0.0.1
jedisClusterNode.3.port=20002
# timeout
redis.connectionTimeout=5000
redis.soTimeout=2000
redis.maxAttempts=3
# redis连接池配置
redis.pool.minIdle=1
redis.pool.maxIdle=50
redis.pool.maxTotal=512
redis.pool.jmxEnabled=false
redis.pool.maxWaitMillis=4000
redis.pool.minEvictableIdleTimeMillis=120000
redis.pool.numTestsPerEvictionRun=3
redis.pool.testOnBorrow=false
redis.pool.testOnReturn=false
redis.pool.timeBetweenEvictionRunsMillis=300000
redis.pool.blockWhenExhausted=true

编写代码:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //声明一个ApplicationContext集成测试加载WebApplicationContext,作用是模拟ServletContext
@ContextConfiguration(locations={"classpath:spring/spring-application.xml"})
@Service
public class RedisServiceImpl implements RedisService {

    //private static final Logger logger = Logger.getLogger(RedisServiceImpl.class);

    @Autowired
    private JedisCluster jedisCluster;

    @Test
    public void testRedis( ) {
        jedisCluster.set("1","哈哈");
        System.out.println(jedisCluster.get("1"));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27127145/article/details/84107683
今日推荐