玩转redis之redis 分片集群方案与实现

一、spring-redis配置


<?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:context="http://www.springframework.org/schema/context" 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-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
			
		
	<!-- <context:property-placeholder location="classpath:/META-INF/db/data-redis.properties" />   -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" >  
    	<property name="maxActive" value="${redis.pool.maxActive}" />  
    	<property name="maxIdle" value="${redis.pool.maxIdle}" />  
    	<property name="maxWait" value="${redis.pool.maxWait}" />  
    	<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />  
	</bean> 
	<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" >  
    	<constructor-arg index="0" ref="jedisPoolConfig" />  
    	<constructor-arg index="1">  
        	<list>  
            	<bean class="redis.clients.jedis.JedisShardInfo">  
                	<constructor-arg index="0" value="${redis.ip}" />  
                	<constructor-arg index="1" value="${redis.port}" type="int" />  
            	</bean>  
            	<bean class="redis.clients.jedis.JedisShardInfo">  
                	<constructor-arg index="0" value="${redis2.ip}" />  
                	<constructor-arg index="1" value="${redis2.port}" type="int" />  
            	</bean>  
            	<bean class="redis.clients.jedis.JedisShardInfo">  
	                <constructor-arg index="0" value="${redis3.ip}" />  
	                <constructor-arg index="1" value="${redis3.port}" type="int" />  
            	</bean>   
        	</list>  
    	</constructor-arg>  
	</bean>  
</beans>



如上,在shardedJedisPool中增加多个redis分片

二、代码实现

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.iflashbuy.base.util.JsonUtil;
import com.iflashbuy.base.util.StringUtil;

import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

@Component
public class RedisOperator {
	private static final Logger log = LoggerFactory.getLogger(RedisOperator.class);

	@Inject
	public ShardedJedisPool shardedJedisPool;
	
	
	public void set(String key, Object obj) {
		String jsonStr = "";
		if (obj instanceof String) {
			jsonStr = (String) obj;
		} else {
			jsonStr = JsonUtil.objectToJsonStr(obj);
		}
		ShardedJedis jedis = shardedJedisPool.getResource();
		jedis.set(key, jsonStr);
	}
	
	
	
	public <T> T get(String key, Class<T> clazz) {
		ShardedJedis jedis = shardedJedisPool.getResource();
		String jsonStr = jedis.get(key);
		if (StringUtil.isNotEmpty(jsonStr)) {
			try {
				return (T) JsonUtil.formJson(jsonStr, clazz);
			} catch (Exception e) {
				log.error("joson转为对象失败:" + e);
				return null;
			}
		} else {
			return null;
		}
	}
	
	
}




你可能感兴趣的:(redis,分片)