这编文章主要介绍了springboot整合redis,以及redis配置和一些redis操作数据的工具类。
首先倒入redis依赖

一.依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

二.配置文件

创建一个redis.properties配置redis
redis.host=localhost
redis.port=6379
redis.password=
redis.database=1
redis.maxActive=8
redis.maxWait=-1
redis.maxIdle=8
redis.minIdle=1
redis.timeOut=0
创建一个与redis.properties的配置类方便直接使用配置的参数。

@Configuration
@PropertySource(value = "classpath:redis.properties")
@ConfigurationProperties(prefix = "redis")
public class RedisConfigProperties {//   主机地址  public String host;//端口public int port;//密码没有不填写public String password;// Redis数据库索引(默认为0)public int database;//最大活跃连接public int maxActive;//连接池最大阻塞等待时间(使用负值表示没有限制)public int maxWait;//连接池中的最大空闲连接public int maxIdle;//连接池中的最小空闲连接public int minIdle;//连接超时时间(毫秒)public int timeOut;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getDatabase() {return database;}public void setDatabase(int database) {this.database = database;}public int getMaxActive() {return maxActive;}public void setMaxActive(int maxActive) {this.maxActive = maxActive;}public int getMaxWait() {return maxWait;}public void setMaxWait(int maxWait) {this.maxWait = maxWait;}public int getMaxIdle() {return maxIdle;}public void setMaxIdle(int maxIdle) {this.maxIdle = maxIdle;}public int getMinIdle() {return minIdle;}public void setMinIdle(int minIdle) {this.minIdle = minIdle;}public int getTimeOut() {return timeOut;}public void setTimeOut(int timeOut) {this.timeOut = timeOut;}}

三.整合配置

听说某宝的fastjson的json和序列化性能很好这里的序列化我们使用fastjson的序列化。
创建一个自定义序列化配置类

public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");private Class<T> clazz;public FastJson2JsonRedisSerializer(Class<T> clazz) {super();this.clazz = clazz;}public byte[] serialize(T t) throws SerializationException {if (t == null) {return new byte[0];}return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);}public T deserialize(byte[] bytes) throws SerializationException {if (bytes == null || bytes.length <= 0) {return null;}String str = new String(bytes, DEFAULT_CHARSET);return (T) JSON.parseObject(str, clazz);}
}

将项目进行整合

@Configuration
public class RedisConfig {@Autowiredprivate RedisConfigProperties redis;@Beanpublic RedisSerializer fastJson2JsonRedisSerializer() {     ParserConfig.getGlobalInstance().setAutoTypeSupport(true); return new FastJson2JsonRedisSerializer<Object>(Object.class);}@Beanpublic RedisConnectionFactory redisConnectionFactory() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//最大空闲接连jedisPoolConfig.setMaxIdle(redis.getMaxIdle());//最小空闲连接jedisPoolConfig.setMinIdle(redis.getMinIdle());//连接池最大阻塞等待时间jedisPoolConfig.setMaxWaitMillis(redis.getMaxWait());JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();//主机地址jedisConnectionFactory.setHostName(redis.getHost())//端口jedisConnectionFactory.setPort(redis.getPort());//密码jedisConnectionFactory.setPassword(redis.getPassword());//索引jedisConnectionFactory.setDatabase(redis.getDatabase());//超时时间jedisConnectionFactory.setTimeout(redis.getTimeOut());jedisConnectionFactory.setUsePool(true);    jedisConnectionFactory.setPoolConfig(jedisPoolConfig);return jedisConnectionFactory;}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory, RedisSerializer fastJson2JsonRedisSerializer) {StringRedisTemplate redisTemplate = new StringRedisTemplate(factory);        redisTemplate.setConnectionFactory(redisConnectionFactory());//redis   开启事务redisTemplate.setEnableTransactionSupport(true);//hash  使用jdk  的序列化redisTemplate.setHashValueSerializer(fastJson2JsonRedisSerializer/*new JdkSerializationRedisSerializer()*/);//StringRedisSerializer  key  序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer());//keySerializer  对key的默认序列化器。默认值是StringSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());//  valueSerializerredisTemplate.setValueSerializer(fastJson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
}

