1. 程式人生 > >spring整合redis(叢集、主從)

spring整合redis(叢集、主從)

使用maven整合   

整合環境ssm:

spring   4.2.6.RELEASE

Mybatis 3.2.6

注意事項:

spring、redis和spring-redis的版本,開始用spring4.0整合不成功,使用4.2整合成功

pom.xml檔案:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>redis-cluster</groupId>
  <artifactId>redis-cluster</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name/>
  <description/>
  <properties>
    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	<java-version>1.7</java-version>
  		<junit-version>4.1.12</junit-version>
  	 	<spring.version>4.2.6.RELEASE</spring.version>
  	 	<c3p0-version>0.9.1.2</c3p0-version>
  	 	<commons-fileupload-version>1.2.2</commons-fileupload-version>
  	 	<slf4j-version>1.6.6</slf4j-version>
		 <log4j.version>1.2.16</log4j.version>
  		<mybatis.version>3.2.6</mybatis.version> 
  		<org.apache.commons-version>3.1</org.apache.commons-version>
  		<javax.servlet-version>1.2</javax.servlet-version>
  		<junit>${4.12}</junit>
	 	<spring-data-redis>1.8.1.RELEASE</spring-data-redis>
		<jedis>2.9.0</jedis>
		<fastjson>1.1.41</fastjson>
		<mysql-connector>5.1.38</mysql-connector>
    	<mybatis-spring>1.3.0</mybatis-spring>
		<javaee-api>7.0</javaee-api>
		<commons-io>2.4</commons-io>
  </properties>
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.annotation</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.ejb</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.weld</groupId>
      <artifactId>weld-osgi-bundle</artifactId>
      <version>1.0.1-SP3</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.servlet</artifactId>
      <version>3.0.1</version>
    </dependency>
    <dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>${junit}</version>
	    <!-- 表示開發的時候引入,釋出的時候不會載入此包 -->
        <scope>test</scope>
	</dependency>
	
	<!-- spring核心包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    
    <!-- connect pool with c3p0 -->
	<dependency>
		<groupId>c3p0</groupId>
		<artifactId>c3p0</artifactId>
		<version>${c3p0-version}</version>
	</dependency>
		
	<dependency>
	  <groupId>commons-fileupload</groupId>
	  <artifactId>commons-fileupload</artifactId>
	  <version>${commons-fileupload-version}</version>
	</dependency>
		
	<dependency>
	  <groupId>org.apache.commons</groupId>
	  <artifactId>commons-lang3</artifactId>
	  <version>${org.apache.commons-version}</version>
	</dependency>
	
	 <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io}</version>
    </dependency>
       

	<!-- 匯入java ee jar 包 -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>${javaee-api}</version>
    </dependency>
    
    
	<!-- mybatis核心包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    <!-- mybatis/spring包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>${mybatis-spring}</version>
    </dependency>
    
     <!-- 匯入Mysql資料庫連結jar包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-connector}</version>
    </dependency>
    	
     <!-- 日誌檔案管理包 -->
   
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
     <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j-version}</version>
    </dependency>
    
      <!-- 格式化物件,方便輸出日誌 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>${fastjson}</version>
    </dependency>
    
  	<!-- Redis客戶端 -->
	<dependency>
		<groupId>redis.clients</groupId> 
		<artifactId>jedis</artifactId>
		<version>${jedis}</version>
	</dependency>
		
	<!-- redis Spring  --> 
       <dependency>  
	  <groupId>org.springframework.data</groupId>  
	  <artifactId>spring-data-redis</artifactId>  
	  <version>${spring-data-redis}</version>  
	</dependency>

	
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

redis叢集主要配置

redis-cluster.properties

redis.host1=192.168.1.235
redis.port1=7001
redis.host2=192.168.1.235
redis.port2=7002
redis.host3=192.168.1.235
redis.port3=7003
redis.host4=192.168.1.235
redis.port4=7004
redis.host5=192.168.1.235
redis.port5=7005
redis.host6=192.168.1.235
redis.port6=7006

redis.maxRedirects=3
redis.maxIdle=30
redis.maxTotal=100
redis.minIdle=5
redis.maxWaitMillis=30000 
redis.testOnBorrow=true
redis.testOnReturn=true 
redis.testWhileIdle=true
redis.timeout=3000

