吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

觸發器和函數:讓代碼更接近數據

虹科網絡可視化技術 ? 2023-12-09 08:05 ? 次閱讀

一般來說,應用程序處理業務的邏輯,是將執行代碼發送到數據庫。因此每次執行函數時,代碼都會從客戶端流入服務器,結果就是這個過程十分緩慢,甚至會出現代碼在應用程序之間重復執行的情況。

而我們一向是反對復雜性的!從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。

#!js name=lib api_version=1.0

2.接下來,我們創建一個返回Redis命令結果的函數。客戶端允許在我們的函數中執行Redis 命令。數據事件包含運行函數時可以提供的鍵和參數

function answer(client, data) { return client.call(“ping”);}

3.Redis全局變量允許我們注冊觸發器和函數,并記錄到日志文件中。我們為該函數注冊一個名稱,并在函數執行時調用它。

redis.registerFunction(‘playPingPong’, answer);

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

#!js name=lib api_version=1.0 function answer(client, data) { return client.call(‘ping’);} redis.registerFunction(‘playPingPong’, answer);

5.然后我們使用命令在觸發器和函數中注冊我們的函數TFUNCTION LOAD。該TFUNCTION LOAD命令還可以在集群數據庫中分發函數庫。

> redis-cli -x TFUNCTION LOAD < ./lib.jsOK

6.現在我們可以使用TFCALL命令執行該函數。該命令獲取以句點分隔的庫名稱和函數名稱。

>redis-cli TFCALL lib.playPingPong 0“PONG”

7.這樣,就成功地在Redis數據庫中創建、注冊并觸發了一個函數。

8.我們可以使用鍵空間觸發器拓展這個示例。我們添加了一個新的注冊,該注冊對前綴為'fellowship:'的鍵做出反應。在lib.js文件末尾添加此代碼。

function addLastUpdatedField(client, data) { if(data.event == ‘hset’) { var currentDateTime = Date.now(); client.call(‘hset’, data.key, ‘last_updated’, currentDateTime.toString());}} redis.registerKeySpaceTrigger(‘addLastUpdated’, 'fellowship:', addLastUpdatedField);

9. 使用帶有 REPLACE 參數的 TFUNCTION LOAD 命令來更新現有庫。該TFUNCTION LOAD REPLACE命令立即更新所有使用 Redis 數據庫的客戶端,并且它們會開始使用新的業務邏輯。

>redis-cli -x TFUNCTION LOAD REPLACE . < ./lib.jsOK

10.要測試新的鍵空間觸發器,請創建一個以Fellowship:開頭的新鍵,并使用RedisInsight 檢查字段。鍵空間觸發器是通過命令執行的,因此在創建鍵時已經添加了last_updated字段。最后,我們可以在RedisInsight中查看結果。

