Redis,过期监听

这篇具有很好参考价值的文章主要介绍了Redis,过期监听。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

应用场景,优惠卷过期,监听

配置类

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

@Configuration
@EnableCaching
public class RedisConfig  extends CachingConfigurerSupport {

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(redisConnectionFactory);
        return container;
    }

}

监听类文章来源地址https://www.toymoban.com/news/detail-633852.html


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class RedisListenerComponent extends KeyExpirationEventMessageListener {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private final String SET_NX = "setnx:";


    public RedisListenerComponent(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Override
    public void onMessage(Message message, byte[] pattern) {
        super.onMessage(message, pattern);
        String expiredKey = message.toString();
        //判定key的前缀,避免消费到自己
        if (!expiredKey.startsWith(SET_NX)){
            // 加锁操作,避免重复消费
            Boolean flag = stringRedisTemplate.opsForValue().setIfAbsent(SET_NX + expiredKey, String.valueOf(System.currentTimeMillis()),30, TimeUnit.SECONDS);
            if (flag){
                System.out.println(expiredKey);
                stringRedisTemplate.delete(SET_NX + expiredKey);
                System.out.println("删除锁...");
            }
        }
    }
}

到了这里,关于Redis,过期监听的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis缓存击穿,redisson分布式锁,redis逻辑过期

    什么是缓存击穿: 缓存击穿是指在高并发环境下,某个热点数据的缓存过期,导致大量请求同时访问后端存储系统,引起系统性能下降和后端存储压力过大的现象。 解决方案: 1. redisson分布式锁 本质上是缓存重建的过程中,大量的请求访问到后端的数据库导致数据库压力过

    2024年02月06日
    浏览(51)
  • redis过期提醒

    有一次看redis的配置文件发现一个notify-keyspace-events配置,注释里边长篇大论的,那我得看看这是干啥的,看完注释内容,发现不得了了,redis竟然还有过期提醒的功能 接下来得大家解释一下: 首先呢,这个功能是基于发布订阅的,通过key的事件来触发发布订阅。相关参数有

    2024年02月05日
    浏览(30)
  • redis内存回收——过期、淘汰

    redis内存设置过大时会增加同步等操作的复杂度 惰性删除 访问时,检查过期时间,删除 已过期但不访问的数据,永远存在,占据内存 周期删除 定期抽样部分key检查过期时间,删除 SLOW redis初始化时设置定期任务 默认每秒执行10次,每个周期100ms 执行清理耗时不超过一次执行

    2023年04月11日
    浏览(36)
  • redis设置过期时间

    Redis 设置过期时间的意思是为一个 key 设置一个时间窗口,在这个时间窗口内,该 key 可以被访问和使用,到达时间窗口后,Redis 会自动删除过期的 key。可以使用 Redis 的 expire 命令或其他相关命令来设置一个 key 的过期时间。设置过期时间可以有效控制 Redis 中存储的数据量,

    2024年02月01日
    浏览(34)
  • Redis的过期策略

    Redis 支持的过期策略主要有以下几种: 定时过期(Timed Expiration) 这种策略会在设置键的过期时间时,创建一个定时器,当达到指定的过期时间点时,立即执行删除操作。 这种方式可以精确控制键的生命周期,但是如果有大量的键都设置了过期时间,会创建大量的定时器,对系

    2024年01月19日
    浏览(28)
  • Redis过期策略

    Redis 使用的过期删除策略是什么? Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个 过期字典 (expires dict)中,也就是

    2024年02月09日
    浏览(75)
  • Redis - 数据过期策略

    Redis提供了两种数据过期策略 惰性删除 和 定期删除 当某个key过期时,不马上删除,而是在调用时,再判断它是否过期,如果过期再删除它 优点 : 对CPU友好,对于很多用不到的key,不用浪费时间进行过期检查 缺点 : 对内存不友好,如果某个key过期了,但一直没使用,那么

    2024年02月14日
    浏览(36)
  • redis获取过期时间

    03,redisTemplate_redistemplate 获取剩余时间-CSDN博客 11.返回当前key所对应的剩余过期时间 1 12.返回剩余过期时间并且指定时间单位

    2024年01月16日
    浏览(31)
  • Redis 缓存过期及删除

    物理内存达到上限后,像磁盘空间申请虚拟内存(硬盘与内存的swap),甚至崩溃。 内存与硬盘交换 (swap) 虚拟内存,频繁I0 性能急剧下降,会造成redis内存急剧下降;  一般设置物理内存的3/4,在redis.conf中 maxmemory 1024mb 声明数据expires来存储过期时间,redis使用c语言开发,dict是字

    2024年02月13日
    浏览(43)
  • 架构师成长之路Redis第三篇|Redis key过期清除策略

    maxmemory 100mb 当我们设置的内存达到指定的内存量时, 清除策略的 配置方式决定了默认行为。Redis可以为可能导致使用更多内存的命令返回错误,也可以在每次添加新数据时清除一些旧数据以返回到指定的限制。 当达到最大内存限制时,Redis所遵循的确切行为是使用MaxMemory-

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包