redis-cluster.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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
                            http://www.springframework.org/schema/context  
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                            http://www.springframework.org/schema/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  
		 <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">  
				<property name="maxRedirects" value="${redis.maxRedirects}"></property>  
				<property name="clusterNodes">  
					<set>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host1}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port1}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host2}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port2}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host3}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port3}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host4}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port4}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host5}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port5}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host6}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port6}"></constructor-arg>  
						</bean>  
				</set>  
		</property>  
	</bean>  
	
	
	<bean id="jedisPoolConfig"   class="redis.clients.jedis.JedisPoolConfig">  
		<property name="maxTotal" value="${redis.maxTotal}" />
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>  
	   
	<bean id="jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  >  
		
		 <property name="poolConfig" ref="jedisPoolConfig" />
		 <constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/>  
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>   
		<!-- <property name="timeout" value="${redis.timeout}" /> -->
	</bean>  
	  
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
		<property name="connectionFactory" ref="jeidsConnectionFactory" />
		 <property name="keySerializer" >  
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
        </property>  
        <property name="valueSerializer" >  
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />  
        </property>  
        <property name="hashKeySerializer">  
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>  
        </property>  
        <property name="hashValueSerializer">  
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>  
        </property>  
	</bean>   
	    
  </beans>

redis 主從配置

redis-ms.properties

# Redis settings  
#sentinel1的IP和埠  
sentinel1.host=192.168.1.233
sentinel1.port=26379  
#sentinel2的IP和埠  
sentinel2.host=192.168.1.233
sentinel2.port=26378 

im.hs.server.redis.maxIdle=500  
#最大連線數,超過此連線時操作redis會報錯  
im.hs.server.redis.maxTotal=5000  
im.hs.server.redis.maxWaitTime=1000  
im.hs.server.redis.testOnBorrow=true  
#最小閒置連線數,spring啟動的時候自動建立該數目的連線供應用程式使用,不夠的時候會申請。  
im.hs.server.redis.minIdle=300
im.hs.server.redis.sentinel.masterName=mymaster

redis-ms.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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
                            http://www.springframework.org/schema/context  
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                            http://www.springframework.org/schema/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  
  
  
         <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
		        <property name="maxTotal" value="${im.hs.server.redis.maxTotal}" />  
		        <property name="minIdle" value="${im.hs.server.redis.minIdle}" />  
		        <property name="maxWaitMillis" value="${im.hs.server.redis.maxWaitTime}" />  
		        <property name="maxIdle" value="${im.hs.server.redis.maxIdle}" />  
		        <property name="testOnBorrow" value="${im.hs.server.redis.testOnBorrow}" />  
		        <property name="testOnReturn" value="true" />  
		        <property name="testWhileIdle" value="true" />  
   		 </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="${im.hs.server.redis.sentinel.masterName}"/>
		        </bean>
    		</property>
		    <property name="sentinels">
		        <set>
		            <bean class="org.springframework.data.redis.connection.RedisNode">
		                <constructor-arg name="host" value="${sentinel1.host}"></constructor-arg>
		
		                <constructor-arg name="port" value="${sentinel1.port}"></constructor-arg>
		            </bean>
		            <bean class="org.springframework.data.redis.connection.RedisNode">
		                <constructor-arg name="host" value="${sentinel2.host}"></constructor-arg>
		
		                <constructor-arg name="port" value="${sentinel2.port}"></constructor-arg>
		            </bean>
		        </set>
		    </property>
	    </bean>

		<bean id="jeidsConnectionFactory"
			class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		    	  <constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg>  
        <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>  	
		</bean>


		<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		    <property name="connectionFactory" ref="jeidsConnectionFactory"/>
		</bean>
	    
</beans>

使用:

@Service
@Transactional(readOnly=true)
public class UserServiceImpl implements UserService {
	
	@Autowired
	private UserDao userDao;
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;
	
	@Override
	@Transactional(readOnly=false)
	public void add(final User user) {
		// TODO Auto-generated method stub
		userDao.save(user);
		System.out.println("--------------新增redis快取---------------------------");
		

		redisTemplate.execute(new RedisCallback<Object>() {  
            @Override  
            public Object doInRedis(RedisConnection connection)  
                    throws DataAccessException {  
                connection.hSet(redisTemplate.getStringSerializer().serialize("SYS_USER_TAB"),
                        redisTemplate.getStringSerializer().serialize("USER_"+user.getId()),  
                        redisTemplate.getStringSerializer().serialize(JSONObject.toJSONString(user)));  
              System.out.println(redisTemplate.getStringSerializer().serialize("USER_"+user.getId()));
                return null;  
            }  
        });  
		
		
		
	}

}
附原始碼下載地址,配置不成功下載下來看看:http://download.csdn.net/detail/sunqingzhong44/9829625

相關推薦

spring整合redis(叢集主從)

使用maven整合    整合環境ssm: spring   4.2.6.RELEASE Mybatis 3.2.6 注意事項: spring、redis和spring-redis的版本,開始用spring4.0整合不成功,使用4.2整合成功 pom.xml檔案: <

