触发器和函数:让代码更接近数据

来源:艾特保IT 虹科干货丨触发器和函数:让代码更接近数据

原文链接:虹科干货 | 触发器和函数:让代码更接近数据

欢迎关注虹科,为您提供最新资讯!

文章速览:

触发器和函数的基础知识

编写语言:从Lua到JavaScript

轻松维护应用程序代码

数据库事件实时处理

如何操作触发器和函数

一般来说,应用程序处理业务的逻辑,是将执行代码发送到数据库。因此每次执行函数时,代码都会从客户端流入服务器,结果就是这个过程十分缓慢,甚至会出现代码在应用程序之间重复执行的情况。

而我们一向是反对复杂性的!从Redis Gears到Redis7.0再到Redis7.2,我们的愿景就是为开发人员提供更灵活、高效的解决方案。

Redis Gears:四年前推出的RedisGears,是Redis平台内的第一个可编程模型,开发人员能在数据所在的地方编写并执行脚本。

Redis 7.0:Redis 7.0引入了带有函数的脚本方法,函数作为数据库的一部分,提高了可用性和持久性,继承了数据的复制和持久性级别。

Redis 7.2:Redis 7.2更进一步,引入了触发器和函数,以增强Redis的可编程性;扩展了服务器端功能;改进了数据库中执行功能的方式和时间;并促进了直接在数据所在的地方执行复杂的业务逻辑。

01 触发器和函数的基础知识

触发器和函数是通过Redis Stack提供的新一代可编程功能。它允许开发人员直接在Redis数据库中针对数据更改进行编程、存储和自动执行JavaScript代码。

1、开发人员可以定义事件(称为触发器)来执行更接近数据的函数也就是说,开发人员定义响应数据库事件或命令而执行的业务逻辑。这加快了代码和相关交互的速度,因为无需等待即可将代码从客户端引入数据库。 

2、加快对Redis中其他事件的反应时间,如键空间通知,这些通知无法通过发布和订阅(Pub/Sub)事件等其他方式实时处理。

3、远程功能:触发器和函数处理集群数据库内的分布,在每个分片上安装库并根据密钥所在的位置执行函数。远程函数允许执行读取操作,这些操作可以从任何槽访问数据,甚至在集群数据库中也是如此,因此可以从每个函数访问所有数据。

02 编写语言:从Lua到JavaScript

Redis使用Lua来编写脚本和函数。Lua有很多好处,例如代码可重用性,但它并不是专业开发人员常用的语言。根据2022 年StackOverflow开发者调查,只有3.2%的开发人员在专业领域使用 Lua。

因此,在Redis7.2中引入了JavaScript,这种更流行的语言的引入,可以降低新Redis开发人员的采用成本。

03 应用程序代码更容易维护

触发器和函数的另一个好处是它降低了跨多个应用程序管理业务逻辑的复杂性。

当多个应用程序访问同一数据库时,开发人员必须协调应用程序如何以一致的方式处理数据。在每个应用程序中复制代码以验证数据、丰富搜索结果,或在另一个应用程序进行更改时更新数据库也是很常见的。

有了触发器和函数,就不再需要在多个应用程序上重复代码。代码始终以相同的方式执行,按需执行或由数据库中的事件启动。

04 数据库事件实时处理

到目前为止,开发人员对Redis中的数据库事件做出反应需要依赖Pub/Sub机制。虽然 Pub/Sub有很多优点,但它并不总是正确的选择。特别是,Pub/Sub不是实时的。客户端必须主动监听事件;如果客户端没有监听,事件就会丢失。

在Redis7.2时代,开发人员可以注册基于键前缀和事件类型执行的键空间触发器。触发器可以以原子方式执行,因此在事件和业务逻辑之间不处理其他Redis事件。

05 如何操作触发器和函数

这里,我们介绍如何注册一个函数和一个触发器。当通过TFCALL命令调用函数时,函数就会被执行;触发器根据Redis中的事件执行。

1.序言定义我们使用js引擎,库名称为lib,所需的触发器和函数API的最低版本为1.0。

