濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > lua讀取redis數(shù)據(jù)的null判斷示例代碼

lua讀取redis數(shù)據(jù)的null判斷示例代碼

熱門標(biāo)簽:外呼系統(tǒng)一天耗費(fèi)多少流量 昆明電話外呼系統(tǒng)好么 免費(fèi)門店地圖標(biāo)注注冊(cè)入駐 電話機(jī)器人每天搜索多少次 陜西便宜電銷機(jī)器人軟件 衡水外呼線路解決 艾比利外呼系統(tǒng) ??谥悄苷Z(yǔ)音電銷機(jī)器人好用嗎 杞縣地圖標(biāo)注app

前言

為什么要用lua腳本操作redis數(shù)據(jù)庫(kù)?

1.減少開銷–減少向redis服務(wù)器的請(qǐng)求次數(shù)

2.原子操作–redis將lua腳本作為一個(gè)原子執(zhí)行

3.可復(fù)用–其他客戶端可以使用已經(jīng)執(zhí)行過(guò)的lua腳本

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

lua腳本本身體積小,啟動(dòng)速度快.

因此,從redis 2.6.0開始,redis在服務(wù)器端內(nèi)置lua解釋器,下面話不多說(shuō)了,來(lái)開始本文的正文:

最近在配合移動(dòng)端調(diào)試的時(shí)候,被抓去debug一個(gè)在清除redis緩存之后才會(huì)出現(xiàn)的網(wǎng)關(guān)錯(cuò)誤。于是打開服務(wù)器上的log定位到類似錯(cuò)誤:

[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中l(wèi)ua讀取redis中數(shù)據(jù)并解碼為json:

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

通過(guò)查詢資料得知原因:lua讀取redis數(shù)據(jù)返回結(jié)果為空時(shí),返回的結(jié)果不是nil而是userdata類型的ngx.null。

為什么要這么設(shè)計(jì)?

因?yàn)閚il在lua中有特殊的意義,如果一個(gè)變量被設(shè)置為nil相當(dāng)于告知該變量未定義(不存在)一樣,如果把redis查詢的結(jié)果為空設(shè)置為nil,而該查詢的key對(duì)應(yīng)在redis中又是存在的,就無(wú)法把查詢?yōu)榭蘸臀炊x區(qū)分開來(lái)了,這樣顯然是不合理的。所以必須使用一個(gè)userdata類型的值來(lái)表示這個(gè)查詢記錄為空,但是又不等同于未定義變量(ngx.null)。

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

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 簡(jiǎn)介L(zhǎng)ua腳本與Redis數(shù)據(jù)庫(kù)的結(jié)合使用
  • Nginx+Lua+Redis構(gòu)建高并發(fā)Web應(yīng)用
  • 詳解利用redis + lua解決搶紅包高并發(fā)的問(wèn)題
  • 利用nginx+lua+redis實(shí)現(xiàn)反向代理方法教程
  • 利用Lua定制Redis命令的方法詳解
  • Go語(yǔ)言中通過(guò)Lua腳本操作Redis的方法
  • Redis執(zhí)行Lua腳本的好處與示例代碼
  • redis中如何使用lua腳本讓你的靈活性提高5個(gè)逼格詳解
  • Redis如何使用lua腳本實(shí)例教程
  • phpredis執(zhí)行LUA腳本示例代碼

標(biāo)簽:昌都 西寧 臨滄 泰安 南京 營(yíng)口 宿遷

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《lua讀取redis數(shù)據(jù)的null判斷示例代碼》,本文關(guān)鍵詞  lua,讀取,redis,數(shù)據(jù),的,null,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《lua讀取redis數(shù)據(jù)的null判斷示例代碼》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于lua讀取redis數(shù)據(jù)的null判斷示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    伊宁县| 和顺县| 闽侯县| 博湖县| 报价| 乐平市| 安平县| 河北省| 兴仁县| 嘉峪关市| 延庆县| 上杭县| 滁州市| 石景山区| 泰兴市| 莲花县| 盐边县| 广宁县| 清河县| 辰溪县| 濉溪县| 云林县| 甘肃省| 津南区| 阳朔县| 甘南县| 烟台市| 尼木县| 长岭县| 和硕县| 大余县| 峨眉山市| 汉沽区| 伊金霍洛旗| 塔河县| 兴化市| 塘沽区| 信宜市| 北流市| 壤塘县| 株洲县|