1.pom.xml
<!-- spring-data --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>${spring-data.version}</version> </dependency>
2.redis.properties
#IP\u5730\u5740 redis.pool.host=192.168.7.153 #\u7aef\u53e3\u53f7 redis.pool.port=6379 #redis.pool.pass= #\u6700\u5927\u5206\u914d\u7684\u5bf9\u8c61\u6570 redis.pool.maxTotal=600 #\u6700\u5927\u80fd\u591f\u4fdd\u6301idel\u72b6\u6001\u7684\u5bf9\u8c61\u6570 redis.pool.maxIdle=300 #\u591a\u957f\u65f6\u95f4\u68c0\u67e5\u4e00\u6b21\u8fde\u63a5\u6c60\u4e2d\u7a7a\u95f2\u7684\u8fde\u63a5 redis.pool.timeBetweenEvictionRunsMillis=30000 #\u7a7a\u95f2\u8fde\u63a5\u591a\u957f\u65f6\u95f4\u540e\u4f1a\u88ab\u6536\u56de redis.pool.minEvictableIdleTimeMillis=30000 #\u5f53\u8c03\u7528borrow Object\u65b9\u6cd5\u65f6\uff0c\u662f\u5426\u8fdb\u884c\u6709\u6548\u6027\u68c0\u67e5 redis.pool.testOnBorrow=true #redis\u5f00\u542f\u5f00\u5173,true\u5f00\u542f\uff0cfalse\u4e0d\u5f00\u542f redis.switch=true #redis\u9ed8\u8ba4\u7f13\u5b58\u8fc7\u671f\u5929\u6570\uff0c\u5355\u4f4d\u5929 redis.timeout.day=1 #redis\u9ed8\u8ba4\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4\uff0c\u65f6\u5206\u79d2 redis.timeout.time=03:00:00
3.applicationContext-redis.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"> <!-- Redis缓存配置 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisConnFactory"/> </bean> <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.pool.host}"/> <property name="port" value="${redis.pool.port}"/> <property name="poolConfig" ref="jedisPoolConfig"/> </bean> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.pool.maxTotal}"/> <property name="maxIdle" value="${redis.pool.maxIdle}"/> <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/> <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/> </bean> <bean id="redisCommons" class="com.common.redis.RedisCommons"> <property name="redisTemplate" ref="redisTemplate"/> <property name="redisSwitch" value="${redis.switch}"/> <property name="redisTimeoutDay" value="${redis.timeout.day}"/> <property name="redisTimeoutTime" value="${redis.timeout.time}"/> </bean> </beans>
4.RedisCommons.java
package com.common.redis; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.BoundListOperations; import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.BoundValueOperations; import org.springframework.data.redis.core.BoundZSetOperations; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.data.redis.core.ZSetOperations.TypedTuple; import org.springframework.data.redis.serializer.StringRedisSerializer; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.serializer.SerializerFeature; import com.common.pojo.redis.DiscountWrapper; import com.common.util.DateTimeUtils; import com.common.util.ObjectUtils; import com.common.util.Pager; /** * redis公共类. */ @SuppressWarnings({"rawtypes", "unchecked"}) public class RedisCommons { private RedisTemplate redisTemplate; /** * 缓存是否开启,默认开启,true开启,false不开启 */ private volatile boolean redisSwitch = true; /** * redis默认超时天数,单位天 */ private int redisTimeoutDay = 1; /** * redis默认超时时间,时分秒 */ private String redisTimeoutTime = "03:00:00"; /** * 影院信息1小时过期 */ public static final int DEFAULT_CINEMA_TIMEOUT = 3600; static StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); /** * 淘票数量缓存过期时间,单位分钟 */ public static final int REDIS_TRANSFER_COUNT_TIME = 10; /** * 淘票列表缓存过期时间,单位分钟 */ public static final int REDIS_TRANSFER_LIST_TIME = 30; /** * 每天创建订单数缓存过期时间 */ private String redisOrderTopCountTimeoutTime = "23:59:59"; private static final Logger logger = LoggerFactory .getLogger(RedisCommons.class); /** * 用于限制每日执行次数的场景。 * 根据传入的redisKey进行自增,若超过计数上限topCount返回false,否则返回true * 建议在key中增加当日日期,以确保每天的count是新的。 * @param redisKey 场景对应的redisKey * @param topCount 计数上限 * @return 超过计数上限topCount返回false,否则返回true */ public boolean increaseOneCountInDay(String redisKey,String hashKey, int topCount ) { try { BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(redisKey); if(boundHashOperations.get(hashKey) == null) { boundHashOperations.put(hashKey,"0"); //设置缓存过期时间 String date = DateTime.now().toString(DateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN_SHORT); boundHashOperations.expireAt(DateTimeUtils.createDate(date, redisOrderTopCountTimeoutTime)); } //判断是否超过上限 return boundHashOperations.increment(hashKey, 1) <= topCount; } catch (Exception e) { logger.error("increaseOneCountInDay error:",e); } //异常情况,保证流程走下去 return true; } /** * 将 key 的值设为 value ,当且仅当 key 不存在 * @param redisKey * @param timeout * @param unit * @return 不存在,set 成功 = true;已经存在=false */ public boolean setIfAbsent(String redisKey,long timeout, TimeUnit unit) { return setIfAbsent(redisKey, "", timeout, unit); } /** * 原子check&set操作 * @param redisKey * @param value * @param timeout * @param unit * @return */ public boolean setIfAbsent(String redisKey,String value,long timeout, TimeUnit unit) { boolean result = false; if(redisSwitch){ try { BoundValueOperations boundValueOperations = redisTemplate.boundValueOps(redisKey); result = boundValueOperations.setIfAbsent(value); if(result){ boundValueOperations.expire(timeout, unit); } } catch (Exception e) { logger.error("setIfAbsent error:",e); } } return result; } /** * 添加redis缓存 * * @date 2014年7月10日 * @param redisKey * @param object */ public void set(String redisKey, Object object){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ BoundValueOperations operations = redisTemplate.boundValueOps(redisKey); operations.set(JSON.toJSONString(object)); //设置缓存过期时间 String date = DateTime.now().plusDays(redisTimeoutDay).toString(DateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN_SHORT); operations.expireAt(DateTimeUtils.createDate(date, redisTimeoutTime)); } } catch (Throwable e) { logger.error("set error:",e); } } } /** * 添加redis缓存,设置超时时间 * * @date 2014年7月15日 * @param redisKey 缓存key * @param object 缓存对象 * @param date 超时时间点 */ public void set(String redisKey, Object object, Date date){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ BoundValueOperations operations = redisTemplate.boundValueOps(redisKey); operations.set(JSON.toJSONString(object)); operations.expireAt(date); } } catch (Throwable e) { logger.error("set error:",e); } } } /** * 添加redis缓存,设置超时时间 * 此超时时间会覆盖掉前一个超时时间 * * @date 2014年7月15日 * @param redisKey 缓存key * @param object 缓存对象 * @param timeout 超时时间 * @param unit 超时单位 */ public void set(String redisKey, Object object, long timeout, TimeUnit unit){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(object), timeout, unit); } } catch (Throwable e) { logger.error("set error:",e); } } } /** * 不设置超时时间的set方法 * @param redisKey * @param object */ public void setNoExpire(String redisKey, Object object){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ BoundValueOperations operations = redisTemplate.boundValueOps(redisKey); operations.set(JSON.toJSONString(object)); } } catch (Throwable e) { logger.error("set error:",e); } } } /** * 添加redis的map缓存 * * @date 2014年7月10日 * @param redisKey * @param hashKey * @param object */ public void hset(String redisKey, String hashKey, Object object){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.put(hashKey, JSON.toJSONString(object)); //设置缓存过期时间 String date = DateTime.now().plusDays(redisTimeoutDay).toString(DateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN_SHORT); boundHashOperations.expireAt(DateTimeUtils.createDate(date, redisTimeoutTime)); } } catch (Throwable e) { logger.error("hset error:",e); } } } /** * 添加redis的map缓存,当天过期 * * @date 2014年7月10日 * @param redisKey * @param hashKey * @param object */ public void hsetExpireAtToday(String redisKey, String hashKey, Object object){ if(redisSwitch){ try { if(object != null){ BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.put(hashKey, JSON.toJSONString(object, SerializerFeature.WriteNullListAsEmpty)); //设置缓存过期时间 String date = DateTime.now().toString(DateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN_SHORT); boundHashOperations.expireAt(DateTimeUtils.createDate(date, redisOrderTopCountTimeoutTime)); } } catch (Throwable e) { logger.error("hset error:",e); } } } public void hsetJudgeExpire(String redisKey, String hashKey, Object object){ if(redisSwitch){ try { BoundHashOperations<String,String,String> boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.put(hashKey, JSON.toJSONString(object)); if(boundHashOperations.getExpire() < 0){ boundHashOperations.expire(DEFAULT_CINEMA_TIMEOUT, TimeUnit.SECONDS); } } catch (Throwable e) { logger.error("hset error:",e); } } } public void hsetNoExpire(String redisKey, String hashKey, Object object){ if(redisSwitch){ try { BoundHashOperations<String,String,String> boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.put(hashKey, JSON.toJSONString(object)); } catch (Throwable e) { logger.error("hset error:",e); } } } public void expire(String redisKey,int seconds){ if(redisSwitch){ try{ BoundValueOperations opt = redisTemplate.boundValueOps(redisKey); opt.expire(seconds, TimeUnit.SECONDS); }catch (Throwable e) { logger.error("expire error:",e); } } } /** * 添加redis的map缓存,设置超时时间 * * @date 2014年7月18日 * @param redisKey 缓存key * @param hashKey * @param object 缓存对象 * @param date 超时时间点 */ public void hset(String redisKey, String hashKey, Object object, Date date){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.put(hashKey, JSON.toJSONString(object)); boundHashOperations.expireAt(date); } } catch (Throwable e) { logger.error("hset error:",e); } } } /** * 添加redis的map缓存,设置超时时间 * 此超时时间会覆盖掉前一个超时时间 * * @date 2014年7月15日 * @param redisKey 缓存key * @param hashKey * @param object 缓存对象 * @param timeout 超时时间 * @param unit 超时单位 */ public void hset(String redisKey, String hashKey, Object object, long timeout, TimeUnit unit){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(object)){ BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.put(hashKey, JSON.toJSONString(object)); boundHashOperations.expire(timeout, unit); } } catch (Throwable e) { logger.error("hset error:",e); } } } public void hsetAll(String redisKey,Map<String,String> map, long timeout, TimeUnit unit){ if(redisSwitch){ try { BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(redisKey); boundHashOperations.putAll(map); boundHashOperations.expire(timeout, unit); } catch (Throwable e) { logger.error("hsetAll error:",e); } } } /** * 获取redis非list缓存 * * @date 2014年7月10日 * @param redisKey * @param clazz * @return */ public <T> T get(String redisKey, Class<T> clazz){ if(redisSwitch){ try { String objectJson = (String) redisTemplate.opsForValue().get(redisKey); if(StringUtils.isBlank(objectJson)){ return null; } return JSON.parseObject(objectJson, clazz); } catch (Throwable e) { logger.error("get error:",e); } } return null; } public Long increment(String redisKey,String hashKey, long delta ){ if(redisSwitch){ return redisTemplate.opsForHash().increment(redisKey,hashKey,delta); } return null; } public LinkedHashMap<Long, DiscountWrapper> getLinkedHashMap(String redisKey){ if(redisSwitch){ String s = (String) redisTemplate.opsForValue().get(redisKey); if(StringUtils.isBlank(s)){ return null; } return JSON.parseObject(s,new TypeReference<LinkedHashMap<Long, DiscountWrapper>>(){}); } return null; } /** * 获取redis的list缓存 * * @date 2014年7月10日 * @param redisKey * @param clazz * @return */ public <T> List<T> getList(String redisKey, Class<T> clazz){ if(redisSwitch){ try { String objectJson = (String) redisTemplate.opsForValue().get(redisKey); if(StringUtils.isBlank(objectJson)){ return new ArrayList<T>(); } return JSON.parseArray(objectJson, clazz); } catch (Throwable e) { logger.error("getList error:",e); } } return new ArrayList<T>(); } /** * 获取redis的map缓存 * * @date 2014年7月10日 * @param redisKey * @param hashKey * @param clazz * @return */ public <T> T hget(String redisKey, String hashKey, Class<T> clazz){ if(redisSwitch){ try { String objectJson = (String) redisTemplate.opsForHash().get(redisKey, hashKey); if(StringUtils.isBlank(objectJson)){ return null; } return JSON.parseObject(objectJson, clazz); } catch (Throwable e) { logger.error("hget error:",e); } } return null; } /** * 获取redis中map的list缓存 * * @date 2014年7月10日 * @param redisKey * @param hashKey * @param clazz * @return */ public <T> List<T> hgetList(String redisKey, String hashKey, Class<T> clazz){ if(redisSwitch){ try { String objectJson = (String) redisTemplate.opsForHash().get(redisKey, hashKey); if(StringUtils.isBlank(objectJson)){ return null; } return JSON.parseArray(objectJson, clazz); } catch (Throwable e) { logger.error("hgetList error:",e); } } return new ArrayList<T>(); } /** * 删除redis某个key的缓存 * * @date 2014年7月10日 * @param redisKey */ public void delete(String redisKey){ if(redisSwitch){ try { redisTemplate.delete(redisKey); } catch (Throwable e) { logger.error("delete error:",e); } } } /** * 模糊匹配删除redis某些key的缓存 * * @date 2014年7月10日 * @param redisKey */ public void deleteFuzzy(String fuzzyRedisKey){ if(redisSwitch){ try { redisTemplate.delete(redisTemplate.keys(fuzzyRedisKey)); } catch (Throwable e) { logger.error("delete error:",e); } } } /** * 删除redis中map的key * * @date 2014年7月10日 * @param redisKey * @param hashKey */ public void hdelete(String redisKey, String... hashKeys){ if(redisSwitch){ try { redisTemplate.opsForHash().delete(redisKey, hashKeys); } catch (Throwable e) { logger.error("hdelete error:",e); } } } public Long zadd(String key, Set<TypedTuple<String>> tuples,long second){ if(redisSwitch){ try{ BoundZSetOperations<String,String> opt = redisTemplate.boundZSetOps(key); Long result = opt.add(tuples); opt.expire(second, TimeUnit.SECONDS); return result; }catch(Throwable e){ logger.error("zdd error:",e); } } return null; } public Set<TypedTuple<String>> zrange(String redisKey,Pager pager){ if(redisSwitch){ try{ long start = 0; long end = -1; if(pager != null && !pager.isAll()){ start = (pager.getPageIndex()-1)*pager.getPageNum(); end = start + pager.getPageNum() - 1; } ZSetOperations<String, String> opt = redisTemplate.opsForZSet(); return opt.rangeWithScores(redisKey, start, end); }catch(Throwable e){ logger.error("zrange error:",e); } } return null; } public long zcard (String redisKey){ if(redisSwitch){ try{ ZSetOperations<String, String> opt = redisTemplate.opsForZSet(); return opt.zCard(redisKey); }catch(Throwable e){ logger.error("zcard error:",e); } } return 0; } public boolean zadd(String redisKey,Object value,double score){ if(redisSwitch){ BoundZSetOperations<String,String> opt = redisTemplate.boundZSetOps(redisKey); return opt.add(JSON.toJSONString(value), score); } return false; } public boolean zdelete(String redisKey, Object value){ if(redisSwitch){ BoundZSetOperations<String,String> opt = redisTemplate.boundZSetOps(redisKey); Long result = opt.remove(JSON.toJSONString(value)); if(result != null && result == 1){ return true; } } return false; } public <T> Set<T> zrange(String redisKey,double min,double max, Class<T> clazz){ if(redisSwitch){ BoundZSetOperations<String,String> opt = redisTemplate.boundZSetOps(redisKey); Set<String> set = opt.rangeByScore(min, max); Set<T> result = new LinkedHashSet<T>(set.size()); for(String s : set){ T t = JSON.parseObject(s, clazz); result.add(t); } return result; } return null; } public void zremRangeByScore(String redisKey,double min,double max){ if(redisSwitch){ BoundZSetOperations<String,String> opt = redisTemplate.boundZSetOps(redisKey); opt.removeRangeByScore(min, max); } } public Map<String,String> hgetall(String key){ if(redisSwitch){ try{ HashOperations<String, String, String> opt = redisTemplate.opsForHash(); return opt.entries(key); }catch(Throwable e){ logger.error("hgetall error:",e); } } return null; } public List<Map<String,String>> hgetallBatch(final List<String> redisKeys){ if(redisSwitch){ try{ RedisCallback callback = new RedisCallback() { @Override public Object doInRedis( RedisConnection connection) throws DataAccessException { for(String redisKey: redisKeys){ connection.hGetAll(redisKey.getBytes()); } return null; } }; return (List<Map<String,String>>)redisTemplate.executePipelined(callback, stringRedisSerializer); }catch(Throwable e){ logger.error("hgetall error:",e); } } return null; } /** * 根据hashkeys列表获取缓存列表 * * @date 2014年7月26日 * @param key * @param hashKeys * @return */ public List<String> hgetall(String key, Collection<String> hashKeys){ if(redisSwitch){ try{ HashOperations<String, String, String> opt = redisTemplate.opsForHash(); return opt.multiGet(key, hashKeys); }catch(Throwable e){ logger.error("hgetall error:",e); } } return null; } public <T> List<T> hgetall(String key, Collection<String> hashKeys, Class<T> targetClass){ if(redisSwitch){ try{ HashOperations<String, String, String> opt = redisTemplate.opsForHash(); List<String> jsonList = opt.multiGet(key, hashKeys); if(jsonList != null && !jsonList.isEmpty()){ return JSON.parseArray(jsonList.toString(), targetClass); } }catch(Throwable e){ logger.error("hgetall error:",e); } } return null; } public List<String> hgetBatch(final String redisKey, final List<String> hashKeys){ if(redisSwitch){ try{ RedisCallback callback = new RedisCallback() { @Override public Object doInRedis( RedisConnection connection) throws DataAccessException { for(String hashKey: hashKeys){ connection.hGet(redisKey.getBytes(), hashKey.getBytes()); } return null; } }; return (List<String>)redisTemplate.executePipelined(callback, stringRedisSerializer); }catch(Throwable e){ logger.error("hgetBatch error:",e); } } return null; } public List<Map<String,String>> hgetBatch(final List<String> redisKeys, final String hkey){ if(redisSwitch){ try{ RedisCallback callback = new RedisCallback() { @Override public Object doInRedis( RedisConnection connection) throws DataAccessException { for(String redisKey: redisKeys){ //key is English.All charset ok. connection.hGet(redisKey.getBytes(),hkey.getBytes()); } return null; } }; return (List<Map<String,String>>)redisTemplate.executePipelined(callback, stringRedisSerializer); }catch(Throwable e){ logger.error("hgetall error:",e); } } return null; } //start list api /** * 添加redis的List缓存, 默认当前23:59:59失效 * * @date 2014年12月29日 * @param redisKey * @param object */ public void rpush(String redisKey, Object... objects){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(objects)){ BoundListOperations operations = redisTemplate.boundListOps(redisKey); operations.rightPushAll(objects); //设置缓存过期时间 String date = DateTime.now().toString(DateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN_SHORT); operations.expireAt(DateTimeUtils.createDate(date, redisOrderTopCountTimeoutTime)); } } catch (Throwable e) { logger.error("set error:",e); } } } /** * 添加redis的List缓存 * * @date 2014年12月29日 * @param redisKey * @param timeout 失效时间 * @param unit 时间单位 * @param objects */ public void rpush(String redisKey, long timeout, TimeUnit unit, Object... objects){ if(redisSwitch){ try { if(ObjectUtils.isNotEmpty(objects)){ BoundListOperations operations = redisTemplate.boundListOps(redisKey); operations.rightPushAll(objects); //设置缓存过期时间 String date = DateTime.now().toString(DateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN_SHORT); operations.expireAt(DateTimeUtils.createDate(date, redisOrderTopCountTimeoutTime)); } } catch (Throwable e) { logger.error("set error:",e); } } } /** * 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 end 指定:[0, 10] * * @param <T> * @date 2014年12月29日 * @param redisKey * @param object */ public <T> List<T> lrange(String redisKey, Pager pager){ if(redisSwitch){ try { long start = 0; long end = -1; if(pager != null && !pager.isAll()){ start = (pager.getPageIndex()-1)*pager.getPageNum(); end = start + pager.getPageNum() - 1; } BoundListOperations operations = redisTemplate.boundListOps(redisKey); return operations.range(start, end); } catch (Throwable e) { logger.error("set error:",e); } } return null; } //end list api /** * redis的set数据结构的数据增加。 * @param key redis key * @param values values * @param second 过期时间 * @return 增加的记录数 */ public Long sAdd(String key, List<String> values, long second){ if(redisSwitch){ try{ BoundSetOperations boundSetOperations = redisTemplate.boundSetOps(key); Long result = boundSetOperations.add(values.toArray()); if(second > 0) { boundSetOperations.expire(second, TimeUnit.SECONDS); } return result; }catch(Throwable e){ logger.error("sAdd error:",e); } } return 0L; } /** * redis set的记录数。 * @param key redis key * @return set的记录数 */ public Long sCard(String key){ if(redisSwitch){ try{ return redisTemplate.boundSetOps(key).size(); }catch(Throwable e){ logger.error("sAdd error:",e); } } return 0L; } /** * 弹出redis set的一条记录。 * @param key redis key * @return set value */ public String sPop(String key){ if(redisSwitch){ try{ return (String) redisTemplate.boundSetOps(key).pop(); }catch(Throwable e){ logger.error("sPop error:",e); } } return null; } public boolean sIsMember(String key, String value){ if(redisSwitch){ try{ return redisTemplate.boundSetOps(key).isMember(value); }catch(Throwable e){ logger.error("sIsMember error:",e); } } return true; } /** * 求差集 * @param key 源key * @param otherKey 其他key * @param destKey 目标key */ public void sdiffAndStore(String key, String otherKey, String destKey){ if(redisSwitch){ try{ redisTemplate.boundSetOps(key).diffAndStore(otherKey, destKey); }catch(Throwable e){ logger.error("sdiffAndStore error:",e); } } } /** * 是否存在key * @param key * @return */ public boolean exist(String key){ boolean result = false; if(redisSwitch){ result = redisTemplate.hasKey(key); } return result; } /** * 重置redis的过期时间 * @param redisKey * @return */ public boolean resetExpireTime(String redisKey, long timeout, TimeUnit unit) { if(redisSwitch){ try { return redisTemplate.boundValueOps(redisKey).expire(timeout, unit); } catch (Exception e) { logger.error("resetExpireTime error:",e); return false; } } return true; } public int incr(String key, int i){ if(redisSwitch){ Long l = redisTemplate.boundValueOps(key).increment(i); if(l != null){ return l.intValue(); } } return -1; } public int decr(String key, int i){ if(redisSwitch){ Long l = redisTemplate.boundValueOps(key).increment(-i); if(l != null){ return l.intValue(); } } return -1; } public RedisTemplate getRedisTemplate() { return redisTemplate; } public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public boolean isRedisSwitch() { return redisSwitch; } public void setRedisSwitch(boolean redisSwitch) { this.redisSwitch = redisSwitch; } public int getRedisTimeoutDay() { return redisTimeoutDay; } public void setRedisTimeoutDay(int redisTimeoutDay) { this.redisTimeoutDay = redisTimeoutDay; } public String getRedisTimeoutTime() { return redisTimeoutTime; } public void setRedisTimeoutTime(String redisTimeoutTime) { this.redisTimeoutTime = redisTimeoutTime; } }
5.RedisTest
package com.api.util; import java.util.Arrays; import java.util.List; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.alibaba.fastjson.JSON; import com.api.dao.CinemaDAO; import com.common.consts.RedisKeyConstants; import com.common.pojo.redis.FilmRedis; import com.common.redis.RedisCommons; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:/spring/applicationContext-base.xml","classpath:/spring/applicationContext-dao.xml","classpath:/spring/applicationContext-cache.xml"}) public class RedisTest { @Resource private RedisTemplate<String, String> redisTemplate; @Resource private CinemaDAO cinemaDAO; @Test public void deleteKey(){ //redisTemplate.delete(RedisKeyConstants.FILM); //redisTemplate.delete(RedisKeyConstants.CINEMA_FILMS); redisTemplate.delete(RedisKeyConstants.TRANSFERRED_LIST + 1); } @Test public void getKey(){ RedisCommons redisCommons = new RedisCommons(); redisCommons.setRedisTemplate(redisTemplate); System.err.println(redisTemplate.opsForHash().get(RedisKeyConstants.FILM, "2050")); System.err.println(redisTemplate.opsForHash().get(RedisKeyConstants.FILM_HOTS, "315")); //System.err.println(redisTemplate.opsForHash().get(RedisKeyConstants.CINEMA_FILMS, "25018")); //List<FilmRedis> filmRedisList = redisCommons.hgetall(RedisKeyConstants.FILM, Arrays.asList("1", "2", "3"), FilmRedis.class); //System.err.println(JSON.toJSONString(filmRedisList)); } // @Test // public void SetKey(){ // redisTemplate.opsForHash().put(RedisKeyConstants.CINEMA, "cinema_jijun", "jijun"); // } @Test public void testHasKey(){ System.out.println(redisTemplate.keys(RedisKeyConstants.FILM_HOTS + "*")); } @Test public void clearRedis(){ //命令删除:/usr/bin/redis-cli keys "tickets.*" | xargs /usr/bin/redis-cli del redisTemplate.delete(redisTemplate.keys("tickets.*")); } }
相关推荐
SpringRedis哨兵配置,包括RedisTemplete、CacheManger
**Spring Redis 集成详解** 在现代的Java开发中,Spring框架因其强大的功能和灵活性而备受青睐。随着数据存储技术的发展,Redis作为一款高性能的键值存储系统,被广泛应用于缓存、消息队列等多个场景。Spring为...
**Spring Redis 缓存实例详解** 在现代的Web应用程序开发中,缓存是提高系统性能的关键技术之一。Spring框架提供了一种优雅的方式来整合缓存管理,其中包括对Redis的支持。Redis是一个开源的、高性能的键值数据库,...
Spring框架与Redis的集成,使得开发者可以充分利用Redis的高效特性和Spring的便捷性来构建分布式缓存系统。本教程将深入讲解如何进行Spring与Redis的整合,并提供详细的注释说明。 一、Spring Redis简介 Spring ...
在Spring Redis注解开发中,我们通常利用Spring Data Redis库来简化与Redis数据库的交互。以下是对标题和描述中涉及的知识点的详细说明: 1. **Spring Data Redis**:Spring Data Redis是Spring框架的一个模块,它...
### Spring Redis操作手册知识点解析 #### 一、文档概述与目的 - **文档基本信息:** - **文档名称:** Spring-data-redis使用手册 - **文档编号:** 2012-02-14 - **作者:** 黄承开 - **最后发布时间:** ...
在Java开发领域,Spring框架与Redis的整合是常见的数据存储和缓存解决方案。Spring提供了一套完善的支持,使得开发者能够方便地在应用中集成...在`SpringRedis`项目中,你将看到这些概念如何转化为具体的代码实现。
spring和redis集成有很多方式,看到网上很多都是使用redistemplate自己去做redis 的一些操作,但是对于我们开发来说,肯定是使用越方便越好,于是乎就有了spring的对redis或者memcahe这些换成框架的封装,只需要引入...
标题中的“springredis整合及操作”指的是在Spring框架中整合并使用Redis作为缓存或数据库的过程。描述中提到,Redis是一个高效key-value存储系统,具备多种数据结构支持,如字符串、链表、集合、有序集合和哈希类型...
首先,`redis.properties`文件是Spring与Redis连接的关键配置文件。在该文件中,通常会包含以下内容: 1. Redis服务器的主机名或IP地址:`redis.host=localhost` 2. Redis服务器的端口号:`redis.port=6379` 3. ...
在IT行业中,Spring框架与Redis的结合是常见的数据缓存解决方案。本文将深入探讨如何使用Spring Data Redis构建一个Redis集群,以及如何通过Spring框架来操作Redis集群,存储对象集合,并提供一个基于Maven的可运行...
在Spring框架中,我们可以使用`spring-data-redis`库来操作Redis,其中包含了对Redis集群的支持。你需要在Spring的配置文件中声明`JedisConnectionFactory`,并配置集群的相关参数,例如节点地址、端口等。这里是一...
Spring框架与Redis的集成是现代Java开发中常见的一种技术组合,用于实现高效、可扩展的数据缓存和存储。Spring Data Redis是Spring Framework的一个模块,它为Redis提供了丰富的支持,包括连接管理、序列化、命令...
根据网上教程,自己整理学习的一份demo,记录一下,以便以后翻阅
在Maven项目中,可以在pom.xml文件中添加`spring-data-redis`和`jedis`库,这两个库分别提供了Spring对Redis的支持和Jedis,一个Java客户端连接Redis。 ```xml <groupId>org.springframework.data <artifactId>...
Spring Data Redis是Spring框架的一个模块,旨在简化Redis操作。它提供了RedisTemplate和StringRedisTemplate两个核心模板类,用于执行Redis命令。这两个模板类提供了丰富的API,使得开发者能够方便地进行键值操作...
分布式缓存技术redis学习系列----深入理解SpringRedis的使用.doc
首先,你需要在项目的`pom.xml`或`build.gradle`文件中添加Spring和Redis的相关依赖,如Spring Data Redis、Spring Session以及Redis的客户端库(例如Jedis或Lettuce)。 3. **配置Redis连接**: 创建一个`spring...
Spring Redis 是一个集成Redis数据库与Spring框架的模块,它提供了对Redis数据存储的全面支持,使得在Java应用中使用Redis变得更加便捷。这个"Maven整合工程"意味着该项目使用Maven作为构建工具,通过管理依赖关系来...