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

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

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
主站蜘蛛池模板: 久久视频这有精品63在线国产 | 亚洲AV精品无码喷水直播间 | 国产啪精品视频网给免丝袜 | 国产播放器一区 | 91免费永久国产在线观看 | 99热精品久久 | freesex 18 19处xx| 99久久综合精品免费 | 久久婷婷五月综合色丁香花 | 国产日本欧美亚洲精品视 | 欧美综合影院 | 男同gay作爰视频网站 | 日本噜噜影院 | 青草青青在线视频观看 | heyzo在线播放 | 动漫xnxx | 韩国男女做性全过程视频 | 青柠网在线观看视频 | 色天天色综合 | 日本黄色大片免费观看 | 人与动人物aaaa | 99久久精品国产片久人 | 91制片厂制作传媒网站破解 | 日本在线播放视频 | 精品国产免费久久久久久婷婷 | 国内会所按摩推拿国产 | 久久伊人电影 | 我强进了老师身体在线观看 | 牛牛色婷婷在线视频播放 | 久久99re2热在线播放7 | 色噜噜国产精品视频一区二区 | 手机在线观看网站免费视频 | 成人性生交大片免费看软件 | 国产成人综合亚洲一区 | 亚洲人成网站在线观看青青 | 亚洲欧美国产精品完整版 | 日韩毛片免费 | 久久re这里精品在线视频7 | 风间由美一区二区播放合集 | 久久www免费人成_看片高清 | 欧美丰满大乳大屁在线观看股 |