zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

SpringBoot Redis序列化配置详解编程语言

2023-06-13 09:20:46 时间
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Configuration @Component public class RedisConfig extends CachingConfigurerSupport { private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class); public RedisConfig(){ logger.info("init RedisConfig..."); /** * 生成key的策略 * @return @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); return sb.toString(); /** * 管理缓存 * @param redisTemplate * @return @SuppressWarnings("rawtypes") @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); //设置缓存过期时间 // rcm.setDefaultExpiration(60);//秒 return rcm; /** * RedisTemplate配置 * @param factory * @return @Bean public RedisTemplate String, String redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer);//如果key是String 需要配置一下StringSerializer,不然key会乱码 /XX/XX template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; }

RedisUtils.java Redis工具类

import org.apache.commons.lang3.StringUtils; 

import org.slf4j.Logger; 

import org.slf4j.LoggerFactory; 

import org.springframework.beans.factory.annotation.Autowired; 

import org.springframework.data.redis.connection.DataType; 

import org.springframework.data.redis.core.HashOperations; 

import org.springframework.data.redis.core.RedisTemplate; 

import org.springframework.data.redis.core.ValueOperations; 

import org.springframework.stereotype.Component; 

import java.io.Serializable; 

import java.util.Arrays; 

import java.util.List; 

import java.util.Map; 

import java.util.Set; 

import java.util.concurrent.TimeUnit; 

 * redicache 工具类 

@SuppressWarnings("unchecked") 

@Component 

public class RedisUtils { 

 private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); 

 private static final PropertiesUtils redisProper = new PropertiesUtils("spring/redis-time-config.properties"); 

 @SuppressWarnings("rawtypes") 

 @Autowired 

 private RedisTemplate redisTemplate; 

 /** 

 * 批量删除对应的value 

 * @param keys 

 public void remove(final String... keys) { 

 for (String key : keys) { 

 remove(key); 


public int getCountPattern(String pattern){ Set Serializable keys = redisTemplate.keys(pattern); return keys==null?0:keys.size(); /** * 批量删除key * @param pattern public void removePattern(final String pattern) { Set Serializable keys = redisTemplate.keys(pattern); if (keys.size() 0) redisTemplate.delete(keys); /** * 批量删除key * @param keys public void removeKeys(final Set String keys) { if (keys.size() 0) redisTemplate.delete(keys); public Long ttl(String key) { return StringUtils.isNoneEmpty(key) ? Long.valueOf(-1L) : redisTemplate.getExpire(key); /** * 删除对应的value * @param key public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); /** * 判断缓存中是否有对应的value * @param key * @return public boolean exists(final String key) { return redisTemplate.hasKey(key); /** * 读取缓存 * @param key * @return public Object get(final String key) { Object result = null; ValueOperations Serializable, Object operations = redisTemplate.opsForValue(); result = operations.get(key); return result; /** * 读取缓存 * @param key * @return public Long size(final String key) { Long result = null; ValueOperations Serializable, Object operations = redisTemplate.opsForValue(); result = operations.size(key); return result; public K Set K keys(K pattern){ return redisTemplate.keys(pattern); /** * 写入缓存 * @param key * @param value * @return public boolean set(final String key, Object value) { boolean result = false; try { ValueOperations Serializable, Object operations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); return result; /** * 写入缓存 * @param key * @param value * @return public boolean set(final String key, Object value, Long expireTime) { return set(key, value, expireTime, TimeUnit.SECONDS); /** * 写入缓存 * @param key * @param value * @return public boolean set(final String key, Object value, Long expireTime, TimeUnit timeUnit) { boolean result = false; try { ValueOperations Serializable, Object operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, timeUnit); result = true; } catch (Exception e) { e.printStackTrace(); return result; /** * 写入缓存 * @param key * @param value * @return public boolean setInt(final String key, int value, Long expireTime, TimeUnit timeUnit) { boolean result = false; try { ValueOperations String, Integer operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, timeUnit); result = true; } catch (Exception e) { e.printStackTrace(); return result; /** * 写入缓存 * @param key * @param value * @return public boolean setInt(final String key, int value) { boolean result = false; try { ValueOperations String, Integer operations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); return result; /** * 写入缓存 * @param key * @param key * @return public int getInt(final String key) { int result = -1; if (exists(key)) { ValueOperations String, Integer operations = redisTemplate.opsForValue(); result = operations.get(key); return result; public Long increment(String key, long val){ if( exists(key) ){ return redisTemplate.opsForValue().increment(key, val); return null; public Long addHyperLogLog(Object val1, Object ...val2){ return redisTemplate.opsForHyperLogLog().add(val1, val2); public Long sAdd(Object key, Object... values) { return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().add(key, values); public Set String sMembers(String key) { return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().members(key); public Long sRem(Object key, Object... values) { return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().remove(key, values); public Object sPop(Object key) { return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().pop(key); public boolean sMove(Object srcKey, Object destKey, Object member) { return (!isNullOrEmpty(srcKey) !isNullOrEmpty(destKey)) ((member != null) redisTemplate.opsForSet().move(srcKey, member, destKey)); public Long sLen(Object key) { return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().size(key); public boolean sIsMember(Object key, Object member) { return !isNullOrEmpty(key) redisTemplate.opsForSet().isMember(key, member); public Set Object sInter(Object key, Object... keys) { return key == null ? null : redisTemplate.opsForSet().intersect(key, keys); public Long sInterStore(Object destKey, Object srckey, Object... srcKeys) { return !isNullOrEmpty(destKey) srckey != null ? redisTemplate.opsForSet().intersectAndStore(srckey, srcKeys, destKey) : null; public Set Object sUnion(Object... keys) { if (keys != null keys.length != 0) { List keyList = Arrays.asList(keys); return redisTemplate.opsForSet().union(keyList.remove(0), keyList); } else { return null; public Long sUnionStore(Object dstKey, Object... keys) { if (keys != null keys.length != 0 dstKey != null) { List keyList = Arrays.asList(keys); return redisTemplate.opsForSet().unionAndStore(keyList.remove(0), keyList, dstKey); } else { return null; public Set Object sDiff(Object... keys) { if (keys != null keys.length != 0) { List keyList = Arrays.asList(keys); return redisTemplate.opsForSet().difference(keyList.remove(0), keyList); } else { return null; public Long sDiffStore(Object dstKey, Object... keys) { if (!isNullOrEmpty(dstKey) keys != null keys.length != 0) { List keyList = Arrays.asList(keys); return redisTemplate.opsForSet().differenceAndStore(keyList.remove(0), keyList, dstKey); } else { return null; public boolean hSet(String key, Map String, Object param, Long expireTime, TimeUnit timeUnit) { try { hSet(key, param); redisTemplate.expire(key, expireTime, timeUnit); return true; } catch (Exception e) { e.printStackTrace(); return false; public void hSet(String key, Map String, Object param) { HashOperations String, String, Object hashOperations = redisTemplate.opsForHash(); Set Map.Entry String, Object entrySet = param.entrySet(); for (Map.Entry String, Object entry : entrySet) { hashOperations.put(key, entry.getKey(), entry.getValue()); public void hSet(String key, Object field, Object value) { redisTemplate.opsForHash().put(key, field, value); public Object hGet(String key, Object field) { if (StringUtils.isEmpty(key)) { return null; return redisTemplate.opsForHash().get(key, field); public String hGet(String key, String field) { if (StringUtils.isEmpty(key)) { return null; HashOperations String, String, String hashOperations = redisTemplate.opsForHash(); return hashOperations.get(key, field); public boolean hExists(String key, Object hashKey) { return !isNullOrEmpty(key) redisTemplate.opsForHash().hasKey(key, hashKey); public Long hDel(Object key, Object... hashKeys) { return isNullOrEmpty(key) ? Long.valueOf(0L) : redisTemplate.opsForHash().delete(key, hashKeys); public Long hLen(String key) { return StringUtils.isNoneEmpty(key) ? Long.valueOf(0L) : redisTemplate.opsForHash().size(key); public Set Object hKeys(Object key) { return isNullOrEmpty(key) ? null : redisTemplate.opsForHash().keys(key); public List Object hValues(Object key) { return isNullOrEmpty(key) ? null : redisTemplate.opsForHash().values(key); public Map Object, Object hGetAll(Object key) { return isNullOrEmpty(key) ? null : redisTemplate.opsForHash().entries(key); public Object getUnknownType(Object key){ try { DataType dataType = redisTemplate.type(key); switch (dataType){ case NONE: log.info("key:[{}]不存在", key); return null; case STRING: return redisTemplate.opsForValue().get(key); case LIST: return redisTemplate.opsForList().range(key, 0, -1); case SET: return redisTemplate.opsForSet().members(key); case ZSET: return redisTemplate.opsForZSet().range(key, 0, -1); case HASH: return redisTemplate.opsForHash().entries(key); default: return null; }catch (Exception e){ log.error("查询出现异常:{}", e); return null; private static boolean isNullOrEmpty(Object obj) { boolean result = false; if (obj == null || "null".equals(obj) || "".equals(obj.toString().trim())) { result = true; return result;
String[] redispropers=redisProper.getPropertiesValues(redisKey); Long redisExp=Long.valueOf(redispropers[0]); TimeUnit redisTimeType= UtilHelper.getTimeUtil(redispropers[1]); redisTemplate.opsForValue().set(key,value,redisExp, redisTimeType);

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16223.html

cjavaxml