四.操作数据工具类

接口:

public interface BaseRedisDao<K, V> {/*** 用户排序通过注册时间的 权重值* @param date* @return*/double getCreateTimeScore(long date);/*** 获取Redis中所有的键的key* @return*/Set<K> getAllKeys();/*** 获取所有的普通key-value* @return*/Map<K,V> getAllString();/*** 获取所有的Set -key-value* @return*/Map<K,Set<V>> getAllSet();/*** 获取所有的ZSet正序  -key-value 不获取权重值* @return*/Map<K,Set<V>> getAllZSetReverseRange();/*** 获取所有的ZSet倒序  -key-value 不获取权重值* @return*/Map<K,Set<V>> getAllZSetRange();/*** 获取所有的List -key-value* @return*/Map<K,List<V>> getAllList();/*** 获取所有的Map -key-value* @return*/Map<K,Map<K,V>> getAllMap();/*** 添加一个list* @param key* @param objectList*/void addList(K key, List<V> objectList);/*** 向list中增加值* @param key* @param obj* @return 返回在list中的下标*/long addList(K key,V obj);/*** 向list中增加值* @param key* @param obj* @return 返回在list中的下标*/long addList(K key,V ...obj);/**** 输出list* @param key List的key* @param s 开始下标* @param e 结束的下标* @return*/List<V> getList(K key, long s, long e);/*** 输出完整的list* @param key*/List<V> getList(K key);/*** 获取list集合中元素的个数* @param key* @return*/long getListSize(K key);/*** 移除list中某值* 移除list中 count个value为object的值,并且返回移除的数量,* 如果count为0,或者大于list中为value为object数量的总和,* 那么移除所有value为object的值,并且返回移除数量* @param key* @param object* @return 返回移除数量*/long removeListValue(K key,V object);/*** 移除list中某值* @param key* @param object* @return 返回移除数量*/long removeListValue(K key,V... object);/*** 批量删除key对应的value* @param keys*/void remove(final K... keys);/*** 删除缓存* 根据key精确匹配删除* @param key*/void remove(final K key);/*** 通过分数删除ZSet中的值* @param key* @param s* @param e*/void removeZSetRangeByScore(String key,double s , double e);/*** 设置Set的过期时间* @param key* @param time* @return*/Boolean setSetExpireTime(String key,Long time);/*** 设置ZSet的过期时间* @param key* @param time* @return*/Boolean setZSetExpireTime(String key,Long time);/*** 判断缓存中是否有key对应的value* @param key* @return*/boolean exists(final K key);/*** 读取String缓存 可以是对象* @param key* @return*/V get(final K key);/*** 读取String缓存 可以是对象* @param key* @return*/List<V> get(final K... key);/*** 读取缓存 可以是对象 根据正则表达式匹配* @param regKey* @return*/List<Object> getByRegular(final K regKey);/*** 写入缓存 可以是对象* @param key* @param value*/void set(final K key, V value);/*** 写入缓存* @param key* @param value* @param expireTime 过期时间 -单位s* @return*/void set(final K key, V value, Long expireTime);/*** 设置一个key的过期时间(单位:秒)* @param key* @param expireTime* @return*/boolean setExpireTime(K key, Long expireTime);/*** 获取key的类型* @param key* @return*/DataType getType(K key);/*** 删除map中的某个对象* @param key   map对应的key* @param field map中该对象的key*/void removeMapField(K key, V... field);/** 获取map对象* @param key map对应的key* @return*/Map<K,V> getMap(K key);/** 获取map对象* @param key map对应的key* @return*/Long getMapSize(K key);/*** 获取map缓存中的某个对象* @param key map对应的key* @param field map中该对象的key* @return*/<T> T getMapField(K key, K field);/*** 判断map中对应key的key是否存在* @param key map对应的key* @return*/Boolean hasMapKey(K key,K field);/*** 获取map对应key的value* @param key map对应的key* @return*/List<V> getMapFieldValue(K key);/*** 获取map的key* @param key map对应的key* @return*/Set<V> getMapFieldKey(K key);/*** 添加map* @param key* @param map*/void addMap(K key, Map<K,V> map);/*** 向key对应的map中添加缓存对象* @param key   cache对象key* @param field map对应的key* @param value     值*/void addMap(K key, K field, Object value);/*** 向key对应的map中添加缓存对象* @param key   cache对象key* @param field map对应的key* @param time 过期时间-整个MAP的过期时间* @param value     值*/void addMap(K key, K field, V value,long time);/*** 向set中加入对象* @param key  对象key* @param obj  值*/void addSet(K key, V... obj);/*** 处理事务时锁定key* @param key*/void watch(String key);/*** 移除set中的某些值* @param key  对象key* @param obj  值*/long removeSetValue(K key, V obj);/*** 移除set中的某些值* @param key  对象key* @param obj  值*/long removeSetValue(K key, V... obj);/*** 获取set的对象数* @param key  对象key*/long getSetSize(K key);/*** 判断set中是否存在这个值* @param key  对象key*/Boolean hasSetValue(K key,V obj);/*** 获得整个set* @param key  对象key*/Set<V> getSet(K key);/*** 获得set 并集* @param key* @param otherKey* @return*/Set<V> getSetUnion(K key,K otherKey);/*** 获得set 并集* @param key* @param set* @return*/Set<V> getSetUnion(K key,Set<Object> set);/*** 获得set 交集* @param key* @param otherKey* @return*/Set<V> getSetIntersect(K key,K otherKey);/*** 获得set 交集* @param key* @param set* @return*/Set<V> getSetIntersect(K key,Set<Object> set);/*** 模糊移除 支持*号等匹配移除* @param blears*/void removeBlear(K... blears);/*** 修改key名 如果不存在该key或者没有修改成功返回false* @param oldKey* @param newKey* @return*/Boolean renameIfAbsent(String oldKey,String newKey);/*** 模糊移除 支持*号等匹配移除* @param blear*/void removeBlear(K blear);/*** 根据正则表达式来移除key-value* @param blears*/void removeByRegular(String... blears);/*** 根据正则表达式来移除key-value* @param blears*/void removeByRegular(String blears);/*** 根据正则表达式来移除 Map中的key-value* @param key* @param blears*/void removeMapFieldByRegular(K key,K... blears);/*** 根据正则表达式来移除 Map中的key-value* @param key* @param blear*/void removeMapFieldByRegular(K key,K blear);/*** 移除key 对应的value* @param key* @param value* @return*/Long removeZSetValue(K key, V... value);/*** 移除key ZSet* @param key* @return*/void removeZSet(K key);/***删除,键为K的集合,索引start<=index<=end的元素子集* @param key* @param start* @param end* @return*/void removeZSetRange(K key,Long start,Long end);/*** 并集 将key对应的集合和key1对应的集合合并到key2中* 如果分数相同的值,都会保留* 原来key2的值会被覆盖* @param key* @param key1* @param key2*/void setZSetUnionAndStore(String key,String key1, String key2);/*** 获取整个有序集合ZSET,正序* @param key*/<T> T getZSetRange(K key);/*** 获取有序集合ZSET* 键为K的集合,索引start<=index<=end的元素子集,正序* @param key* @param start 开始位置* @param end 结束位置*/<T> T getZSetRange(K key,long start,long end);/*** 获取整个有序集合ZSET,倒序* @param key*/Set<Object> getZSetReverseRange(K key);/*** 获取有序集合ZSET* 键为K的集合,索引start<=index<=end的元素子集,倒序* @param key* @param start 开始位置* @param end 结束位置*/Set<V> getZSetReverseRange(K key,long start,long end);/*** 通过分数(权值)获取ZSET集合 正序 -从小到大* @param key* @param start* @param end* @return*/Set<V> getZSetRangeByScore(String key, double start, double end);/*** 通过分数(权值)获取ZSET集合 倒序 -从大到小* @param key* @param start* @param end* @return*/Set<V> getZSetReverseRangeByScore(String key, double start, double end);/*** 键为K的集合,索引start<=index<=end的元素子集* 返回泛型接口(包括score和value),正序* @param key* @param start* @param end* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetRangeWithScores(K key, long start, long end);/*** 键为K的集合,索引start<=index<=end的元素子集* 返回泛型接口(包括score和value),倒序* @param key* @param start* @param end* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetReverseRangeWithScores(K key, long start, long end);/*** 键为K的集合* 返回泛型接口(包括score和value),正序* @param key* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetRangeWithScores(K key);/*** 键为K的集合* 返回泛型接口(包括score和value),倒序* @param key* @return*/Set<ZSetOperations.TypedTuple<V>> getZSetReverseRangeWithScores(K key);/*** 键为K的集合,sMin<=score<=sMax的元素个数* @param key* @param sMin* @param sMax* @return*/long getZSetCountSize(K key,double sMin,double sMax);/*** 获取Zset 键为K的集合元素个数* @param key* @return*/long getZSetSize(K key);/*** 获取键为K的集合,value为obj的元素分数* @param key* @param value* @return*/double getZSetScore(K key,V value);/*** 元素分数增加,delta是增量* @param key* @param value* @param delta* @return*/double incrementZSetScore(K key,V value,double delta);/*** 添加有序集合ZSET* 默认按照score升序排列,存储格式K(1)==V(n),V(1)=S(1)* @param key* @param score* @param value* @return*/Boolean addZSet(String key ,double score, Object value);/*** 添加有序集合ZSET* @param key* @param value* @return*/Long addZSet(K key,TreeSet<V> value);/*** 添加有序集合ZSET* @param key* @param score* @param value* @return*/Boolean addZSet(K key,double[] score, Object[] value);
}

