redis的监听实现及遇到的问题(监听失效)
需求:监听redis的新增(set)方法,新增时将数据同步到内存中.1,添加redis依赖(忽略);2,创建监听类实现MessageListener,并重写onMessage方法.public class MobileRedisMessageListener implements MessageListener {@Autowiredprivate StringRedisTemplate redi
·
需求:监听redis的新增(set)方法,新增时将数据同步到内存中.
1,添加redis依赖(忽略);
2,创建监听类实现MessageListener,并重写onMessage方法.
public class MobileRedisMessageListener implements MessageListener {
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public void onMessage(Message message, byte[] pattern) {
String ops = new String(message.getBody()); //操作
String channel = new String(message.getChannel());
String key = channel.split(":")[1];
//对redis的新增或删除事件进行监听
if ("set".equals(ops)) {
String value = redisTemplate.opsForValue().get(key);
handleSet(key, value);
} else if ("del".equals(ops)) {
handleDel(key);
}
}
/**
* 监听新增 处理逻辑
*/
private void handleSet(String key, String value) {
//将数据同步刷新到内存中
gatewayCache.refreshApiWhitelistsCache(id, JsonUtil.toObject(value, Set.class));
}
/**
* 监听删除 处理逻辑
* @param key 被删除的key
*/
private void handleDel(String key) {
gatewayCache.deleteApiWhitelists(id);
}
}
问题: 在开发过程中遇到数据保存redis中是正常的,但是往内存中同步刷新时没有生效(监听失效).
参考博客:https://cloud.tencent.com/developer/article/1602112
问题原因:redis缺少配置,监听失效.
解决办法:修改配置文件redis.conf,
notify-keyspace-events AKEx
,重新启动Redis
参数说明
1)notify-keyspace-events选项的参数为空字符串时,表示功能关闭,当参数不是空字符串时,表示功能开启
2)notify-keyspace-events默功能是关闭的
3)如果要使用此功能,必须字符串包含 K 或者 E,否则收不到任何事件消息
4)如果参数为“AKE”,意味着接收所有事件消息
notify-keyspace-events 的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知:
字符 发送的通知 K 键空间通知,所有通知以 keyspace@ 为前缀 E 键事件通知,所有通知以 keyevent@ 为前缀 g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知.
更多推荐
已为社区贡献1条内容
所有评论(0)