• 04.redis集群+SSM整合使用


     redis集群+SSM整合使用

    首先是创建redis-cluster文件夹:

    因为redis最少需要6个节点(三主三从),为了更好的理解,我这里创建了两台虚拟机(192.168.0.109 192.168.0.110),分别在两台虚拟机的/opt/redis-4.0.1/redis-cluster下创建三个节点文件夹

    192.168.0.109:

     

    192.168.0.110:

    以上6个节点全部创建完成,分别再在这六个文件夹下创建redis.conf配置文件,其中配置如图:

    port 7000
    bind 192.168.0.109
    daemonize yes
    pidfile /var/run/redis_7000.pid
    cluster-enabled yes
    cluster-config-file nodes_7000.conf
    cluster-node-timeout 10000
    appendonly yes

    其中需要将port pidfile cluster-config-file修改成节点端口号一致,bind改成本机ip,以便远程访问,全部修改完后,即可启动redis服务:

    启动命令:

    192.168.0.109下的命令:“for((i=0;i<=2;i++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf; done

    192.168.0.110下的命令:“for((i=3;i<=5;i++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf; done

    可以看到后台模式启动成功的日志打印,两台机器都需要依次启动所有节点。节点启动完成后,即可创建集群服务:

    在其中一台虚拟机上执行如下命令“/opt/redis-4.0.1/src/redis-trib.rb create --replicas 1 192.168.0.109:7000 192.168.0.109:7001 192.168.0.109:7002 192.168.0.110:7003 192.168.0.110:7004 192.168.0.110:7005” 

     千万记住只需要在一台上执行即可,如果卡在join处不能往下执行,一般情况是出在防火墙端口被禁导致,有两种方式可以解决:

    1、不但需要开启7000对外端口,还需要开启17000(因为redis总线端口需要加10000)。

    2、直接关闭所有防火墙(因我这里是自己的环境,所以直接关闭了防火墙服务)。

    出现上图运行日志,基本就成功搭建好了集群服务,可以清晰的看到各个节点的主从关系,环境搭建好后,这里我们就和我上篇写到的SSM架构进行联合使用。

    上次整合的mybaits二级缓存是个单机版本,由于这种方式不支持集群,所以这里从新使用jedis-cluster进行另外一种redis集群与java整合使用的方式。

    首先在redis.properties文件中新增集群机器的配置,将6个节点依次加入配置:

    #cluster  
    cluster1.host.port=192.168.0.109:7000
    cluster2.host.port=192.168.0.109:7001
    cluster3.host.port=192.168.0.109:7002
    cluster4.host.port=192.168.0.110:7003
    cluster5.host.port=192.168.0.110:7004
    cluster6.host.port=192.168.0.110:7005

    redis配置文件中也与之前改动比较多,我直接列出来,可以直接拷去用了。

    spring-redis.xml

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3   xmlns:p="http://www.springframework.org/schema/p"
     4   xmlns:mvc="http://www.springframework.org/schema/mvc"
     5   xmlns:util="http://www.springframework.org/schema/util"
     6   xmlns:aop="http://www.springframework.org/schema/aop"
     7   xmlns:context="http://www.springframework.org/schema/context"
     8   xmlns:task="http://www.springframework.org/schema/task" 
     9   xsi:schemaLocation="http://www.springframework.org/schema/beans
    10       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    11       http://www.springframework.org/schema/util
    12       http://www.springframework.org/schema/util/spring-util-4.3.xsd
    13       http://www.springframework.org/schema/mvc
    14       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    15       http://www.springframework.org/schema/aop
    16       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    17       http://www.springframework.org/schema/context
    18       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    19       
    20       
    21     <!-- 连接池基本参数配置,类似数据库连接池 -->
    22      <context:property-placeholder location="classpath*:redis.properties" />
    23      
    24     <bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" >
    25         <property name="maxWaitMillis" value="-1" />
    26         <property name="maxTotal" value="1000" />
    27         <property name="minIdle" value="8" />
    28         <property name="maxIdle" value="100" />
    29     </bean>
    30     
    31     <!-- 连接池配置,类似数据库连接池 -->
    32     <!-- <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
    33         <property name="hostName" value="${redis.host}"></property>
    34         <property name="port" value="${redis.port}"></property>
    35         <property name="password" value="${redis.pass}"></property>
    36         <property name="poolConfig"  ref="poolConfig"></property> 
    37     </bean> -->
    38     
    39     <!-- 调用连接池工厂配置 -->
    40     <!-- <bean id="redisTemplate" class=" org.springframework.data.redis.core.RedisTemplate">
    41         <property name="jedisConnectionFactory" ref="jedisConnectionFactory"></property>
    42         
    43         如果不配置Serializer,那么存储的时候智能使用String,如果用User类型存储,那么会提示错误User can't cast  to String!!!  
    44          <property name="keySerializer">  
    45             <bean  
    46             class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
    47         </property>  
    48         <property name="valueSerializer">  
    49             <bean  
    50                 class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />  
    51         </property> 
    52     </bean> -->
    53      <bean id="jedisCluster" class="com.cjl.util.JedisClusterFactory">
    54         <property name="addressConfig">
    55             <value>classpath:redis.properties</value>
    56         </property>
    57         <property name="addressKeyPrefix" value="cluster" />
    58 
    59         <property name="timeout" value="300000" />
    60         <property name="maxRedirections" value="6" />
    61         <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />
    62     </bean>
    63 </beans>

    将上篇SSM+redis整合中mybatis的开启缓存配置全部禁用,即可启动服务测试了

    首先直接注入jedisCluster获取一个集群对象。

    这里为了方便,我数据同步直接用了java写了个简单思想,其他方法也可实现,例如Spring AOP方式实现,使用第三方插件,或者数据库层面实现都可行。

    启动成功后,反复调用方法。可以看到控制台并未打印sql语句,而是直接在redis集群中直接获取得到数据。以上简单的redis集群实例已经完成,因为时间关系,其中linux中有些坑我没有细细写出,如有疑问可以留言。

    如有不对的地方或者更好的建议,欢迎评论中指出。我会尽快学习修改。

  • 相关阅读:
    __iter__方法demo
    开放封闭原则
    单例模式
    Python赋值、浅拷贝、深拷贝
    保留原页面的参数条件
    request.GET、request.POST、request.body(持续更新)
    面向对象的封装、继承、多态(持续更新)
    关于Form、ModelForm的一些操作(持续更新)
    创建类的两种方式
    Nginx深度优化
  • 原文地址:https://www.cnblogs.com/cuijiale/p/8023691.html
Copyright © 2020-2023  润新知