实现类

@Repository("redisHandle")
public class RedisHandle implements BaseRedisDao<String, Object> {private Logger logger = LoggerFactory.getLogger(this.getClass());@Resource(name="redisTemplate")protected RedisTemplate redisTemplate;/*** 出异常,重复操作的次数*/private static Integer times = 5;public double getCreateTimeScore(long date) {return date/ 100000.0;}public Set<String> getAllKeys() {return redisTemplate.keys("*");}public Map<String, Object> getAllString() {Set<String> stringSet = getAllKeys();Map<String, Object> map = new HashMap<String, Object>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.STRING) {map.put(k, get(k));}}return map;}public Map<String, Set<Object>> getAllSet() {Set<String> stringSet = getAllKeys();Map<String, Set<Object>> map = new HashMap<String, Set<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.SET) {map.put(k, getSet(k));}}return map;}public Map<String, Set<Object>> getAllZSetRange() {Set<String> stringSet = getAllKeys();Map<String, Set<Object>> map = new HashMap<String, Set<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.ZSET) {logger.debug("k:"+k);map.put(k, getZSetRange(k));}}return map;}public Map<String, Set<Object>> getAllZSetReverseRange() {Set<String> stringSet = getAllKeys();Map<String, Set<Object>> map = new HashMap<String, Set<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.ZSET) {map.put(k, getZSetReverseRange(k));}}return map;}public Map<String, List<Object>> getAllList() {Set<String> stringSet = getAllKeys();Map<String, List<Object>> map = new HashMap<String, List<Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.LIST) {map.put(k, getList(k));}}return map;}public Map<String, Map<String, Object>> getAllMap() {Set<String> stringSet = getAllKeys();Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();Iterator<String> iterator = stringSet.iterator();while (iterator.hasNext()) {String k = iterator.next();if (getType(k) == DataType.HASH) {map.put(k, getMap(k));}}return map;}public void addList(String key, List<Object> objectList) {for (Object obj : objectList) {addList(key, obj);}}public long addList(String key, Object obj) {return redisTemplate.boundListOps(key).rightPush(obj);}public long addList(String key, Object... obj) {return redisTemplate.boundListOps(key).rightPushAll(obj);}public List<Object> getList(String key, long s, long e) {return redisTemplate.boundListOps(key).range(s, e);}public List<Object> getList(String key) {return redisTemplate.boundListOps(key).range(0, getListSize(key));}public long getListSize(String key) {return redisTemplate.boundListOps(key).size();}public long removeListValue(String key, Object object) {return redisTemplate.boundListOps(key).remove(0, object);}public long removeListValue(String key, Object... objects) {long r = 0;for (Object object : objects) {r += removeListValue(key, object);}return r;}public void remove(String... key) {if (key != null && key.length > 0) {if (key.length == 1) {remove(key[0]);} else {redisTemplate.delete(CollectionUtils.arrayToList(key));}}}public void removeBlear(String... blears) {for (String blear : blears) {removeBlear(blear);}}public Boolean renameIfAbsent(String oldKey, String newKey) {return redisTemplate.renameIfAbsent(oldKey, newKey);}public void removeBlear(String blear) {redisTemplate.delete(redisTemplate.keys(blear));}public void removeByRegular(String... blears) {for (String blear : blears) {removeBlear(blear);}}public void removeByRegular(String blear) {Set<String> stringSet = getAllKeys();for (String s : stringSet) {if (Pattern.compile(blear).matcher(s).matches()) {redisTemplate.delete(s);}}}public void removeMapFieldByRegular(String key, String... blears) {for (String blear : blears) {removeMapFieldByRegular(key, blear);}}public void removeMapFieldByRegular(String key, String blear) {Map<String, Object> map = getMap(key);Set<String> stringSet = map.keySet();for (String s : stringSet) {if (Pattern.compile(blear).matcher(s).matches()) {redisTemplate.boundHashOps(key).delete(s);}}}public Long removeZSetValue(String key, Object... value) {return redisTemplate.boundZSetOps(key).remove(value);}public void removeZSet(String key) {removeZSetRange(key, 0L, getZSetSize(key));}public void removeZSetRange(String key, Long start, Long end) {redisTemplate.boundZSetOps(key).removeRange(start, end);}public void setZSetUnionAndStore(String key,String key1, String key2) {redisTemplate.boundZSetOps(key).unionAndStore(key1,key2);}public Set<Object> getZSetRange(String key) {return getZSetRange(key, 0, getZSetSize(key));}public Set<Object> getZSetRange(String key, long s, long e) {return redisTemplate.boundZSetOps(key).range(s, e);}public Set<Object> getZSetReverseRange(String key) {return getZSetReverseRange(key, 0, getZSetSize(key));}public Set<Object> getZSetReverseRange(String key, long start, long end) {return redisTemplate.boundZSetOps(key).reverseRange(start, end);}public Set<Object> getZSetRangeByScore(String key, double start, double end) {return redisTemplate.boundZSetOps(key).rangeByScore(start, end);}public Set<Object> getZSetReverseRangeByScore(String key, double start, double end) {return redisTemplate.boundZSetOps(key).reverseRangeByScore(start, end);}public Set<ZSetOperations.TypedTuple<Object>> getZSetRangeWithScores(String key, long start, long end) {return redisTemplate.boundZSetOps(key).rangeWithScores(start, end);}public Set<ZSetOperations.TypedTuple<Object>> getZSetReverseRangeWithScores(String key, long start, long end) {return redisTemplate.boundZSetOps(key).reverseRangeWithScores(start, end);}public Set<ZSetOperations.TypedTuple<Object>> getZSetRangeWithScores(String key) {return getZSetRangeWithScores(key, 0, getZSetSize(key));}public Set<ZSetOperations.TypedTuple<Object>> getZSetReverseRangeWithScores(String key) {return getZSetReverseRangeWithScores(key, 0, getZSetSize(key));}public long getZSetCountSize(String key, double sMin, double sMax) {return redisTemplate.boundZSetOps(key).count(sMin, sMax);}public long getZSetSize(String key) {return redisTemplate.boundZSetOps(key).size();}public double getZSetScore(String key, Object value) {return redisTemplate.boundZSetOps(key).score(value);}public double incrementZSetScore(String key, Object value, double delta) {return redisTemplate.boundZSetOps(key).incrementScore(value, delta);}public Boolean addZSet(String key, double score, Object value) {return redisTemplate.boundZSetOps(key).add(value, score);}public Long addZSet(String key, TreeSet<Object> value) {return redisTemplate.boundZSetOps(key).add(value);}public Boolean addZSet(String key, double[] score, Object[] value) {if (score.length != value.length) {return false;}for (int i = 0; i < score.length; i++) {if (addZSet(key, score[i], value[i]) == false) {return false;}}return true;}public void remove(String key) {if (exists(key)) {redisTemplate.delete(key);}}public void removeZSetRangeByScore(String key,double s , double e) {redisTemplate.boundZSetOps(key).removeRangeByScore(s,e);}public Boolean setSetExpireTime(String key, Long time) {return redisTemplate.boundSetOps(key).expire(time, TimeUnit.SECONDS);}public Boolean setZSetExpireTime(String key, Long time) {return redisTemplate.boundZSetOps(key).expire(time, TimeUnit.SECONDS);}public boolean exists(String key) {return redisTemplate.hasKey(key);}public Object get(int key) {return this.get(String.valueOf(key));}public Object get(long key) {return this.get(String.valueOf(key));}public Object get(String key) {return redisTemplate.boundValueOps(key).get();}public List<Object> get(String... keys) {List<Object> list = new ArrayList<Object>();for (String key : keys) {list.add(get(key));}return list;}public List<Object> getByRegular(String regKey) {Set<String> stringSet = getAllKeys();List<Object> objectList = new ArrayList<Object>();for (String s : stringSet) {if (Pattern.compile(regKey).matcher(s).matches() && getType(s) == DataType.STRING) {objectList.add(get(s));}}return objectList;}public void set(long key, Object value) {this.set(String.valueOf(key) ,value);}public void set(int key, Object value) {this.set(String.valueOf(key) ,value);}public void set(String key, Object value) {redisTemplate.boundValueOps(key).set(value);}public void set(String key, Object value, Long expireTime) {redisTemplate.boundValueOps(key).set(value, expireTime, TimeUnit.SECONDS);}public boolean setExpireTime(String key, Long expireTime) {return redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);}public DataType getType(String key) {return redisTemplate.type(key);}public void removeMapField(String key, Object... field) {redisTemplate.boundHashOps(key).delete(field);}public Long getMapSize(String key) {return redisTemplate.boundHashOps(key).size();}public Map<String, Object> getMap(String key) {return redisTemplate.boundHashOps(key).entries();}public <T> T getMapField(String key, String field) {return (T) redisTemplate.boundHashOps(key).get(field);}public Boolean hasMapKey(String key, String field) {return redisTemplate.boundHashOps(key).hasKey(field);}public List<Object> getMapFieldValue(String key) {return redisTemplate.boundHashOps(key).values();}public Set<Object> getMapFieldKey(String key) {return redisTemplate.boundHashOps(key).keys();}public void addMap(String key, Map<String, Object> map) {redisTemplate.boundHashOps(key).putAll(map);}public void addMap(String key, String field, Object value) {redisTemplate.boundHashOps(key).put(field, value);}public void addMap(String key, String field, Object value, long time) {redisTemplate.boundHashOps(key).put(field, value);redisTemplate.boundHashOps(key).expire(time, TimeUnit.SECONDS);}public void watch(String key) {redisTemplate.watch(key);}public void addSet(String key, Object... obj) {redisTemplate.boundSetOps(key).add(obj);}public long removeSetValue(String key, Object obj) {return redisTemplate.boundSetOps(key).remove(obj);}public long removeSetValue(String key, Object... obj) {if (obj != null && obj.length > 0) {return redisTemplate.boundSetOps(key).remove(obj);}return 0L;}public long getSetSize(String key) {return redisTemplate.boundSetOps(key).size();}public Boolean hasSetValue(String key, Object obj) {Boolean boo = null;int t =0;while (true){try {boo = redisTemplate.boundSetOps(key).isMember(obj);break;} catch (Exception e) {logger.error("key[" + key + "],obj[" + obj + "]判断Set中的值是否存在失败,异常信息:" + e.getMessage());t++;}if(t>times){break;}}logger.info("key[" + key + "],obj[" + obj + "]是否存在,boo:" + boo);return boo;}public Set<Object> getSet(String key) {return redisTemplate.boundSetOps(key).members();}public Set<Object> getSetUnion(String key, String otherKey) {return redisTemplate.boundSetOps(key).union(otherKey);}public Set<Object> getSetUnion(String key, Set<Object> set) {return redisTemplate.boundSetOps(key).union(set);}public Set<Object> getSetIntersect(String key, String otherKey) {return redisTemplate.boundSetOps(key).intersect(otherKey);}public Set<Object> getSetIntersect(String key, Set<Object> set) {return redisTemplate.boundSetOps(key).intersect(set);}
}

