校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > lua讀取redis數據的null判斷示例代碼

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

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

前言

為什么要用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:

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)。

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

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

總結

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

您可能感興趣的文章:
  • 簡介Lua腳本與Redis數據庫的結合使用
  • Nginx+Lua+Redis構建高并發Web應用
  • 詳解利用redis + lua解決搶紅包高并發的問題
  • 利用nginx+lua+redis實現反向代理方法教程
  • 利用Lua定制Redis命令的方法詳解
  • Go語言中通過Lua腳本操作Redis的方法
  • Redis執行Lua腳本的好處與示例代碼
  • redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解
  • Redis如何使用lua腳本實例教程
  • phpredis執行LUA腳本示例代碼

標簽:昌都 西寧 臨滄 泰安 南京 營口 宿遷

巨人網絡通訊聲明:本文標題《lua讀取redis數據的null判斷示例代碼》,本文關鍵詞  lua,讀取,redis,數據,的,null,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《lua讀取redis數據的null判斷示例代碼》相關的同類信息!
  • 本頁收集關于lua讀取redis數據的null判斷示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 崇礼县| 奎屯市| 柘城县| 和平县| 长阳| 北碚区| 深水埗区| 西吉县| 白水县| 尼玛县| 襄垣县| 绩溪县| 河源市| 黄龙县| 正镶白旗| 呼和浩特市| 江油市| 环江| 望谟县| 新宾| 乌拉特前旗| 宽甸| 称多县| 纳雍县| 襄城县| 卓尼县| 武胜县| 澄迈县| 焉耆| 西宁市| 荆州市| 漳浦县| 崇义县| 宁蒗| 政和县| 清原| 滦平县| 梅河口市| 老河口市| 乌审旗| 沽源县|