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;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
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.StringRedisSerializer;
......@@ -14,55 +16,65 @@ import javax.annotation.Resource;
@Configuration
public class RedisListenerConfig {
protected static final Log log = LogFactory.getLog(RedisListenerConfig.class);
@Resource
private StringRedisSerializer keySerializer;
@Resource
private GenericJackson2JsonRedisSerializer valueSerializer;
@Resource
private RedisStandaloneConfigurationExt1 redisStandaloneConfigurationExt1;
@Resource
private RedisStandaloneConfigurationExt2 redisStandaloneConfigurationExt2;
protected static final Log log = LogFactory.getLog(RedisListenerConfig.class);
@Bean("connectionFactory1")
public JedisConnectionFactory connectionFactory1()
{
return new JedisConnectionFactory(redisStandaloneConfigurationExt1);
}
@Bean("connectionFactory2")
public JedisConnectionFactory connectionFactory2()
{
return new JedisConnectionFactory(redisStandaloneConfigurationExt2);
}
@Bean("redisAPA")
public RedisTemplate redisAPA()
{
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory1());
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
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;
}
@Resource
private StringRedisSerializer keySerializer;
@Resource
private GenericJackson2JsonRedisSerializer valueSerializer;
@Resource
private RedisStandaloneConfigurationExt1 redisStandaloneConfigurationExt1;
@Resource
private RedisStandaloneConfigurationExt2 redisStandaloneConfigurationExt2;
@Bean("connectionFactory1")
public JedisConnectionFactory connectionFactory1() {
return new JedisConnectionFactory(redisStandaloneConfigurationExt1);
}
@Bean("connectionFactory2")
public JedisConnectionFactory connectionFactory2() {
return new JedisConnectionFactory(redisStandaloneConfigurationExt2);
}
@Bean
public RedisMessageListenerContainer listenerContainer() {
RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
listenerContainer.setConnectionFactory(connectionFactory1());
return listenerContainer;
}
@Bean
public KeyExpirationEventMessageListener redisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
log.debug("init redisKeyExpirationListener");
return new RedisKeyExpirationListener(listenerContainer);
}
@Bean("redisAPA")
public RedisTemplate redisAPA() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory1());
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
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