最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年09月04日 14:13:14   作者:夏末  
最近在工作中遇到了一個(gè)問題,通過查找相關(guān)資料才得知原因是因?yàn)榉祷亟Y(jié)果的問題,下面這篇文章主要給大家介紹了關(guān)于lua讀取redis數(shù)據(jù)的null判斷的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

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

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

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

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

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

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

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

最近在配合移動(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

通過查詢資料得知原因: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中又是存在的,就無法把查詢?yōu)榭蘸臀炊x區(qū)分開來了,這樣顯然是不合理的。所以必須使用一個(gè)userdata類型的值來表示這個(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à)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Lua中的閉包小結(jié)

    Lua中的閉包小結(jié)

    這篇文章主要介紹了Lua中的閉包小結(jié),本文對(duì)閉包的概念做了講解,同時(shí)給出閉包代碼示例,需要的朋友可以參考下
    2014-09-09
  • Lua教程(三):表達(dá)式和語(yǔ)句

    Lua教程(三):表達(dá)式和語(yǔ)句

    這篇文章主要介紹了Lua教程(三):表達(dá)式和語(yǔ)句,本文講解了算術(shù)操作符、關(guān)系操作符、邏輯操作符、字符串連接、table構(gòu)造器、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua學(xué)習(xí)筆記之表達(dá)式

    Lua學(xué)習(xí)筆記之表達(dá)式

    在Lua中,表達(dá)式包括:數(shù)值常量、字符串字面值、變量、單目和雙目運(yùn)算符,函數(shù)調(diào)用,也包括一些非傳統(tǒng)的函數(shù)定義和表結(jié)構(gòu)。今天我們就來詳細(xì)了解下lua中的表達(dá)式
    2015-04-04
  • 詳解Lua中的元表概念

    詳解Lua中的元表概念

    這篇文章主要介紹了詳解Lua中的元表,是Lua入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua中調(diào)用C語(yǔ)言函數(shù)實(shí)例

    Lua中調(diào)用C語(yǔ)言函數(shù)實(shí)例

    這篇文章主要介紹了Lua中調(diào)用C語(yǔ)言函數(shù)實(shí)例,本文先講解了相關(guān)知識(shí),然后給出了調(diào)用實(shí)例,需要的朋友可以參考下
    2015-04-04
  • Lua操作字符串的5個(gè)代碼片段分享

    Lua操作字符串的5個(gè)代碼片段分享

    這篇文章主要介紹了Lua操作字符串的5個(gè)代碼片段分享,本文講解了匹配字符串中的數(shù)字、字母和下劃線、替換字符串中的指定字符、判斷字符串中是否有目標(biāo)字串、從文件的絕對(duì)路徑中獲取到文件名等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn)

    Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn)

    今天小編就為大家分享一篇關(guān)于Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Lua腳本語(yǔ)言入門筆記

    Lua腳本語(yǔ)言入門筆記

    這篇文章主要介紹了Lua腳本語(yǔ)言入門筆記,本文講解了什么是Lua、Lua里的注釋、Lua里的變量、Lua里的運(yùn)算符、Lua里的數(shù)據(jù)類型、Lua里的代碼塊、Lua里的關(guān)系類型、Lua里的函數(shù)、Lua里的類等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • Lua字符串庫(kù)中的幾個(gè)重點(diǎn)函數(shù)介紹

    Lua字符串庫(kù)中的幾個(gè)重點(diǎn)函數(shù)介紹

    這篇文章主要介紹了Lua字符串庫(kù)中的幾個(gè)重點(diǎn)函數(shù)介紹,本文講解了幾個(gè)最常用的強(qiáng)大的字符串函數(shù)find、match、gsub、gmatch,需要的朋友可以參考下
    2014-09-09
  • Lua流程控制語(yǔ)句if else的使用示例

    Lua流程控制語(yǔ)句if else的使用示例

    今天小編就為大家分享一篇關(guān)于Lua流程控制語(yǔ)句if else的使用示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評(píng)論

左权县| 巴林左旗| 泽普县| 商河县| 泌阳县| 宿迁市| 胶州市| 水富县| 康平县| 景宁| 东乡族自治县| 金阳县| 邛崃市| 静乐县| 赫章县| 茶陵县| 西贡区| 桐庐县| 大邑县| 武陟县| 河东区| 拜泉县| 稻城县| 保康县| 桦川县| 富民县| 阿鲁科尔沁旗| 治多县| 富平县| 绍兴市| 新建县| 西安市| 平江县| 泉州市| 杭州市| 垫江县| 宜州市| 泌阳县| 定边县| 霍邱县| 天气|