2,接下来,我们创建一个返回Redis命令结果的函数。客户端允许在我们的函数中执行Redis 命令。数据事件包含运行函数时可以提供的键和参数。

3.Redis全局变量允许我们注册触发器和函数,并记录到日志文件中。我们为该函数注册一个名称,并在函数执行时调用它。

4.完整的JavaScript文件如下所示,将其另存为lib.js.

5.然后我们使用命令在触发器和函数中注册我们的函数TFUNCTION LOAD。该TFUNCTION LOAD命令还可以在集群数据库中分发函数库。

6.现在我们可以使用TFCALL命令执行该函数。该命令获取以句点分隔的库名称和函数名称。

7.这样,就成功地在Redis数据库中创建、注册并触发了一个函数。

8.我们可以使用键空间触发器拓展这个示例。我们添加了一个新的注册,该注册对前缀为'fellowship:'的键做出反应。在lib.js文件末尾添加此代码。

9. 使用带有 REPLACE 参数的 TFUNCTION LOAD 命令来更新现有库。该TFUNCTION LOAD REPLACE命令立即更新所有使用 Redis 数据库的客户端,并且它们会开始使用新的业务逻辑。

10.要测试新的键空间触发器,请创建一个以Fellowship:开头的新键,并使用RedisInsight 检查字段。键空间触发器是通过命令执行的,因此在创建键时已经添加了last_updated字段。最后,我们可以在RedisInsight中查看结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI创新之美:AIGC探讨2024年春晚吉祥物龙辰辰的AI绘画之独特观点

🎬 鸽芷咕:个人主页 🔥 个人专栏:《粉丝福利》 《linux深造日志》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、龙辰辰事件概述二、为什么龙辰辰会被质疑AI创作?1.1 AI 作画的特点2.2 关于建行的合作宣传图…

聊聊AsyncHttpClient的IOExceptionFilter

序 本文主要研究一下AsyncHttpClient的IOExceptionFilter IOExceptionFilter org/asynchttpclient/filter/IOExceptionFilter.java /*** This filter is invoked when an {link java.io.IOException} occurs during an http transaction.*/ public interface IOExceptionFi…

都是星光赶路人

不知不觉已经快工作五年了,工作以后就感觉时间一年比一年快,仿佛昨天才刚毕业,就像陈鸿宇歌中的那样,多少遗憾自负存念想,唯有时间不可挡。五年,思考了很多,也想明白了许多。正好借着年末&#…

STM32 MCU的易坑点收集

IIC配置中的Clock No Stretch Mode Clock Stretch Mode时钟延长模式: 时钟延长是一个术语,某些从设备可以把时钟线拉低,主设备发现自己释放时钟线之后时钟线还没有变成高电平,就会停止发送数据,然后等待从设备释放时钟…

Angular+Nginx区域HIS医院信息管理系统源码

