日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

lua pcall 返回值_Redis和Lua整合

發布時間:2025/3/12 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lua pcall 返回值_Redis和Lua整合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面我們已經介紹完了Redis相關的理論知識,從本篇開始我們介紹一些Redis相關的時機應用。比如:
  • Redis整合Lua

  • Redis的消息模式

  • Redis實現分布式鎖

  • 常見的緩存問題

  • 我們先從Redis整合Lua的使用開始。lua是一種輕量小巧的腳本語言,用標準C語言編寫并以源代碼形式開放,其設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定制功能。在Redis中使用Lua有以下好處:
  • 減少網絡開銷,在Lua腳本中可以把多個命令放在同一個腳本中運行。

  • 原子操作,redis會將整個腳本作為一個整體執行,中間不會被其他命令插入。換句話說,編寫腳本的過程中無需擔心會出現競態條件。

  • 復用性,客戶端發送的腳本會永遠存儲在redis中,這意味著其他客戶端可以復用這一腳本來完成同樣的邏輯。

  • 使用Lua腳本具體的示意圖如下:

    Redis整合Lua腳本

    通過執行redis的eval命令,可以運行一段lua腳本。EVAL script numkeys key [key ...] arg [arg ...]命令的具體說明如下:
  • script參數:是一段Lua腳本程序,它會被運行在Redis服務器上下文中,這段腳本不必(也不應該)定義為一個Lua函數。

  • numkeys參數:用于指定鍵名參數的個數。

  • key [key ...]參數:從EVAL的第三個參數開始算起,使用了numkeys個鍵(key),表示在腳本中所用到的那些Redis鍵(key),這些鍵名參數可以在Lua中通過全局變量KEYS數組,用1為基址的形 式訪問( KEYS[1], KEYS[2],以此類推)。

  • arg [arg ...]參數:可以在Lua中通過全局變量ARGV數組訪問,訪問的形式和KEYS變量類似( ARGV[1] 、 ARGV[2] ,諸如此類)。

  • eval "return {KEYS[1], KEYS[2], ARGV[1],ARGV[2]} 2 key1 key2 first second"

    Lua腳本中調用Redis命令

    我們可以在Lua腳本中調用Redis命令:
  • redis.call()

  • redis.pcall()

  • redis.call()和redis.pcall()的返回值都是redis命令執行的返回值,區別在于如果出錯,call()則返回錯誤信息,不繼續執行,而pcall()繼續執行。在腳本中,使用return語句將返回值返回給客戶端,如果沒有return,則返回nil。eval "return redis.call('set', KEYS[1], ARGV[1])" 1 n1 eleven

    SCRIPT命令

    另外一方面在Redis中有一些管理Lua腳本的命令:
  • SCRIPT FLUSH:清除所有腳本緩存

  • SCRIPT EXISTS:根據給定的腳本校驗和,檢查指定的腳本是否存在于腳本緩存

  • SCRIPT LOAD:將一個腳本裝入腳本緩存,返回SHA1摘要,但并不立即運行它

  • SCRIPT KILL:殺死當前正在運行的腳本

  • 192.168.24.131:6380> script load "return redis.call('set',KEYS[1],ARGV[1])""c686f316aaf1eb01d5a4de1b0b63cd233010e63d"192.168.24.131:6380> evalsha c686f316aaf1eb01d5a4de1b0b63cd233010e63d 1 n2elevenOK192.168.24.131:6380> get n2

    ?

    EVALSHA

    EVAL 命令要求你在每次執行腳本的時候都發送一次腳本主體(script body)。Redis 有一個內部的緩存機制,因此它不會每次都重新編譯腳本,不過在很多場合,付出無謂的帶寬來傳送腳本主體并不是最佳選擇。為了減少帶寬的消耗, Redis 實現了 EVALSHA 命令,它的作用和 EVAL 一樣,都用于對腳本求值,但它接受的第一個參數不是腳本,而是腳本的 SHA1 校驗和(sum)。下面我們舉兩個使用Lua腳本的例子:return redis.call('set', KEYS[1], ARGV[1])上面是一個set腳本,在redis中我們可以這樣使用:redis-cli -h 192.168.24.131 -p 6380 --eval test.lua n3, 'eleven'總結一下利用Redis整合Lua,主要是為了性能以及事務的原子性。因為redis幫我們提供的事務功能太差。

    總結

    以上是生活随笔為你收集整理的lua pcall 返回值_Redis和Lua整合的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。