8f46bc16-9626-11ee-9788-92fbcf53809c.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89583
  • 觸發器
    +關注

    關注

    14

    文章

    2003

    瀏覽量

    61349
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62977
收藏 人收藏

    評論

    相關推薦

    什么是觸發器 觸發器的工作原理及作用

    ,并根據其差異采取對策。實際應用盡管觸發器有很多優點,但是在實際的項目開發中,特別是OOP思想的深入,觸發器的弊端也逐漸突顯,主要:1、過多的觸發器使得數據邏輯變得復雜2、數據操作比較
    發表于 12-25 17:09

    JK觸發器,JK觸發器是什么意思

    JK觸發器,JK觸發器是什么意思 1.主從JK觸發器主從結構觸發器也可以徹底解決直接控制,防止空翻。這里以性能優良、廣泛使用的主從JK觸發器
    發表于 03-08 13:36 ?6901次閱讀

    什么是RS觸發器,RS觸發器的工作原理是什么?

    什么是RS觸發器,RS觸發器的工作原理是什么? 主從RS觸發器
    發表于 03-08 14:00 ?3.1w次閱讀

    施密特觸發器,施密特觸發器是什么意思

    施密特觸發器,施密特觸發器是什么意思 施密特觸發器也有兩個穩定狀態,但與一般觸發器不同的是,施密特觸發器采用電位
    發表于 03-08 14:14 ?1981次閱讀

    什么是邊沿觸發器_邊沿D觸發器介紹

    邊沿觸發器,指的是接收時鐘脈沖CP 的某一約定跳變(正跳變或負跳變)來到時的輸入數據。在CP=l 及CP=0 期間以及CP非約定跳變到來時,觸發器不接收數據
    發表于 01-31 09:02 ?7.2w次閱讀
    什么是邊沿<b class='flag-5'>觸發器</b>_邊沿D<b class='flag-5'>觸發器</b>介紹

    觸發器的作用_觸發器的特點介紹

    本文開始介紹了觸發器的定義和觸發器的特點,其次闡述了觸發器的分類和觸發器的作用,最后介紹了觸發器的工作原理。
    發表于 03-27 17:35 ?2.2w次閱讀

    觸發器觸發器的作用

     觸發器是一種用來保障參照完整性的特殊的存儲過程,它維護不同表中數據間關系的有關規則。當對指定的表進行某種特定操作(如:Insert,Delete或Update)時,觸發器產生作用。觸發器
    發表于 07-12 10:05 ?2.5w次閱讀
    <b class='flag-5'>觸發器</b>及<b class='flag-5'>觸發器</b>的作用

    電平觸發器,脈沖觸發器和邊沿觸發器觸發因素是什么

    脈沖觸發器由兩個相同的電平觸發的SR觸發器組成,其中左SR觸發器成為主觸發器,右手側稱為從觸發器
    的頭像 發表于 02-11 10:56 ?9623次閱讀
    電平<b class='flag-5'>觸發器</b>,脈沖<b class='flag-5'>觸發器</b>和邊沿<b class='flag-5'>觸發器</b>的<b class='flag-5'>觸發</b>因素是什么

    什么是觸發器?觸發器的作用是什么?觸發器觸發方式

    什么是觸發器?觸發器的作用是什么?觸發器觸發方式 觸發器是一種在數據庫中執行自動化操作的工具。
    的頭像 發表于 08-24 15:50 ?8974次閱讀

    觸發器的輸出是現態函數

    觸發器的輸出是現態函數 觸發器是數字電路中的一種重要元件,它們通常被用于存儲和裝載二進制數據,也可以用于控制和同步各種數字電路。在許多數字電路應用中,
    的頭像 發表于 08-24 15:50 ?1087次閱讀

    觸發器激勵函數和輸出函數解析

    觸發器激勵函數和輸出函數解析? 觸發器是數字電路中的一種重要的組合邏輯電路,其可以達到存儲、延時、計數等功能。觸發器有多種類型,如SR
    的頭像 發表于 08-24 15:50 ?3309次閱讀

    JK觸發器與T觸發器的Verilog代碼實現和RTL電路實現

    JK 觸發器的 Verilog 代碼實現和 RTL 電路實現
    的頭像 發表于 10-09 17:29 ?4985次閱讀
    JK<b class='flag-5'>觸發器</b>與T<b class='flag-5'>觸發器</b>的Verilog<b class='flag-5'>代碼</b>實現和RTL電路實現

    觸發器的基本性質 觸發器觸發方式分為哪三種

    是邏輯表達式、狀態改變或特定事件的發生。當這些條件滿足時,觸發器將被激活并執行各種動作。 觸發動作:觸發器在被激活后,將執行一系列特定的動作或事件。這些動作可以是觸發其他程序或
    的頭像 發表于 01-23 16:10 ?3893次閱讀

    d觸發器和jk觸發器的區別是什么

    ,可以存儲一位二進制信息。觸發器的輸出狀態取決于輸入信號和觸發器的當前狀態。觸發器的分類主要有D觸發器、JK觸發器、T
    的頭像 發表于 08-22 10:37 ?2359次閱讀

    怎么用jk觸發器變成t觸發器

    將JK觸發器變成T觸發器,主要涉及到對JK觸發器的輸入端口進行適當的連接和配置,以實現T觸發器的邏輯功能。以下是將JK觸發器轉換為T
    的頭像 發表于 08-28 09:41 ?3186次閱讀
    百家乐官网美女视频聊天| 百家乐游戏网址| 昭觉县| 大发888登陆网页| 上海百家乐赌博| 百家乐官网平注资讯| 百家乐官网真人娱乐平台| 郧西县| 赢钱的棋牌游戏| 威尼斯人娱乐城地图| 百家乐的路子怎么| 百家乐游戏玩法技巧| 百家乐官网规律打| 网上百家乐官网娱乐场开户注册| 百家乐官网桌布专业| 百家乐官网庄闲客户端| 百家乐官网软件代打| 巴彦淖尔市| 百家乐官网破解版下载| 百家乐官网太阳城怎么样| 吴桥县| 聚宝盆百家乐官网游戏| 舞钢市| 百家乐算点子打法攻略| 百家乐的路图片| 金百家乐的玩法技巧和规则 | 百家乐娱乐城返水| 百家乐赌博机假在哪里| 大杀器百家乐学院| 威尼斯人娱乐城代理佣金| 迪威百家乐赌场娱乐网规则| 怎样赢百家乐的玩法技巧和规则| 百家乐博赌场娱乐网规则| 怎么玩百家乐的玩法技巧和规则| 现场百家乐机| 大发888官方ylc8| 新利娱乐开户| 百家乐官网路单用处| 九州百家乐官网娱乐城| 百家乐官网象棋玩法| 百家乐官网翻天|