redis的监听实现及遇到的问题(监听失效)

需求:监听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 等类型无关的通用命令的通知.

经验分享 程序员 微信小程序 职场和发展