Spring Data Redis过期密钥 [英] Spring Data Redis Expire Key
问题描述
我有一个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缓存管理器替换 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屋!