返回顶部
首页 > 资讯 > 数据库 >redis如何监控失效的key
  • 198
分享到

redis如何监控失效的key

2024-04-02 19:04:59 198人浏览 泡泡鱼
摘要

小编给大家分享一下Redis如何监控失效的key,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!先来看一个问题:如何处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态?解决方案:可以利

小编给大家分享一下Redis如何监控失效的key,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

先来看一个问题:

如何处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态?

解决方案:

可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的。

开启redis key过期提醒

修改redis相关事件配置。找到redis配置文件redis.conf,查看“notify-keyspace-events”的配置项,如果没有,添加“notify-keyspace-events Ex”,如果有值,添加Ex,相关参数说明如下:

K:keyspace事件,事件以__keyspace@<db>__为前缀进行发布;         
E:keyevent事件,事件以__keyevent@<db>__为前缀进行发布;         
g:一般性的,非特定类型的命令,比如del,expire,rename等;        
$:字符串特定命令;         
l:列表特定命令;         
s:集合特定命令;         
h:哈希特定命令;         
z:有序集合特定命令;         
x:过期事件,当某个键过期并删除时会产生该事件;         
e:驱逐事件,当某个键因maxmemore策略而被删除时,产生该事件;         
A:g$lshzxe的别名,因此”AKE”意味着所有事件。

redis测试:

打开一个redis-cli ,监控db0的key过期事件

127.0.0.1:6379> PSUBSCRIBE __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1

打开另一个redis-cli ,发送定时过期key

127.0.0.1:6379> setex test_key 3 test_value

观察上一个redis-cli ,会发现收到了过期的keytest_key,但是无法收到过期的value test_value

127.0.0.1:6379> PSUBSCRIBE __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1
1) "pmessage"
2) "__keyevent@0__:expired"
3) "__keyevent@0__:expired"
4) "test_key"

在springboot中使用

pom 中添加依赖

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

定义配置RedisListenerConfig

import edu.zut.ding.listener.RedisExpiredListener;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.PatternTopic;import org.springframework.data.redis.listener.RedisMessageListenerContainer;@Configurationpublic class RedisListenerConfig {    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);//        container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
        return container;
    }
}

定义监听器,实现KeyExpirationEventMessageListener接口,查看源码发现,该接口监听所有db的过期事件keyevent@*:expired"

import edu.zut.ding.constants.SystemConstant;import edu.zut.ding.enums.OrderState;import edu.zut.ding.service.OrderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;import org.springframework.data.redis.listener.RedisMessageListenerContainer;import org.springframework.stereotype.Component;@Componentpublic class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {        super(listenerContainer);
    }    
    @Override
    public void onMessage(Message message, byte[] pattern) {        // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
        String expiredKey = message.toString();        if(expiredKey.startsWith("Order:")){            //如果是Order:开头的key,进行处理
        }
    }
}

或者打开RedisListenerConfig中 container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired")); 注释,再定义监听器,监控__keyevent@0__:expired事件,即db0过期事件。这个地方定义的比较灵活,可以自己定义监控什么事件。

import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.connection.MessageListener;public class RedisExpiredListener implements MessageListener {    
    @Override
    public void onMessage(Message message, byte[] bytes) {        byte[] body = message.getBody();// 建议使用: valueSerializer
        byte[] channel = message.getChannel();
        System.out.print("onMessage >> " );
        System.out.println(String.fORMat("channel: %s, body: %s, bytes: %s"
                ,new String(channel), new String(body), new String(bytes)));
    }

}

看完了这篇文章,相信你对redis如何监控失效的key有了一定的了解,想了解更多相关知识,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: redis如何监控失效的key

