使用Redis作为Spring缓存管理器来缓存自定义Java对象

时间:2013-08-05 10:13:17

标签: spring caching redis

我想将 Redis 用作缓存管理器,以便缓存来自MySQL数据库的JPA实体

我是Redis的新手,似乎Redis 只能缓存它所知道的基本类型/结构(字符串,哈希等)

我的问题是:我可以使用Redis(与Spring缓存抽象一起)作为弹簧缓存管理器来缓存我的自定义对象(比如PersonOrderCustomer等等......)?

2 个答案:

答案 0 :(得分:4)

您可以从查看Spring Data Redis开始,但与Spring Data JPA不同,它不提供存储库抽象,而是使用Spring模板以及仅适用于redis的访问器方法。由于Redis不支持关系,因此您必须通过覆盖JPA的标准CRUD操作来设计和实现这些关系。

这是一篇很棒的文章,详细介绍了你的小巷...... http://www.packtpub.com/article/building-applications-spring-data-redis

  

我是Redis的新手,看来Redis只能缓存基本版   它知道的类型/结构(字符串,散列等)

Redis可以存储任何东西; text,json,二进制数据,没关系。

默认情况下,RedisTemplate(Spring Data Redis的一部分)使用Java序列化来编组/从redis解组对象,但与基于MessagePack的内容相比,它使用更多的redis空间在我的测试中。

答案 1 :(得分:1)

Redisson提供基于Redis的Spring Cache提供程序。它为Redis商店支持ttlmaxIdleTime等重要的缓存设置,并支持许多流行的编解码器:Jackson JSONAvroSmileCBORMsgPackKryoFSTLZ4SnappyJDK Serialization

配置示例如下:

@Configuration
@ComponentScan
@EnableCaching
public static class Application {

    @Bean(destroyMethod="shutdown")
    RedissonClient redisson() {
        Config config = ...
        return Redisson.create(config);
    }

    @Bean
    CacheManager cacheManager(RedissonClient redissonClient) throws IOException {
        Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
        // ttl = 24 mins, maxIdleTime = 12 mins
        config.put("testCache", new CacheConfig(24*60*1000, 12*60*1000));
        return new RedissonSpringCacheManager(redissonClient, config);
    }

}