redis过期事件监听、可以做延时任务 第二篇(简单)

在使用redis时,所有的key都要设置过期时间,过期之后,redis就会把对应的key清除掉。

此方法可以监听redis的key失效,在失效时做一些逻辑处理

redis过期监听 不像mq有保证 不推荐用来弄需要有保证的业务

现象:
redis 过期事件监听

通过KeyExpirationEventMessageListener类实现redis失效监听事件

方法

1.打开redis 监听事件开关
需要修改redis.conf配置文件,找到 EVENT NOTIFICATION (事件通知)这个配置
将 notify-keyspace-events “” 修改为 notify-keyspace-events “Ex”

2. pom.xml提供依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

3.编写自己的接口 提供给业务实现


@Slf4j
@Configuration
public class UserRedisCallBackConfig extends KeyExpirationEventMessageListener {

    @Autowired
    public UserRedisCallBackConfig(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Autowired
    private HealthyFeignClient healthyFeignClient;

    @Autowired
    private UsersV2Service usersV2Service;
    /**
     * 处理数据过期的数据
     * @time 2021/12/27 14:32
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String s = message.toString();
        if (s.startsWith(RedisKeysConstant.USER_INFO_UPDATE)) {
            this.userInfoUpdate(s);
        }
        super.onMessage(message, pattern);
    }

    public void userInfoUpdate(String key) {
        // 获取更改个人信息
        String userId = key.split(":")[3];
        HealthyUserInfoDTO healthyUserInfoDTO=new HealthyUserInfoDTO();
        healthyUserInfoDTO.setUserId(Integer.valueOf(userId));
        Users users=usersV2Service.info(healthyUserInfoDTO.getUserId());
        healthyUserInfoDTO.setBirthday(users.getBirthday());
        healthyUserInfoDTO.setSex(users.getSex());
        healthyFeignClient.updateUserInfo(healthyUserInfoDTO);
    }

4.触发点

    private StateCode updateOther(Users info, UpdateUsersInfo updateUsersInfo) {
        // 修改用户信息
        Users.update(info, updateUsersInfo);
        log.info("修改了年龄");
        // 更新用户信息
        this.usersService.update(info);
        // 设置过期时长为10s
        redisTemplate.opsForValue().set(RedisKeysConstant.USER_INFO_UPDATE + info.getUserId(), info.getUserId(), 5, TimeUnit.SECONDS);
        return StateCode.SUCCESS;
    }

5.测试结果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值