Spring Data Redis过期密钥 [英] Spring Data Redis Expire Key

查看:279
本文介绍了Spring Data Redis过期密钥的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Spring Spring Hibernate应用程序。在我的应用程序中,最近我实现了Spring数据Redis。

  spring-servlet.xml 
<! - redis连接工厂 - >
< bean id =jedisConnFactoryclass =org.springframework.data.redis.connection.jedis.JedisConnectionFactoryp:use-pool =true/>

<! - redis模板定义 - >
< bean id =redisTemplateclass =org.springframework.data.redis.core.RedisTemplate
p:connection-factory-ref =jedisConnFactory/>

这个 redisTemplate 在我的ServiceImpl类中使用。

  RedisServiceImpl 

@Autowired
私有RedisTemplate< String,T> redisTemplate;

public RedisTemplate< String,T> getRedisTemplate(){
return redisTemplate;
}

public void setRedisTemplate(RedisTemplate< String,T> redisTemplate){
this.redisTemplate = redisTemplate;
}

现在我在redisServer中添加了像这样的数据

  public void putData(String uniqueKey,String key,Object results){

redisTemplate.opsForHash()。put(uniqueKey,key,结果);
}

现在我想删除Expire键。



我在谷歌搜索,但在谷歌都说这样的

  redisTemplate.expire(key,超时,TimeUnit); 

在这个expire方法中,我们需要提供 uniqueKey 而不是
但我需要过期而不是 uniqueKey



所以请帮助我,我能做些什么过期 Key

解决方案我使用的是Redis 3.2.100版本。



使用 Redis缓存管理器替换 redis模板 / strong>,将redistemplate传递给cacheManager并使用它的set expires属性,该属性基本上是String&您可以使用cacheManager的 setDefaultExpiration 方法来设置缓存名称,设置相同的到期时间到所有的缓存。

  @SuppressWarnings({rawtypes,unused})
@Configuration
@EnableCaching(proxyTargetClass = true,mode = AdviceMode.ASPECTJ,order = 1)
@PropertySource(classpath:/application.properties)
public class CacheConfigImpl extends CachingConfigurerSupport {

private @Value($ {redis.ip})String redisHost;
private @Value($ {redis.port})int redisPort;

private static final Map< String,Long> cacheMap = new HashMap< String,Long>();
static {
cacheMap.put(method1cache,600L);
cacheMap.put(method2cache,600L);
cacheMap.put(method3cache,800L);


$Be
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();


$Be $ b $ public JedisConnectionFactory redisConnectionFactory
redisConnectionFactory.setHostName(CustomPropertyLoader.getProperty(redis.ip));
redisConnectionFactory.setPort(Integer.parseInt(CustomPropertyLoader.getProperty(redis.port)));
返回redisConnectionFactory;
}

@Bean
public RedisTemplate< String,String> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate< String,String> redisTemplate = new RedisTemplate< String,String>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.afterPropertiesSet();
返回redisTemplate;

$ b $Bean(name =RCacheManager)
public CacheManager cacheManager(RedisTemplate redisTemplate){

RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate) ;
地图< String,Long> expires = new HashMap< String,Long>();
cacheManager.setExpires(cacheMap);
cacheManager.setUsePrefix(true);
final String redis_client_name = CustomPropertyLoader.getProperty(redis.client.name);
cacheManager.setCachePrefix(new RedisCachePrefix(){
private final RedisSerializer< String> serializer = new StringRedisSerializer();
private final String delimiter =:;

public byte [] prefix(String cacheName){
return this.serializer
.serialize(redis_client_name.concat(this.delimiter).concat(cacheName).concat(this.delimiter));
}
});
返回cacheManager;
}
}


I have a One Spring Hibernate Application. In my application, Recently i am implemented Spring data Redis.

spring-servlet.xml
<!-- redis connection factory -->
<bean id="jedisConnFactory" 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="jedisConnFactory"/>

And this redisTemplate use in my ServiceImpl class.

RedisServiceImpl

@Autowired
private RedisTemplate<String, T> redisTemplate;

public RedisTemplate<String, T> getRedisTemplate() {
    return redisTemplate;
}

public void setRedisTemplate(RedisTemplate<String, T> redisTemplate) {
    this.redisTemplate = redisTemplate;
}

Now I added data in redisServer like this

public void putData(String uniqueKey, String key, Object results) {

    redisTemplate.opsForHash().put(uniqueKey, key, results);
}

Now i want to remove Expire key.

I search in Google, But in google all are saying like this

redisTemplate.expire(key, timeout, TimeUnit);

In this expire method, We need to provide uniqueKey instead of key. But I need to Expire key instead of uniqueKey.

So Please help me what can i do for expire Key?

解决方案

I am using Redis Version 3.2.100.

Instead of redis template ,Use Redis Cache Manager, pass redistemplate to cacheManager and use its set expires property to which is basically map of String & Long , you can add cache name and set its expiry time i.e time to live (TTL).

You can use setDefaultExpiration method of cacheManager to set same expiry time to all the cache.

@SuppressWarnings({ "rawtypes", "unused" })
@Configuration
@EnableCaching(proxyTargetClass = true, mode = AdviceMode.ASPECTJ, order = 1)
@PropertySource("classpath:/application.properties")
public class CacheConfigImpl extends CachingConfigurerSupport {

    private @Value("${redis.ip}") String redisHost;
    private @Value("${redis.port}") int redisPort;

     private static final Map<String, Long> cacheMap = new HashMap<String, Long>();
    static {
        cacheMap.put("method1cache", 600L);
        cacheMap.put("method2cache", 600L);
        cacheMap.put("method3cache", 800L);
    }

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    public JedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
        redisConnectionFactory.setHostName(CustomPropertyLoader.getProperty("redis.ip"));
        redisConnectionFactory.setPort(Integer.parseInt(CustomPropertyLoader.getProperty("redis.port")));
        return redisConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean(name = "RCacheManager")
    public CacheManager cacheManager(RedisTemplate redisTemplate) {

        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        Map<String, Long> expires = new HashMap<String, Long>();
        cacheManager.setExpires(cacheMap);
        cacheManager.setUsePrefix(true);
        final String redis_client_name = CustomPropertyLoader.getProperty("redis.client.name");
        cacheManager.setCachePrefix(new RedisCachePrefix() {
            private final RedisSerializer<String> serializer = new StringRedisSerializer();
            private final String delimiter = ":";

            public byte[] prefix(String cacheName) {
                return this.serializer
                        .serialize(redis_client_name.concat(this.delimiter).concat(cacheName).concat(this.delimiter));
            }
        });
        return cacheManager;
    }
    }

这篇关于Spring Data Redis过期密钥的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