五.单元测试
创建一个测试的base了后面的类只需要继承这个父类即可

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=App.class)
@WebAppConfiguration
public class BaseTest {}

测试:

public class RedisTest extends BaseTest {private final Logger logger = LoggerFactory.getLogger(this.getClass());@ResourceRedisHandle rs;@Testpublic void RedisTest() throws Exception {rs.set(1, "11");System.out.println(rs.get(1));  }}

文章来源: http://www.haha174.top/article/details/251216
项目源码: https://github.com/haha174/boot.git

Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类相关推荐

  1. Spring Boot第五篇:springboot整合 beatlsql

    BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用. beatls ...

  2. Spring Boot 学习之旅

    1. Spring Boot默认读取的application.properties有点坑,并没有主动去掉每一行后边的空格,如 encoding.spring.thymeleaf.encoding=UT ...

  3. Spring Boot 学习(一) 快速搭建SpringBoot 项目

    快速搭建一个 Spring Boot 项目 部分参考于<深入实践Spring Boot>.<Spring实战 第四版>与程序猿DD的有关博客. 参考(嘟嘟独立博客):http: ...

  4. 开启spring boot学习之旅

    1.为什么要学习spring boot 2.了解其加载流程 3.优化现有的项目 转载于:https://www.cnblogs.com/tantop/p/11300019.html

  5. Spring Boot第四篇:SpringBoot 整合JPA

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA 的目标之一是制定一个可以由很多供应商 ...

  6. Spring Boot学习笔记-进阶(3)

    文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...

  7. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  8. 超赞:不愧是阿里内部“Spring boot学习笔记”从头到尾,全是精华

    spring boot为何会出现? 随着动态语言的流行(Ruby.Groovy. Scala. Node.js),Java 的开发显得格外的笨重:繁多的配置.低下的开发效率.复杂的部署流程以及第三方技 ...

  9. 八个开源的 Spring Boot 学习资源,你值得拥有

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 转载自:牧马小子 Spring ...