医院管理信息系统(HIS)是医院基本、重要的管理系统,是医院大数据的基础。“云”指系统采用云计算的技术和建设模式,具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生,由原来医院 (…

利用transition-group标签包裹li标签,实现输入数据后按Enter键将数据添加到列表中

1.效果图 2.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><script src"https://cdn.bootcdn.net/ajax/libs/vue/2.3.0/vue.js"></script><div id&quo…

免费实用的API接口集合

IP归属地-IPv4区县级&#xff1a;根据IP地址查询归属地信息&#xff0c;包含43亿全量IPv4&#xff0c;支持到中国地区&#xff08;不含港台地区&#xff09;区县级别&#xff0c;含运营商数据。IP归属地-IPv4城市级&#xff1a;根据IP地址查询归属地信息&#xff0c;支持到城市…

CLEAR MOT评估指标

错误正样本&#xff08;False Positive&#xff0c;FP&#xff09;&#xff1a;整个视频中被预测为正的负样本数。 错误负样本&#xff08;False Negatives&#xff0c;FN&#xff09;&#xff1a;整个视频中被预测为负的正样本数。 IDs&#xff1a;跟踪过程中目标ID切换总数。…

Angular13无法在浏览器debug

前言 本文将介绍如何解决在Angular 13中无法在浏览器中进行调试的问题&#xff0c;并提供了一种解决方法。 发生场景 根据项目需求&#xff0c;升级至Angular 13后&#xff0c;发现无法在浏览器中进行调试。 问题原因 无法进行调试的原因是&#xff0c;当使用Angular 13的…

QT----第三天,Visio stdio自定义封装控件

目录 第三天1 自定义控件封装 源码&#xff1a;CPP学习代码 第三天 1 自定义控件封装 新建一个QT widgetclass&#xff0c;同时生成ui,h,cpp文件 在smallWidget.ui里添加上你想要的控件并调试大小 回到mainwidget.ui&#xff0c;拖入一个widget&#xff08;因为我们封装的也…

二分查找26(Leetcode528按权重随机选择)

代码&#xff1a; 看不懂题 看了题解才懂题是什么意思.. 二分查找完结撒花&#xff01;&#x1f389; class Solution {int[] pre;int total;public Solution(int[] w) {int n w.length;total Arrays.stream(w).sum();pre new int[n];pre[0] w[0];for(int i1;i<n;i){…

Single Thread Execution设计模式

Single Thread Execution模式是指在同一时刻只能有一个线程去访问共享资源&#xff0c;即采用排他方式的操作保证在同一个时刻只能有一个线程访问共享 资源。线程安全类是指多个线程在对某个类的实例同时进行操作时&#xff0c;不会引起数据的不一致问题。反之&#xff0c;就是…

【送书活动】探究AIGC、AGI、GPT和人工智能大模型

文章目录 前言01 《ChatGPT 驱动软件开发》推荐语 02 《ChatGPT原理与实战》推荐语 03 《神经网络与深度学习》推荐语 04 《AIGC重塑教育》推荐语 05 《通用人工智能》推荐语 后记赠书活动 前言 人工智能技术在过去几年中发展迅猛&#xff0c;得益于大数据、云计算、深度学习等…

C++1114新标准——统一初始化(Uniform Initialization)、Initializer_list(初始化列表)、explicit

系列文章目录 C11&14新标准——Variadic templates&#xff08;数量不定的模板参数&#xff09; C11&14新标准——Uniform Initialization&#xff08;统一初始化&#xff09;、Initializer_list&#xff08;初始化列表&#xff09;、explicit 文章目录 系列文章目录1…

TiDB 7.5 LTS 发版丨提升规模化场景下关键应用的稳定性和成本的灵活性

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/1cffec89 互联网时代&#xff0c;数据的迅猛增长给数据库带来了可扩展性的挑战&#xff0c;Gen AI 带来的数据暴增更加剧了这种挑战。传统的数据分片已经不能承载新时代数据暴增的需求&#xf…

UE4 Niagara学习笔记

需要在其他发射器的同一个粒子位置发射其他粒子就用Spawn Particles from other Emitter 把发射器名字填上去即可 这里Move to Nearest Distance Field Subface GPU&#xff0c;可以将生成的Niagara附着到最近的物体上 使用场景就是做的火苗附着到物体上

【每日一题】2697. 字典序最小回文串-2023.12.13

题目&#xff1a; 2697. 字典序最小回文串 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行…

Python和Beautiful Soup爬虫助力提取文本内容

大家好&#xff0c;网络爬虫是一项非常抢手的技能&#xff0c;收集、分析和清洗数据是数据科学项目中最重要的部分。今天介绍如何从链接中爬取高质量文本内容&#xff0c;我们使用迭代&#xff0c;从大约700个链接中进行网络爬取。如果想直接跳转到代码部分&#xff0c;可以在下…

【图像拼接】论文精读:Natural Image Stitching With Layered Warping Constraint

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

Java面试整理(四)-JVM类加载机制(中)

Java虚拟机(JVM)的类加载机制是Java平台的核心组件之一,它负责加载、链接、初始化类和接口。这个机制涉及几个关键的步骤和组件: 类加载器(Class Loaders):引导类加载器(Bootstrap Class Loader):这是JVM的一部分,用于加载JDK内部类和其他核心库。通常,这个类加载器…