实时

您的位置:首页>产品 >

世界今日讯!手把手带你了解redis回调机制及代码实现

无德之人常嫉他人之有德。——培根

1.redis回调

1.概念

Redis是一种高性能的内存数据存储系统,它支持多种数据结构和灵活的操作。除了提供常规的键值存储功能外,Redis还支持订阅/发布、事务、Lua脚本等高级功能,其中回调函数是Redis的一个重要特性之一。


(相关资料图)

回调函数是一种在特定事件发生时自动执行的函数。在Redis中,回调函数通常用于在特定事件发生时自动执行一些操作。这些事件包括:

客户端连接/断开连接数据库键过期发布/订阅消息

通过使用回调函数,我们可以在这些事件发生时执行一些自定义的逻辑,从而实现更加灵活和复杂的应用程序。

2.脚本配置文件

在Redis中,回调函数通常是通过在配置文件中定义来注册的。下面是一个示例配置文件,其中包含了一些回调函数的定义:

bashCopy code# Sample Redis configuration file​# Register a callback function to execute when a client connectsclient-connect-callback /path/to/client-connect-script.sh​# Register a callback function to execute when a client disconnectsclient-disconnect-callback /path/to/client-disconnect-script.sh​# Register a callback function to execute when a key expireskeyspace-event-notification expired /path/to/key-expire-script.sh​# Register a callback function to execute when a message is published to a channelnotify-keyspace-events KEA /path/to/pubsub-script.sh

在上面的示例中,我们注册了四个回调函数。第一个回调函数在客户端连接时执行,第二个在客户端断开连接时执行,第三个在键过期时执行,第四个在消息发布时执行。

要使用回调函数,我们需要编写相应的脚本。脚本可以是任何可执行文件,如Bash脚本、Python脚本等等。下面是一个示例Bash脚本,用于在客户端连接时打印一条消息:

bashCopy code#!/bin/bash​echo "A client has connected"

在上面的脚本中,我们使用了echo命令来输出一条消息。当客户端连接时,Redis会自动执行这个脚本,并将消息输出到控制台。

3.概念总结

在编写回调函数时,我们还需要考虑一些安全问题。由于回调函数通常是在Redis进程的上下文中执行的,因此我们需要确保脚本不会执行任何危险操作,如删除文件或执行系统命令等等。为了确保安全性,我们可以使用一些技术,如沙盒化或限制脚本执行权限等等。

总之,回调函数是Redis的一个非常有用的特性,它可以让我们在特定事件发生时自动执行一些操作,从而实现更加灵活和复杂的应用程序。如果您正在使用Redis,并且想要了解更多关于回调函数的内容,可以看Redis官方文档。

2.场景需求

1.需求

例如:京东购物车结算,在用户进行结算的时候,支付时间为30分钟,用户未在30分钟之内支付,则需要进入待支付状态。

3.实现方案

咱们可以采用redis ,key有效期回调事件实现,为每笔支付的订单设置有限期为30分钟,在当前key失效的时候,redis进行回调。

4.redis配置

首先找到redis.conf配置文件,如果你跟我一样使用mac包管理工具brew安装的。

找到homebrew.mxcl.redis.plist文件

打开之后就可以看到redis.conf的文件地址了。

打开配置文件之后找到notify-keyspace-events "",然后设置成notify-keyspace-events "Ex"

notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:

字符

发送的通知

K

键空间通知,所有通知以__keyspace@__ 为前缀

E

键事件通知,所有通知以 __keyevent@__ 为前缀

g

DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知

$

字符串命令的通知

l

列表命令的通知

s

集合命令的通知

h

哈希命令的通知

z

有序集合命令的通知

x

过期事件,每当有过期键被删除时发送

e

驱逐事件,每当有键因为maxmemory政策而被删除时发送

A

参数 g$lshzxe 的别名

5.代码实现

首先发送一条普通消息,设置过期时间。

@ApiOperation(value = "测试redis回调")    @SaCheckLogin    @PostMapping("/test")    public ApiResponse testTask(){        redisUtil.set("FILE:userInfo","我是一条消息,来测试是否进入回调",60);        return ApiResponse.ok();    }

添加RedisListenerConfig回调配置类

