成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在Redis中執行Lua腳本?

數據庫 Redis
Redis調用Lua腳本,腳本執行完成后將結果返回給Redis,Redis再將結果返回給客戶端。這個過程中會出現Redis執行結果類型到Lua數據類型的轉換,然后Lua類型到Redis類型的轉換。

Redis中需要執行Lua腳本的場景

Redis中每條命令都是原子性的,即執行結果要么全部成功要么全部失敗。在某些業務場景下,需要執行多條命令,并且要保證多條命令的原子性。這時,如果命令逐條執行,顯然是不能保證原子性的。有同學可能會想到使用Redis的事務功能,事務是可以保證原子性,但是受限于命令的功能,有些場景下并不能實現想要的功能。

使用執行Lua腳本的方式可以解決以上問題,Lua腳本整體上在Redis中是原子性的。

在Redis中執行Lua腳本

在Redis中通過EVAL命令來執行Lua腳本,基本語法如下:

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

參數說明:

  • script: 參數是一段Lua腳本程序。腳本不必(也不應該)定義為一個 Lua 函數。
  • numkeys: 用于指定鍵名參數的個數。
  • key [key ...]: 從 EVAL 的第三個參數開始算起,表示在腳本中所用到的那些 Redis 鍵(key),這些鍵名參數可以在 Lua 中通過全局變量 KEYS 數組,用 1 為基址的形式訪問( KEYS[1] , KEYS[2] ,以此類推)。
  • arg [arg ...]: 附加參數,在 Lua 中通過全局變量 ARGV 數組訪問,訪問的形式和 KEYS 變量類似( ARGV[1] 、 ARGV[2] ,諸如此類)。

獲取指定key的值,相當于于 GET somekey

EVAL "return redis.call('GET', KEYS[1])" 1 somekey

再看一個LPUSH的例子,相當于 LPUSH somelist 1 2 3

EVAL "return redis.call('LPUSH',KEYS[1], ARGV[1], ARGV[2], ARGV[3])" 1 somelist 1 2 3

簡單說下Redis執行lua腳本相關的其他幾個命令:

  • EVALSHA命令根據給定的SHA1,執行緩存在服務器中的腳本。
  • SCRIPT EXISTS命令用于檢查指定SHA1值對應的腳本是否在Redis緩存中。
  • SCRIPT FLUSH命令用于清除所有的緩存腳本。
  • SCRIPT KILL命令用于殺死當前正在運行的 Lua 腳本,當且僅當這個腳本沒有執行過任何寫操作時,這個命令才生效。這個命令主要用于終止運行時間過長的腳本,比如一個因為 BUG 而發生無限循環的腳本。SCRIPT KILL 執行之后,當前正在運行的腳本會被殺死,執行這個腳本的客戶端會從 EVAL 命令的阻塞當中退出,并收到一個錯誤作為返回值。

Lua腳本中調用Reids命令

調用Redis命令,當執行出錯時,該方法會直接返回錯誤,并退出。

redis.call(redisCommand, key, argv...)

調用Redis命令,當執行出錯時,記錄錯誤信息,并繼續執行。

redis.pcall(redisCommand, key, argv...)

記錄日志,寫入到Redis配置的日志文件中,日志級別有四種,分別是redis.LOG_DEBUG、redis.LOG_VERBOS、redis.LOG_NOTICE和redis.LOG_WARNING。

redis.log(logLevel, message)

計算輸入字符串的sha1哈希值。

redis.sha1hex(arvg)

Lua與Redis類型轉換

Redis調用Lua腳本,腳本執行完成后將結果返回給Redis,Redis再將結果返回給客戶端。這個過程中會出現Redis執行結果類型到Lua數據類型的轉換,然后Lua類型到Redis類型的轉換。Redis類型到Lua類型轉換關系如下:

Redis返回的數據類型

Lua數據類型

integer(整數回復)

number(數字類型)

bulk replay(字符串)

string(字符串類型)

多行字符串

table(數組形式)

status(狀態回復)

table(只有一個ok字段的數組)

error(錯誤回復)

table(只有一個err字段的數組)

Lua類型到Redis類型轉換關系如下:

Lua數據類型

Redis返回數據類型

number(數字類型)

integer(整數回復)

string(字符串類型)

bulk replay(字符串)

table(數組形式)

多行字符串

table(只有一個ok字段的數組)

status(狀態回復)

table(只有一個err字段的數組)

error(錯誤回復)

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-08-23 09:56:52

UnicodeLua

2016-12-20 09:30:22

shell腳本linux

2011-08-25 13:22:40

CEGUILua腳本

2011-08-25 09:55:27

2017-04-13 10:46:14

Webpack執行代碼分割

2009-06-08 21:35:02

Java啟動程序

2017-01-18 20:38:36

LinuxShell腳本命令

2011-08-24 10:32:03

LuaPlusC++Lua

2023-10-19 14:52:27

2021-01-18 17:23:30

代碼調試VS Code

2021-08-20 10:46:25

Shell腳本文件Linux

2021-04-21 08:03:34

腳本Shell讀取

2024-05-31 12:54:37

.NET CoreLinux語言

2011-08-31 15:36:59

Lua解釋器

2022-03-08 07:22:48

Redis腳本分布式鎖

2020-06-04 17:00:37

Linux命令腳本

2017-03-10 10:37:16

Linux命令腳本

2019-08-06 14:06:19

數據庫工具技術

2016-12-16 09:23:29

LinuxShell腳本

2021-11-26 00:04:01

RedisLua 腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩美香港a一级毛片免费 国产综合av | 国产精品美女久久久久久不卡 | 日韩和的一区二在线 | 中文字幕蜜臀 | www.日韩欧美 | 国产精品网址 | 欧美日韩在线视频一区二区 | 日韩精品免费视频 | 韩国av一区二区 | 伊人网综合在线观看 | 一区二区三区国产好的精 | 91精品国产91久久久久久密臀 | 黄网址在线观看 | 涩涩导航 | 91色视频在线观看 | 欧美成人一区二区三区 | 91精品国产综合久久福利软件 | 免费成人高清在线视频 | 中文字幕一级毛片 | 精品久久久久国产 | www.亚洲 | 日韩精品成人在线 | 精品国产乱码久久久久久丨区2区 | 久久99国产精一区二区三区 | 国产毛片av| 天天干.com | 久久久久久久国产精品 | 欧美精品1区 | 国产欧美日韩精品一区 | 夜夜爽99久久国产综合精品女不卡 | 国产高清在线精品一区二区三区 | 国产精品一区二区三级 | 亚洲网站在线观看 | 日韩一区二区三区视频在线观看 | 欧美在线国产精品 | 久久国产成人午夜av影院武则天 | 日韩高清不卡 | 日韩一区二区三区在线视频 | 日韩一区二区在线观看 | 在线婷婷 | 欧美a区 |