本文链接: https://lsjlt.com/news/51518.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis如何监控失效的key
    小编给大家分享一下redis如何监控失效的key,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!先来看一个问题:如何处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态?解决方案:可以利...
    99+
    2024-04-02
  • redis如何设置key缓存失效时间
    Redis中可以使用`EXPIRE`命令设置一个key的缓存失效时间。命令格式如下:```EXPIRE key seconds```...
    99+
    2023-09-05
    redis
  • SpringBoot如何监控Redis中某个Key的变化(自定义监听器)
    目录SpringBoot 监控Redis中某个Key的变化1.声明2.基本理念3.实现和创建监听4.基本demo的其他配置5.基本测试6.小结一下SpringBoot自定义监听器原理...
    99+
    2024-04-02
  • redis如何设置key的有效期
    目录redis设置key的有效期Key命令彻底理解redis有效期问题1.过期时间跟着key走,与值无关2.设置永久有效期3.rename命令对有效期影响4.刷新过期时间5.过期精度...
    99+
    2024-04-02
  • Redis如何实现性能监控
    小编给大家分享一下Redis如何实现性能监控,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!redis_exporter + prometheus +grafana监控Redis服务指标1....
    99+
    2024-04-02
  • 如何监控和管理Redis的性能
    要监控和管理Redis的性能,可以采取以下措施: 使用redis-cli工具:通过redis-cli工具可以实时查看Redis的...
    99+
    2024-04-09
    Redis
  • REDIS 主从架构key过期时间失效问题
    活动中用到了Redis来存放用户的奖励票信息,原则上是一天一清,现在设置的是expireAt(零点)但是最近运营反馈有部分用户有异常票,经过加log排查后发现指定在零点过期的key并没有准时过期,从库中在0...
    99+
    2024-04-02
  • redis性能监控工具redis-stat如何安装
    这篇文章主要为大家展示了“redis性能监控工具redis-stat如何安装”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“redis性能监控工具redis-st...
    99+
    2024-04-02
  • Redis的内存使用情况如何监控
    使用Redis自带的INFO命令来查看Redis实例的内存使用情况。可以通过命令INFO memory来查看内存相关的信息,如当...
    99+
    2024-04-02
  • redis如何迁移key
    将redis1库中的key转移到redis2库中的示例:在终端命令行连接redis后,输入命令:redis-cli -n 1 -a 'foobared' keys ...
    99+
    2024-04-02
  • redis如何创建key
    redis创建key的示例:在redis中创建一个key并设置值,语法代码如下:# 对不存在的键进行设置redis 127.0.0.1:6379> SET key "value"OKredis 127.0.0.1:...
    99+
    2024-04-02
  • redis如何查找key
    在 redis 中查找 key 的方法有多种:使用 scan 命令按模式或条件迭代所有 key。使用 redis explorer 等 gui 工具可视化数据库并按名称或模式过滤 key...
    99+
    2024-06-12
    python redis 可视化数据
  • SpringBoot如何监听redis Key变化事件案例详解
    目录一 、功能概览二、事件类型三、配置三、案例代码新增和修改都是set指令删除过期总结键空间通知(keyspace notification) 一 、功能概览 键空间通知使得客户端可...
    99+
    2022-11-13
    springboot监听redis key变化 springboot监听redis过期key
  • redis中的key如何设置
    这篇文章主要介绍了redis中的key如何设置,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Redis SET命令用于设置给定key的值。如果k...
    99+
    2024-04-02
  • 如何理解Redis性能指标监控
    这篇文章主要讲解了“如何理解Redis性能指标监控”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Redis性能指标监控”吧! 监控指标性能...
    99+
    2024-04-02
  • Zabbix中Orabbix监控失效的问题实例分析
    本篇内容介绍了“Zabbix中Orabbix监控失效的问题实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况...
    99+
    2024-04-02
  • redis-exporter监控redis的实例分析
    本篇内容介绍了“redis-exporter监控redis的实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2024-04-02
  • redis如何查看key值
    redis查看key值的方法:通过GET命令可以获取指定key的值,若key不存在,则返回返回nil,若key储存的值不是字符串类型,返回一个错误。GET命令的基本语法redis 127.0.0.1:6379> GET KEY_NAM...
    99+
    2024-04-02
  • redis如何按key排序
    redis按key排序的方法:使用sort排序命令,命令格式:sort key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]...
    99+
    2024-04-02
  • Redis中redis-cluster如何删除指定的key
    这篇文章主要为大家展示了“Redis中redis-cluster如何删除指定的key”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis中redis-clu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作