Commit 5338f55d by tangzy

解决redis的监听器的问题

parent 5cf30369
package org.sss.presentation.noui.redis;
import log.Log;
import log.LogFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Service;
import org.sss.module.hibernate.HibernateUtils;
import org.sss.presentation.noui.common.Constants;
@Service
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
protected static final Log log = LogFactory.getLog(RedisKeyExpirationListener.class);
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
//获取过期的key
String expireKey = message.toString();
log.debug("expireKey is:" + expireKey);
if (expireKey.startsWith(Constants.SESSION)) {
String[] arrayKey = expireKey.split("\\.");
if (arrayKey.length > 2) {
String userId = arrayKey[1];
Session session = HibernateUtils.openSession(null);
Transaction transaction = session.beginTransaction();
session.createSQLQuery("delete from lck where nam='" + userId + "'").executeUpdate();
transaction.commit();
session.close();
log.info("clear expire user " + userId + " session success");
}
}
}
}
...@@ -6,6 +6,8 @@ import org.springframework.context.annotation.Bean; ...@@ -6,6 +6,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;
...@@ -14,55 +16,65 @@ import javax.annotation.Resource; ...@@ -14,55 +16,65 @@ import javax.annotation.Resource;
@Configuration @Configuration
public class RedisListenerConfig { public class RedisListenerConfig {
protected static final Log log = LogFactory.getLog(RedisListenerConfig.class);
@Resource @Resource
private StringRedisSerializer keySerializer; private StringRedisSerializer keySerializer;
@Resource @Resource
private GenericJackson2JsonRedisSerializer valueSerializer; private GenericJackson2JsonRedisSerializer valueSerializer;
@Resource
@Resource private RedisStandaloneConfigurationExt1 redisStandaloneConfigurationExt1;
private RedisStandaloneConfigurationExt1 redisStandaloneConfigurationExt1;
@Resource @Resource
private RedisStandaloneConfigurationExt2 redisStandaloneConfigurationExt2; private RedisStandaloneConfigurationExt2 redisStandaloneConfigurationExt2;
protected static final Log log = LogFactory.getLog(RedisListenerConfig.class);
@Bean("connectionFactory1")
@Bean("connectionFactory1") public JedisConnectionFactory connectionFactory1() {
public JedisConnectionFactory connectionFactory1() return new JedisConnectionFactory(redisStandaloneConfigurationExt1);
{ }
return new JedisConnectionFactory(redisStandaloneConfigurationExt1);
} @Bean("connectionFactory2")
public JedisConnectionFactory connectionFactory2() {
@Bean("connectionFactory2") return new JedisConnectionFactory(redisStandaloneConfigurationExt2);
public JedisConnectionFactory connectionFactory2() }
{
return new JedisConnectionFactory(redisStandaloneConfigurationExt2);
} @Bean
public RedisMessageListenerContainer listenerContainer() {
@Bean("redisAPA") RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
public RedisTemplate redisAPA() listenerContainer.setConnectionFactory(connectionFactory1());
{ return listenerContainer;
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>(); }
redisTemplate.setConnectionFactory(connectionFactory1());
redisTemplate.setKeySerializer(keySerializer); @Bean
redisTemplate.setValueSerializer(valueSerializer); public KeyExpirationEventMessageListener redisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
redisTemplate.setHashKeySerializer(keySerializer); log.debug("init redisKeyExpirationListener");
redisTemplate.setHashValueSerializer(valueSerializer); return new RedisKeyExpirationListener(listenerContainer);
return redisTemplate; }
}
@Bean("redisAPA")
@Bean("redisAPB") public RedisTemplate redisAPA() {
public RedisTemplate redisAPB() RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
{ redisTemplate.setConnectionFactory(connectionFactory1());
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>(); redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setConnectionFactory(connectionFactory2()); redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setKeySerializer(keySerializer); redisTemplate.setHashKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer); redisTemplate.setHashValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer); return redisTemplate;
redisTemplate.setHashValueSerializer(valueSerializer); }
return redisTemplate;
} @Bean("redisAPB")
public RedisTemplate redisAPB() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory2());
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
return redisTemplate;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment