java redis监听问题_请勿过度依赖Redis的过期监听!!

本文探讨了Redis过期监听的不足,通过测试发现,当key数量增加时,过期通知可能出现显著延迟,这可能对业务造成影响。建议在使用Redis时,不要过分依赖其过期监听功能,应仔细阅读官方文档并理解其工作原理。
摘要由CSDN通过智能技术生成

Redis 过期监听场景

业务中有类似等待一定时间之后执行某种行为的需求 , 比如 30 分钟之后关闭订单 . 网上有很多使用 Redis 过期监听的 Demo , 但是其实这是个大坑 , 因为 Redis 不能确保 key 在指定时间被删除 , 也就造成了通知的延期 . 不多说 , 跑个测试

测试情况

先说环境 , redis 运行在 Docker 容器中 , 分配了 一个 cpu 以及 512MB 内存, 在 Docker 中执行 redis-benchmark -t set -r 100000 -n 1000000 结果如下:

\====== SET ======

1000000 requests completed in 171.03 seconds

50 parallel clients

3 bytes payload

keep alive: 1

host configuration "save": 3600 1 300 100 60 10000

host configuration "appendonly": no

multi-thread: no

其实这里有些不严谨 benchmark 线程不应该在 Docker 容器内部运行 . 跑分的时候大概 benchmark 和 redis 主线程各自持有 50%CPU

测试代码如下:

@Service

@Slf4j

public class RedisJob {

@Autowired

private StringRedisTemplate stringRedisTemplate;

public DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

public LocalDateTime end = LocalDateTime.of(LocalDate.of(2020, 5, 12), LocalTime.of(8, 0));

@Scheduled(cron = "0 56 \* \* \* ?")

public void initKeys() {

LocalDateTime now = LocalDateTime.now();

ValueOperations operations = stringRedisTemplate.opsForValue();

log.info("开始设置key");

LocalDateTime begin = now.withMinute(0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值