最新文章

  1. python的序列包括什么_一文读懂什么是序列 (sequence)
  2. TCPIP / LAN、WAN、、VLAN、WLAN 和 WIFI 的区别和联系
  3. python定义方法继承类_Python类的定义、继承及类对象使用方法简明教程
  4. transform、transition 动画效果
  5. 推荐系统--联邦学习下的矩阵分解(6)
  6. 【嵌入式Linux】嵌入式Linux应用开发基础知识之串口应用编程
  7. Word文档批量替换工具
  8. 面向开发人员的 27种Vuejs开发工具
  9. MyEclipse10破解 运行run.bat闪退
  10. rockchip wificountry code
  11. TCP/IP协议头部结构
  12. 微信公众平台数据统计功能的作用是什么?
  13. 【OpenCV 4】图像像素的归一化
  14. 蚁群算法ACO求解TSP问题
  15. Tensorflow MobileNet移动端迁移学习指南
  16. python 将JS(JavaScript)的json格式字符串转换为python的字典格式
  17. 大疆TT无人机编程初体验,教你对拥抱开源的无人机为所欲为!
  18. 岁月如水-指间流逝-难觅难留
  19. 装个JCreator+JDK文档
  20. JQuery DataGrid 中文文档

热门文章

  1. 淘淘商城第91讲——SSO系统分析
  2. QQ大数据:今年中秋节,90后最想家
  3. 同意词(SYNONYM)
  4. 离散数学——全序/偏序关系及应用
  5. INF文件语法及书写规范
  6. BZOJ 2563 阿狸和桃子的游戏 贪心
  7. 三明一中2021查询高考成绩,2021年三明高中学校排名及录取分数线排名
  8. GPU温度等基本信息
  9. windows文件共享给 vmware 中centos8
  10. 学生修改信息之‘3021’问题