Spring整合redis叢集

目錄 1,說明 6,使用 1,說明 本文使用的客戶端為jedisCluster.它已經封裝了一些常用操作。故只需根據自己需要再進行封裝即可。 2,jar版本 使用的jar包的版本如下 jedis-2.9.0.jar(據網上反饋,只有這個版

Spring 整合redis叢集 實現 以及過程中需要注意的問題點

一,準備工作: 1.首先安裝好redis叢集,啟動並配置叢集。 2.SpringMVC環境,看專案或個人需要,可以使SpringMVC的web專案,也可以是隻使用SpringBean管理器。 二,著手配置: 由於專案是由maven管理的所以需要的jar 包新增到maven

Spring Boot2.0之 整合Redis叢集

專案目錄結構:   pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocat

spring整合redis單機版與redis叢集

前言: 有時候我們部署了叢集版的redis,還希望開發的時候使用單機版(畢竟省事兒),但是比較常用的Java客戶端(Jedis和Lettuce)的單機和叢集api是不統一的。經過調研,發現spring-data-redis可以實現這個需求,本文就是將spring-data-

Spring整合redis,通過sentinel進行主從切換。(何志雄)

實現功能描述:     redis伺服器進行Master-slaver-slaver-....主從配置,通過2臺sentinel進行failOver故障轉移,自動切換,採用該程式碼完全可以直接用於實際生產環境。        題外話:          一般來說這樣的部署

Spring整合redis,通過sentinel進行主從切換

實現功能描述:     redis伺服器進行Master-slaver-slaver-....主從配置,通過2臺sentinel進行failOver故障轉移,自動切換,採用該程式碼完全可以直接用於實際生產環境。        題外話:      

spring-data-redis整合redis叢集配置

Spring版本:4.3.21.RELEASE spring-data-redis版本: <dependency> <groupId>org.springframework.data</groupId> <artifactId>sp

redis學習系列(二)--spring boot整合Redis叢集

spring boot整合Redis叢集 開發 新增依賴,載入Jedis <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

spring整合redis

data sch throws ack xid .org source protect pid 1,利用spring-data-redis整合 項目使用的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0

Spring整合Redis做數據緩存(Windows環境)

端口號 init 技術分享 factory redis-cli @service tab long 配置 當我們一個項目的數據量很大的時候,就需要做一些緩存機制來減輕數據庫的壓力,提升應用程序的性能,對於java項目來說,最常用的緩存組件有Redis、Ehcache和Mem

Spring整合Redis(spring-data-redis)

nds 獲取 可能 div 普通 工具 long red 等待 歷經幾天看了大量的博客資料,差不多算是搞定了,目前只是針對單個數據源,集群暫時沒研究 maven依賴 <properties> <!-- redis 版本 --> &l

網站性能優化小結和spring整合redis

remove utf ota turn tor package process 基本屬性 version 現在越來越多的地方需要非關系型數據庫了,最近網站優化,當然從頁面到服務器做了相應的優化後,通過在線網站測試工具與之前沒優化對比,發現有顯著提升。 服務器優化目前主要優化

spring 整合 redis的配置

index row val return created log idea pass truct   廢話不說,直接上代碼:   1、先添加依賴包 <!--redis--> <dependency>

Spring整合Redis報ClassCastException

最近在用Spring註解方式Cacheable 整合Redis的時候,報ClassCastException 異常,我方法返回值是一個PageVo, 報不能將PageVo 不能轉換成String 型別。一開始網上搜都是說SpringBoot整合方案,但我用的是Spring的方式的,後來看過幾

Spring整合Redis註解實現

之前我們說了Spring這個Redis,使用RedisTemplate 實現,不過有些地方也過於麻煩,因此Spring 團隊對 Jedis 進行了封裝,獨立為 spring-data-redis 專案,配合 spring 特性並整合 Jedis 的一些命令和方法。並提供了相關注解,幫助我們快

redis叢集策略-主從複製

一,主從複製: Master可以擁有多個slave 多個slave除了可以連線到同一個master外,還可以連線到其他的slave,但不常用。 主從複製不會阻塞到master,再同步資料時,master可以繼續處理client的請求。 主伺服器負責寫,從伺服器負責讀。

Spring整合redis帶測試用例Demo完整程式碼

專案結構 jar包 <!--redis--> <dependency> <groupId>redis.clients</groupId> <artifa

【nosql-redisspring整合redis

環境: MAVEN+SPRING+MYBATIS+MYSQL+REDIS 1 pom.xml檔案下載依賴: <dependency> <groupId>org.springframework.data</groupId> &

springboot整合redis叢集

1.新增redis啟動器 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte