一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - lua讀取redis數據的null判斷示例代碼

lua讀取redis數據的null判斷示例代碼

2020-05-08 10:50夏末 Lua

最近在工作中遇到了一個問題,通過查找相關資料才得知原因是因為返回結果的問題,下面這篇文章主要給大家介紹了關于lua讀取redis數據的null判斷的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

為什么要用lua腳本操作redis數據庫?

1.減少開銷–減少向redis服務器的請求次數

2.原子操作–redis將lua腳本作為一個原子執行

3.可復用–其他客戶端可以使用已經執行過的lua腳本

4.增加redis靈活性–lua腳本可以幫助redis做更多的事情

lua腳本本身體積小,啟動速度快.

因此,從redis 2.6.0開始,redis在服務器端內置lua解釋器,下面話不多說了,來開始本文的正文:

最近在配合移動端調試的時候,被抓去debug一個在清除redis緩存之后才會出現的網關錯誤。于是打開服務器上的log定位到類似錯誤:

[error] 7#7: *12030 lua entry thread aborted: runtime error: /data/share/apps/lua/access_check.lua:133: bad argument #1 to 'decode' (string expected, got userdata)

該段代碼的主要作用是在openresty中lua讀取redis中數據并解碼為json:

?
1
2
3
4
5
6
7
8
local access_token = redis_client:read_by_key(token_key)
 if access_token == nil then
  -- do something...
  return false
 end
 
 local obj_token = cjson.decode(access_token)
 -- do something

通過查詢資料得知原因:lua讀取redis數據返回結果為空時,返回的結果不是nil而是userdata類型的ngx.null

為什么要這么設計?

因為nil在lua中有特殊的意義,如果一個變量被設置為nil相當于告知該變量未定義(不存在)一樣,如果把redis查詢的結果為空設置為nil,而該查詢的key對應在redis中又是存在的,就無法把查詢為空和未定義區分開來了,這樣顯然是不合理的。所以必須使用一個userdata類型的值來表示這個查詢記錄為空,但是又不等同于未定義變量(ngx.null)。

因此,代碼做如下修改即可:

?
1
2
3
4
5
6
7
8
local access_token = redis_client:read_by_key(token_key)
 if access_token == ngx.null or access_token == nil then
  -- do something...
  return false
 end
 
 local obj_token = cjson.decode(access_token)
 -- do something

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://notes.doublemine.me/2018-01-26-lua讀取redis數據的null判斷.html

延伸 · 閱讀

精彩推薦
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監控賦值、通過table給另一個table賦值等內容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規范、全局變量、類型與值等內容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua實現__add方法重載示例

    Lua實現__add方法重載示例

    這篇文章主要介紹了Lua實現__add方法重載示例,本文直接給出實現代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua中計算、執行字符串中Lua代碼的方法

    Lua中計算、執行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執行字符串中Lua代碼的方法,類似JavaScript中eval函數的功能,在Lua中也可以實現,需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • LuaLua中table庫函數方法介紹

    Lua中table庫函數方法介紹

    這篇文章主要介紹了Lua中table庫函數方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
主站蜘蛛池模板: 人人最怕九月羊 | 久久久91精品国产一区二区 | 亚洲 欧美 国产 综合 播放 | 微福利92合集 | 国产探花视频 | heyzo1754北岛玲在线视频 | 猫咪maomiav永久网址 | 天天夜夜啦啦啦 | 男老头澡堂gay老头456 | 精品播放 | 精品久久久久久久久免费影院 | zzjj中国 | 精品丰满人妻无套内射 | www.一区二区三区.com | 国产亚洲福利精品一区 | xxx中国bbbwww| 男人狂躁女人下面狂叫图片 | 日韩精品视频在线观看免费 | 国产精品一区二区三区免费 | 欧美久久一区二区三区 | 蜜桃视频一区二区三区四区 | 欧美同性video | 欧美精品v欧洲高清 | 亚洲香蕉伊在人在线观婷婷 | 疯狂伦交1一6 小说 风间由美在线 | 精品99一区二区三区麻豆 | 色戒完整版2小时38分钟 | 欧美日韩一区二区三区在线播放 | 草草草草视频 | 9191久久| mm131亚洲| 色综合综合色 | 成年美女黄网站色视频大全免费 | 经典欧美gifxxoo动态图暗网 | 精品国产精品人妻久久无码五月天 | 四虎影视免费 | 扒开双腿疯狂进出爽爽动态图 | 亚洲精品第一国产综合高清 | 国产 日韩欧美 | 亚洲mv国产精品mv日本mv | 天天躁天天碰天天看 |