【问题标题】:Spring Using Redis @CacheableSpring 使用 Redis @Cacheable
【发布时间】:2013-12-19 11:29:09
【问题描述】:

任何人都可以为 Collection 类型推荐一个 Redis (NoSQL DB) 示例吗? 通常我们使用以下(在 Spring 中):

@Cacheable(value = "PRODUCT", key = "#productId" ) 
public Map<String,Object> findProduct(String productId, String productName)
 { return map; } 

将键和值存储为字符串,但我需要:

public Map<RestaurantId,Set<Order>>find(String RestaurantId, String productName){ return map; }

【问题讨论】:

  • 你的问题是什么?

标签: java spring redis


【解决方案1】:

确保您的对象是可序列化的,然后只需使用 Spring Data Redis cache abstraction (2015 link)

从上述文档中复制的示例:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:cache="http://www.springframework.org/schema/cache"
  xmlns:c="http://www.springframework.org/schema/c"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

  <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:use-pool="true"/>

  <!-- redis template definition -->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory"/>

  <!-- turn on declarative caching -->
  <cache:annotation-driven />

  <!-- declare Redis Cache Manager -->
  <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager" c:template-ref="redisTemplate"/>
</beans>

【讨论】:

    【解决方案2】:

    您可以使用Redisson Redis Java 客户端,它也提供Spring Cache 管理器。它同时支持TTLmaxIdleTime 参数。

    代码示例:

    @Configuration
    @ComponentScan
    @EnableCaching
    public static class Application {
    
        @Bean(destroyMethod="shutdown")
        RedissonClient redisson() throws IOException {
            Config config = new Config();
            config.useClusterServers()
                  .addNodeAddress("redis://127.0.0.1:7004", "redis://127.0.0.1:7001");
            return Redisson.create(config);
        }
    
        @Bean
        CacheManager cacheManager(RedissonClient redissonClient) {
            Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
    
            // create "testMap" cache with ttl = 24 minutes and maxIdleTime = 12 minutes
            config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));
            return new RedissonSpringCacheManager(redissonClient, config);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 2018-11-30
      • 2019-12-02
      • 2018-08-07
      • 1970-01-01
      • 2019-03-23
      • 2019-12-05
      • 2015-11-26
      • 2018-02-02
      相关资源
      最近更新 更多