springBoot与redis集成

    xiaoxiao2022-07-12  138

    一,导入依赖

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

    二,配置类

    redis 的序列化方式默认采用字符串的序列化方式,但是这样在序列化一个对象的时候会产生乱码。所以需要定义自己的序列化器。

    FastJson2JsonRedisSerializer

    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; } @Override public byte[] serialize(T t) throws SerializationException { if (t == null) { return new byte[0]; } return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); } @Override 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); } }

    配置类

    /** * @author xch */ @Configuration //开启cacheable注解 @EnableCaching public class RedisConfig { @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { //配置缓存前缀 CacheKeyPrefix cacheKeyPrefix = new CacheKeyPrefix() { @Override public String compute(String s) { return s+":"; } }; RedisSerializer<String> redisSerializer = new StringRedisSerializer(); // 配置序列化 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); RedisCacheConfiguration redisCacheConfiguration = config .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new FastJsonRedisSerializer<>(Object.class))) .computePrefixWith(cacheKeyPrefix); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(redisCacheConfiguration) .build(); return cacheManager; } @Bean public RedisSerializer fastJson2JsonRedisSerializer() { return new FastJson2JsonRedisSerializer<Object>(Object.class); } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory, RedisSerializer fastJson2JsonRedisSerializer) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(factory); // key采用String的序列化方式 template.setKeySerializer(new StringRedisSerializer()); // hash的key也采用String的序列化方式 template.setHashKeySerializer(new StringRedisSerializer()); // value序列化方式采用jackson template.setValueSerializer(fastJson2JsonRedisSerializer); // hash的value序列化方式采用jackson template.setHashValueSerializer(fastJson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
    最新回复(0)