1+ package io .kimmking .cache ;
2+
3+ import org .springframework .cache .CacheManager ;
4+ import org .springframework .cache .annotation .CachingConfigurerSupport ;
5+ import org .springframework .cache .interceptor .*;
6+ import org .springframework .context .annotation .Bean ;
7+ import org .springframework .context .annotation .Configuration ;
8+ import org .springframework .data .redis .cache .RedisCacheConfiguration ;
9+ import org .springframework .data .redis .cache .RedisCacheManager ;
10+ import org .springframework .data .redis .connection .RedisConnectionFactory ;
11+ import org .springframework .data .redis .core .RedisTemplate ;
12+ import org .springframework .data .redis .serializer .GenericJackson2JsonRedisSerializer ;
13+ import org .springframework .data .redis .serializer .RedisSerializationContext ;
14+ import org .springframework .data .redis .serializer .StringRedisSerializer ;
15+
16+ import javax .annotation .Resource ;
17+
18+ import static org .springframework .data .redis .cache .RedisCacheConfiguration .defaultCacheConfig ;
19+
20+ @ Configuration
21+ public class CacheConfig extends CachingConfigurerSupport {
22+
23+ @ Resource
24+ private RedisConnectionFactory factory ;
25+
26+ /**
27+ * 自定义生成redis-key
28+ *
29+ * @return
30+ */
31+ @ Override
32+ @ Bean
33+ public KeyGenerator keyGenerator () {
34+ return (o , method , objects ) -> {
35+ StringBuilder sb = new StringBuilder ();
36+ sb .append (o .getClass ().getName ()).append ("." );
37+ sb .append (method .getName ()).append ("." );
38+ for (Object obj : objects ) {
39+ sb .append (obj .toString ());
40+ }
41+ //System.out.println("keyGenerator=" + sb.toString());
42+ return sb .toString ();
43+ };
44+ }
45+
46+ @ Bean
47+ public RedisTemplate <Object , Object > redisTemplate () {
48+ RedisTemplate <Object , Object > redisTemplate = new RedisTemplate <>();
49+ redisTemplate .setConnectionFactory (factory );
50+
51+ GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer ();
52+
53+ redisTemplate .setKeySerializer (genericJackson2JsonRedisSerializer );
54+ redisTemplate .setValueSerializer (genericJackson2JsonRedisSerializer );
55+
56+ redisTemplate .setHashKeySerializer (new StringRedisSerializer ());
57+ redisTemplate .setHashValueSerializer (genericJackson2JsonRedisSerializer );
58+ return redisTemplate ;
59+ }
60+
61+ @ Bean
62+ @ Override
63+ public CacheResolver cacheResolver () {
64+ return new SimpleCacheResolver (cacheManager ());
65+ }
66+
67+ @ Bean
68+ @ Override
69+ public CacheErrorHandler errorHandler () {
70+ // 用于捕获从Cache中进行CRUD时的异常的回调处理器。
71+ return new SimpleCacheErrorHandler ();
72+ }
73+
74+ @ Bean
75+ @ Override
76+ public CacheManager cacheManager () {
77+ RedisCacheConfiguration cacheConfiguration =
78+ defaultCacheConfig ()
79+ .disableCachingNullValues ()
80+ .serializeValuesWith (RedisSerializationContext .SerializationPair .fromSerializer (new GenericJackson2JsonRedisSerializer ()));
81+ return RedisCacheManager .builder (factory ).cacheDefaults (cacheConfiguration ).build ();
82+ }
83+ }
0 commit comments