@Slf4j@Configurationpublic class RedisListenerConfig {​    @Bean    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {        RedisMessageListenerContainer container = new RedisMessageListenerContainer();        container.setConnectionFactory(connectionFactory);        return container;    }​    @Component    public static class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {        public RedisKeyExpirationListener(RedisMessageListenerContainer container) {            super(container);        }        @Override        public void onMessage(Message message, byte[] pattern) {            final String keyInfo = "FILE:userInfo";            String key = message.toString();            log.info("redis失效进入回调函数携带key:{}", key);            if (key != null && key.startsWith(keyInfo)) {                log.info("需要特殊处理的key,进行业务处理");            }        }    }}

6.测试结果

关键词:

推荐阅读
Redis是一种高性能的内存数据存储系统,它支持多种数据结构和灵活的操作。除了提供常规的键值存储功能外,Redis还支持订阅 发布、事务、Lua脚

2023-03-16 16:05:26

一、法兰克福主帅那不勒斯太强大直播吧3月16日讯在北京时间今天凌晨进行的欧冠1 8决赛中,法兰克福客场0比3不敌那不勒

2023-03-16 14:17:16

远望谷(002161)03月16日在投资者关系平台上答复了投资者关心的问题。

2023-03-16 12:08:05

近期,滦南县结合实际推出10项新措施,持续深入优化营商环境,激发经营主体活力和发展内生动力。

2023-03-16 10:04:23

贵州法院发布意见为稳增长、稳就业、稳物价提供司法服务保障

2023-03-16 08:13:49

3月15日北向资金减持43 87万股鲁商发展。近5个交易日中,获北向资金减持的有4天,累计净减持268 6万股。近20个交易日中,获北向资金减持的有16

2023-03-16 04:18:06

1、应该是hood吧hood机盖。2、汽车前面的机盖。3、车头上的机箱盖子hold应该是要求你按住什么钮。本文就为大家分

2023-03-15 23:41:20

沙特认为,该国经济可以在很大程度上与石油脱钩,原油价格很快就不再是影响财政政策的决定性因素。沙特财政部长MohammedAl-Jadaan周三表示:“

2023-03-15 20:28:02

同花顺金融研究中心3月15日讯,有投资者向东方国信提问,是不是属于百度文心一言吗  公司回答表示,您好,感谢您的关注。公司不属于百度文心

2023-03-15 17:55:17

最近,国内暴雪战网的运营已经终结,就导致了许多想玩暴雪游戏的玩家只能转投国际服的怀抱,而且暗黑破坏神4睐,纷纷想要想要玩这款游戏。在玩

2023-03-15 16:09:55

1、对于流口水的宝宝,需要观察除了流口水还有没有其他伴随症状。2、如果出现发热,口腔出现溃疡或疱疹的可能性很大,可以局部

2023-03-15 13:56:43

地铁里救人护士被同事认出并受医院表彰

2023-03-15 11:01:46

1、一、平安全车驾乘险。2、(1)在投保的消费者和家人朋友外出乘车过程中,由于交通事故造成的死亡、伤残、意外医疗的情

2023-03-15 09:59:28

□王文咏前几天回老家拿一份大学时的材料,顺便买了点东西带给父母,一路开车风尘仆仆。回到家,把东西递给母亲,母亲并没有对带给她的东西感

2023-03-15 07:19:44

1、观察物体提高训练6一、有三个立体图形,从上面看到的图形是的,请在它的下面画“√”;从右面看到是的,请在它的下面画“”

2023-03-15 03:00:24

勇士两连胜不可轻敌,五连客魔鬼赛程到来,力拼一场胜利都不容易,库里,勇士队,火箭队,达拉斯小牛

2023-03-14 22:01:41

一、云篆山水项目概述云篆山水项目位于巴南区莲花街道,总建筑面积约140万平方米,规划有5个组团51幢住宅建筑,共有住宅约1 75万套,住宅总面积约

2023-03-14 19:15:58

国机汽车(600335)03月14日在投资者关系平台上答复了投资者关心的问题。

2023-03-14 16:51:34

1、大便变形、排气多与结肠炎、肠易激综合征、肠道菌群失调有关。2、结肠位于小肠下方,主要作用是吸收食物残渣中的水分,促进

2023-03-14 15:03:03

观点网讯:近日,山西省长城国家文化公园建设工作安排部署会召开,明确了今年推进长城国家文化公园建设的主要任务,提出要努力在国家文化公园

2023-03-14 12:54:21