• 首页
  • 粮食
  • 蔬菜
  • 果品
  • 水产
  • 酒水
  • 饮料
  • 茶叶
  • 畜禽
  • 食用油
  • 资讯
logo
  • 首页>
  • 资讯 >
  • 正文

每日快看:手把手带你了解redis回调机制及代码实现

2023-03-11 01:11:36 来源:腾讯云

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

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回调机制及代码实现

    资讯2023-03-11
  • 【世界新视野】无氧铜线是什么(无氧铜是什么意思)

    资讯2023-03-10
  • 黄钻值钱吗_黄钻特权-聚焦

    资讯2023-03-10
  • 信息:半年工资流水账单图片_银行流水账单怎么打

    资讯2023-03-10
  • 华林证券:控股股东立业集团新增质押9300万股公司股份用于自身经营发展-今日观点

    资讯2023-03-10
  • 观点:祚明

    资讯2023-03-10
  • 全球短讯!亚洲陆上最深油气水平井在塔里木盆地完钻

    资讯2023-03-10
  • 伊朗版东风21D现身,覆盖周边1000公里,美航母也照打不误|报道

    资讯2023-03-10
  • 两岸直航3月10日起恢复10个定期航班航点 环球快看点

    资讯2023-03-10
  • 快看点丨简历职业技能怎么写比较好_简历职业技能怎么填写

    资讯2023-03-10
  • 为制造业高质量发展贡献智慧与力量——访浙江省宁波市委副书记、市长汤飞帆代表 世界新动态

    资讯2023-03-10
  • 客户分类管理方法_客户分类

    资讯2023-03-10
  • 只羡鸳鸯不羡仙上一句解析_只羡鸳鸯不羡仙上一句_世界看热讯

    资讯2023-03-09
  • 关于感恩的小故事(感恩的故事盘点)-全球观点

    资讯2023-03-09
  • 陈墨瞳和路明非的结局_陈墨瞳|关注

    资讯2023-03-09
  • 资讯推荐:芦根泡水喝的五大禁忌_芦根

    资讯2023-03-09
  • 广东江门新会:税惠暖企焕新颜 春风行动开新局

    资讯2023-03-09
  • 《我家门前有条河》聊城文旅原创MV来了!歌声传递水城人民千年“两河”情

    资讯2023-03-09
  • 速看:美情报报告:俄仍有可能与北约发生军事冲突

    资讯2023-03-09
  • 洞中方一日世上已千年用爱因斯坦的什么来解释|全球速看料

    资讯2023-03-09

果品

  • 北京2022年冬奥会、冬残奥会奖牌“同心”正式发布
  • 冬奥故事会丨一图了解冬奥会历届奖牌
  • 冰雪之约 中国之邀 | 9种语言祝福冬奥倒计时100天
  • 同心筑梦向未来——写在北京冬奥会开幕倒计时100天之际
  • 外交部:美国针对亚裔仇恨犯罪数字令人痛心

蔬菜

  • 说好“一梯一户”却成了“两梯两户”,买方能否解除合同?
  • 更高水平开放合作助力中国东盟经贸发展迎新机遇
  • 9被告人犯侵犯著作权罪被判刑罚
  • 玉渊谭天丨中美再通话,“建设性”很重要
  • 环球时报社评:中美经贸需要建设性对话
  • 俄媒:莫斯科扩大新冠感染新疗法试点范围
  • 冰雪之约 中国之邀 | 追赶的勇气
  • 中国第20批赴黎维和建筑工兵分队完成“VA-2”道路排水系统修缮任务
  • 中国常驻联合国代表团举办恢复联合国合法席位50周年图片展
  • 美专家认为三大原因导致美国供应链危机

Copyright   2015-2022 青年食品网 版权所有  备案号:皖ICP备2022009963号-20   联系邮箱:39 60 291 42@qq.com