Redis公共配置类
BaseActivityRedisRepository.java
import java.io.Serializable;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.serializer.StringRedisSerializer;
public class BaseActivityRedisRepository<T extends Serializable> implements InitializingBean {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource(name="activityConnectionFactory")
private RedisConnectionFactory jedisConnectionFactoryTemporary;
protected RedisTemplate<String, T> redisTemplateTemporary;
protected ValueOperations<String, T> redisValueOpsTemporary;
protected HashOperations<String, String, T> redisHashOpsTemporary;
protected SetOperations<String, T> redisSetOpsTemporary;
protected ZSetOperations<String, T> redisZSetOpsTemporary;
protected ListOperations<String, T> redisListOpsTemporary;
protected RedisTemplate<String, Long> longRedisTemplateTemporary;
protected ValueOperations<String, Long> longRedisValueOpsTemporary;
protected HashOperations<String, String, Long> longRedisHashOpsTemporary;
protected SetOperations<String, Long> longRedisSetOpsTemporary;
protected ZSetOperations<String, Long> longRedisZSetOpsTemporary;
protected ListOperations<String, Long> longRedisListOpsTemporary;
@Resource(name="activityStringRedisTemplate")
protected RedisTemplate<String, String> stringRedisTemplateTemporary;
@Resource(name="activityStringRedisTemplate")
protected ValueOperations<String, String> stringRedisValueOpsTemporary;
@Resource(name="activityStringRedisTemplate")
protected HashOperations<String, String, String> stringRedisHashOpsTemporary;
@Resource(name="activityStringRedisTemplate")
protected SetOperations<String, String> stringRedisSetOpsTemporary;
@Resource(name="activityStringRedisTemplate")
protected ZSetOperations<String, String> stringRedisZSetOpsTemporary;
@Resource(name="activityStringRedisTemplate")
protected ListOperations<String, String> stringRedisListOpsTemporary;
private Class<T> clazz;
public BaseActivityRedisRepository(Class<T> clazz) {
this.clazz = clazz;
redisTemplateTemporary = new RedisTemplate<String, T>();
longRedisTemplateTemporary = new RedisTemplate<String, Long>();
}
@Override
public void afterPropertiesSet() throws Exception {
FastJsonSerializer<T> stringJsonSerializer = new FastJsonSerializer<T>(clazz);
FastJsonSerializer<Long> longJsonSerializer = new FastJsonSerializer<Long>(Long.class);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplateTemporary.setConnectionFactory(jedisConnectionFactoryTemporary);
redisTemplateTemporary.setHashKeySerializer(stringRedisSerializer);
redisTemplateTemporary.setKeySerializer(stringRedisSerializer);
redisTemplateTemporary.setValueSerializer(stringJsonSerializer);
redisTemplateTemporary.setHashValueSerializer(stringJsonSerializer);
redisTemplateTemporary.afterPropertiesSet();
this.redisValueOpsTemporary = redisTemplateTemporary.opsForValue();
this.redisHashOpsTemporary = redisTemplateTemporary.opsForHash();
this.redisSetOpsTemporary = redisTemplateTemporary.opsForSet();
this.redisZSetOpsTemporary = redisTemplateTemporary.opsForZSet();
this.redisListOpsTemporary = redisTemplateTemporary.opsForList();
longRedisTemplateTemporary.setConnectionFactory(jedisConnectionFactoryTemporary);
longRedisTemplateTemporary.setHashKeySerializer(stringRedisSerializer);
longRedisTemplateTemporary.setKeySerializer(stringRedisSerializer);
longRedisTemplateTemporary.setValueSerializer(longJsonSerializer);
longRedisTemplateTemporary.setHashValueSerializer(longJsonSerializer);
longRedisTemplateTemporary.afterPropertiesSet();
this.longRedisValueOpsTemporary = longRedisTemplateTemporary.opsForValue();
this.longRedisHashOpsTemporary = longRedisTemplateTemporary.opsForHash();
this.longRedisSetOpsTemporary = longRedisTemplateTemporary.opsForSet();
this.longRedisZSetOpsTemporary = longRedisTemplateTemporary.opsForZSet();
this.longRedisListOpsTemporary = longRedisTemplateTemporary.opsForList();
}
}
application-activity-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
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-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<description>活动类redis操作</description>
<bean id="activityConnectionFactory" destroy-method="destroy"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<property name="poolConfig" ref="redisPoolConfig" />
<property name="usePool" value="true" />
<property name="password" value="${activity.redis.password}"/>
<property name="hostName" value="${activity.redis.hostname}" />
<property name="port" value="${activity.redis.port}" />
<property name="database" value="${activity.redis.database}" />
<property name="timeout" value="90000" />
</bean>
<bean id="activityRedisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
<property name="connectionFactory" ref="activityConnectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
</bean>
<bean id="activityStringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"
p:connection-factory-ref="activityConnectionFactory" />
</beans>
Activity2018WorldCupRepository.java
import java.util.concurrent.TimeUnit;
import org.springframework.stereotype.Repository;
import com.hanya.walrus.domain.activity.ActivityWorldCupStatistics;
import com.hanya.walrus.redis.support.BaseActivityRedisRepository;
import com.hanya.walrus.redis.util.RedisKey;
/**
* 世界杯竞猜活动
* @author shenshouwei
* @date 2018-06-05 10:35
*/
@Repository
public class Activity2018WorldCupRepository extends BaseActivityRedisRepository<ActivityWorldCupStatistics>{
public static int WORLD_CUP_EXPIRE_DAY_5 = 5;
public static int WORLD_CUP_EXPIRE_DAY_1 = 1;
public Activity2018WorldCupRepository() {
super(ActivityWorldCupStatistics.class);
}
/**
* 获取redis:世界杯竞猜(胜->负->平)数据
* @param startConfigId
* @param endConfigId
* @param type: (1:胜 2:负 3:平)
* @return
*/
public Long getActivityWorldCupStatistics(String startConfigId, String endConfigId, String type) {
String key = RedisKey.buildActivityWorldCupStatistics(startConfigId,endConfigId,type);
return longRedisValueOpsTemporary.get(key);
}
/**
* 统计(1:胜 2:负 3:平)点击量
* @param startConfigId:开始国家ID
* @param endConfigId:结束国家ID
* @param type: (1:胜 2:负 3:平)
*/
public void incrementActivityWorldCupStatistics(String startConfigId, String endConfigId, String type) {
String key = RedisKey.buildActivityWorldCupStatistics(startConfigId,endConfigId,type);
if(longRedisTemplateTemporary.hasKey(key)) {
longRedisValueOpsTemporary.increment(key, 1);
}else {
longRedisValueOpsTemporary.increment(key, 1);
redisTemplateTemporary.expire(key, WORLD_CUP_EXPIRE_DAY_5, TimeUnit.DAYS);
}
}
/**
* 设置是否已经参与世界杯活动
* @param startConfigId:开始国家ID
* @param endConfigId:结束国家ID
* @param memberId:会员ID
* @param type: (1:胜 2:负 3:平)
*/
public void setWorldCupSelectActivity(String startConfigId, String endConfigId,String memberId,String type) {
String key = RedisKey.buildActivityWorldCupIsSelect(startConfigId,endConfigId);
stringRedisHashOpsTemporary.put(key, memberId, type);
redisTemplateTemporary.expire(key, WORLD_CUP_EXPIRE_DAY_1, TimeUnit.DAYS);
}
/**
* 获取是否已经参与世界杯活动
* @param startConfigId:开始国家ID
* @param endConfigId:结束国家ID
* @param memberId:会员ID
* @return
*/
public String getWorldCupSelectActivity(String startConfigId, String endConfigId,String memberId) {
String key = RedisKey.buildActivityWorldCupIsSelect(startConfigId,endConfigId);
return stringRedisHashOpsTemporary.get(key, memberId);
}
}