栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Redis缓存管理器,redisTemplate和多个序列化器进行缓存

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Redis缓存管理器,redisTemplate和多个序列化器进行缓存

经过一些研究,现在已解决。

  1. 将spring-data-redis更改为1.4.2。
  2. 使用带有缓存映射的类将RedisCacheManager扩展到序列化器(cacheName-> serializer)并缓存名称
  3. 覆盖getCache方法(Cache getCache(字符串名称)),并基于缓存名称,在redis模板中设置序列化程序名称
  4. 使用您的自定义缓存管理器

范例-

public class CustomRedisCacheManager extends RedisCacheManager{    public static final String CACHE_NAME_DEFAULT = "default";    public static final String CACHE_NAME_COUNTRY = "country";    public static final String CACHE_NAME_DESTINATIONS = "destinations";    private Map<String, RedisCache> redisCaches = new HashMap<>();    public CustomRedisCacheManager(Map<String, RedisTemplate> redisTemplates)    {        super(redisTemplates.get(CACHE_NAME_DEFAULT), redisTemplates.keySet());        redisTemplates.keySet().stream().forEach(cacheName ->    redisCaches.put(cacheName, new RedisCache(cacheName, null,   redisTemplates.get(cacheName), 0)));    }    @Override    public Cache getCache(String cacheName)    {        return redisCaches.get(cacheName);    }}@Configuration@EnableCachingpublic class RedisConfiguration extends CachingConfigurerSupport{        @Bean    public JedisConnectionFactory jedisConnectionFactory()    {        JedisConnectionFactory factory = new JedisConnectionFactory();        factory.setHostName(redisHostName);        factory.setPort(redisPort);         factory.setTimeout(100);        return factory;    }    @Bean    public CacheManager cacheManager()    {        Map<String, RedisTemplate> templates = new HashMap<>();        templates.put(CACHE_NAME_DEFAULT, getDefaultRedisTemplate());        templates.put(CACHE_NAME_COUNTRY, getmetadataRedisTemplate());        templates.put(CACHE_NAME_DESTINATIONS, getDestinationsRedisTemplate());        SabreRedisCacheManager sabreRedisCacheManager = new    SabreRedisCacheManager(templates);        return sabreRedisCacheManager;    }    @Bean    public RedisTemplate<Object, Object> getDefaultRedisTemplate()    {        return getbaseRedisTemplate();    }    @Bean    public RedisTemplate<Object, Object> getCountryRedisTemplate()    {        RedisTemplate<Object, Object> redisTemplate = getbaseRedisTemplate();          redisTemplate.setValueSerializer(jsonRedisSerializer(Country.class));        return redisTemplate;    }    @Beanpublic RedisTemplate<Object, Object> getDestinationsRedisTemplate(){    RedisTemplate<Object, Object> redisTemplate = getbaseRedisTemplate();    redisTemplate.setValueSerializer(jsonRedisSerializer(TypeFactory.defaultInstance().constructCollectionType(List.class, Destination.class)));    return redisTemplate;}private RedisTemplate<Object, Object> getbaseRedisTemplate(){    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();    redisTemplate.setConnectionFactory(jedisConnectionFactory());    redisTemplate.setKeySerializer(stringRedisSerializer());    redisTemplate.setHashKeySerializer(stringRedisSerializer());    redisTemplate.setValueSerializer(jsonRedisSerializer(Object.class));    return redisTemplate;}private Jackson2JsonRedisSerializer jsonRedisSerializer(Class type){    return jsonRedisSerializer(TypeFactory.defaultInstance().constructType(type));}private Jackson2JsonRedisSerializer jsonRedisSerializer(JavaType javaType){    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(javaType);    jackson2JsonRedisSerializer.setObjectMapper(new JsonObjectMapper());    return jackson2JsonRedisSerializer;}}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号