lua入門以及在Redis中的應用

1.基本語法
1.1變量

lua的變量有:無效值nil,布爾值boolean,數字number、字符串string、函數function、自定義類型userdata、線程thread、表table(key-value結構)

1.2循環

數值循環

for i=起始值, 結束值 ,間隔值 do

---options

end

間隔值為1時可以省略。像python里面的range()函數

迭代循環

for k,v in pairs(tb) do

print(k,v)

end

while循環

while(condition)

do

---options

ee

repeat -until

repeat-- statements
until( condition )
1.3條件語句
if(con1) then
-----option--
elseif(con2) then
----option
elseif(con3) then
---option
end
1.4函數的定義
function a(num)print("hello"..num)  //字符串拼接用的 .. 而不是+,1+‘1’=2.0
enda=function()print('a')
end

函數定義默認都全局的,即使是嵌套在其它函數里面,如果想定義局部的函數,需要使用local關鍵字修飾。

2.lua腳本在redis中的使用

查看redis當前有哪些key沒有設置過期時間,內存滿的時候可以進行排查

-- 獲取所有key的模式(默認為*)
local pattern = ARGV[1] or '*'
local result = {keys = {}, stats = {total = 0, neverexpire = 0}}
local start_time = redis.call('TIME')[1]-- 使用SCAN迭代
local cursor = '0'
repeatlocal reply = redis.call('SCAN', cursor, 'MATCH', pattern)cursor = reply[1]local keys = reply[2]-- 檢查每個keyfor _, key in ipairs(keys) doresult.stats.total = result.stats.total + 1local ttl = redis.call('TTL', key)if ttl == -1 thentable.insert(result.keys, key)result.stats.neverexpire = result.stats.neverexpire + 1endend
until cursor == '0'-- 計算執行時間
local end_time = redis.call('TIME')[1]
result.stats.duration = end_time - start_time-- 返回結果
if #result.keys == 0 thenreturn "沒有永不過期的key (共掃描: "..result.stats.total.." 個key, 耗時: "..result.stats.duration.."秒)"
elseresult.msg = "找到 "..result.stats.neverexpire.." 個永不過期的key (共掃描: "..result.stats.total.." 個key, 耗時: "..result.stats.duration.."秒)"return result
end--------------------------------
以上內容由AI生成,僅供參考和借鑒

lua腳本實現分布式鎖

-- 獲取鎖
-- KEYS[1]: 鎖的key
-- ARGV[1]: 鎖的值(通常是客戶端唯一標識)
-- ARGV[2]: 過期時間(秒)
local key = KEYS[1]
local value = ARGV[1]
local ttl = tonumber(ARGV[2])-- 嘗試設置鎖(NX表示key不存在時才設置,EX表示設置過期時間)
local lockSet = redis.call('SET', key, value, 'NX', 'EX', ttl)if lockSet thenreturn true
else-- 檢查鎖是否是自己持有的(防止誤刪其他客戶端的鎖)local currentValue = redis.call('GET', key)if currentValue == value then-- 延長鎖的過期時間redis.call('EXPIRE', key, ttl)return trueelsereturn falseend
end

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93716.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淘寶電商大數據采集【采集內容||采集方法|工具||合規性||應用】

淘寶電商大數據采集是指通過技術手段、工具或平臺,系統性收集淘寶(及旗下天貓等)生態內的各類數據,用于分析市場趨勢、用戶行為、商品表現、競品動態等,為電商運營、決策提供數據支持。以下從采集內容、工具方法、合規…

ROS2核心模塊

1.創建工作空間先創建工作空間ws01_plumbing,終端下進入工作空間的src目錄,執行如下命令:ros2 pkg create --build-type ament_cmake base_interfaces_demo2.話題通信話題通信是ROS中使用頻率最高的一種通信模式,話題通信是基于發…

Mac 上安裝并使用 frpc(FRP 內網穿透客戶端)指南

一、先裝好 Homebrew(macOS 的包管理器)打開終端(Terminal),先裝命令行開發工具 xcode-select --install彈窗點“安裝”,等待 3~5 分鐘。一鍵安裝 Homebrew /bin/bash -c "$(curl -fsSL https://raw.g…

04_接口與包管理

第4課:接口與包管理 課程目標 深入理解Go語言接口的概念和用法 掌握接口的組合和空接口 學會使用Go Modules進行包管理 理解包的導入和導出規則 1. 接口基礎 1.1 接口定義 // 基本接口定義 type Shape interface {Area() float64Perimeter()

福昕PDF編輯軟件高級版下載與詳細圖文安裝教程!!

軟件下載 【軟件名稱】: 福昕PDF編輯器高級版 【軟件大小】:668.9MBa a【系統要求】:awin10/win11或更高 福昕,軟件下載(夸克網盤需手機打開)::福昕丨夸克網盤-資源免費下載 軟件介…

利用無事務方式插入數據庫解決并發插入問題(最小主鍵id思路)

一、背景 由于某業務需要回退某產品數據緩存列表Asset資源,主任務執行后,通過并行執行批量子任務進行數據回退,子任務中會記錄緩存列表Asset和緩存列表行AssetLine數據,并行執行過程會出現緩存列表行AssetLine重復插入問題&#…

如何制作免費的比特幣冷錢包

本文主要從技術上討論冷錢包的操作機制和原理,并不作為投資建議。對于國外的比特幣玩家,或者打算長期囤幣來對抗通貨膨脹的,或者是想短期持有的,那么將比特幣存儲在哪里是一個Common的問題。一般是兩類選擇。第一種選擇是存儲在交…

新手向:Python制作簡易音樂播放器

使用Python構建簡易音樂播放器音樂播放器是現代數字生活中不可或缺的工具,從智能手機到電腦系統,幾乎每個設備都內置了音樂播放功能。對于Python初學者來說,開發一個簡易的音樂播放器是一個很好的實踐項目,既能學習編程基礎&#…

【StarRocks】TabletChecker邏輯

TabletChecker是StarRocks FE里的一個組件,它的主要工作是檢查出所有的處于不健康狀態的tablets。 注意,它的職責就是check(檢查)。 至于tablet修復、均衡等調度工作不是TabletChecker的職責。 相關配置項 // 20秒執行一次check,代碼里是執行runAfterCatalogReady()publi…

低空經濟展 | 優翼仿真攜eVTOL全動飛行模擬器亮相2025深圳eVTOL展

2025深圳eVTOL展將于2025年9月23-25日在深圳坪山燕子湖國際會展中心舉行。展會以“低空經濟?eVTOL?航空應急救援?商載大型無人運輸機”為主題,以 “2天大會3天展覽項目考察飛行表演頒獎盛典項目路演”的多元模式,打造覆蓋 eVTOL全產業鏈的專業化合作平…

AI驅動商業革新:開源大模型與零售精準營銷引領產業升級

在當今數字化浪潮中,AI 正以迅猛之勢滲透至商業的每一處脈絡,掀起一場影響深遠的變革風暴,從根本上改寫著商業運轉的底層邏輯,創造出無數嶄新的商業契機。基礎模型領域,新的突破正在重塑行業格局。Meta 旗下的 LLaMA 3…

【表的操作】

文章目錄 一、查看所有表 1、語法 二、創建表 1、語法 2、?例 3、表在磁盤上對應的?件 4、創建數據加時使?校驗語句[if not exists] 三、查看表結構 1、語法 2、?例 四、修改表 1、語法 2、?例 (1)向表中添加?列 (2)修改某列的?度 (3)重命名某列 (4)刪除某個字段…

【Java后端】Spring Boot 全局異常處理最佳實踐

Spring Boot 全局異常處理最佳實踐 在日常開發中,異常處理幾乎是繞不過去的一個話題。尤其在 后端 API 項目 中,如果沒有統一的異常處理機制,很容易出現以下問題: Controller 層代碼里充斥著 try-catch,顯得冗余。前端…

K8S-Configmap資源

目錄 一、核心概念? ?定義? ?核心價值? ?與Secret的區別? ?二、核心特性? ?數據存儲? ?生命周期? ?作用域? 什么是 Configmap? Configmap 能解決哪些問題? ConfigMap 的主要作用 三、命令行直接創建 四、通過文件創建&#xf…

MySQL InnoDB事務acid特性的原理和隔離級別的實現原理

InnoDB存儲引擎 InnoDB存儲結構表空間 則每張表都會有一個表空間(xxx.ibd),一個mysql實例可以對應多個表空間 系統表空間 存儲數據字典(表結構定義、索引信息等)、Change Buffer、Doublewrite Bufferundo log&#xff…

Linux系統之部署nullboard任務管理工具

Linux系統之部署nullboard任務管理工具一、nullboard介紹1.1 nullboard簡介1.2 任務看板工具介紹1.3 nullboard使用場景二、本次實踐介紹2.1 本地環境規劃2.2 本次實踐介紹三、安裝httpd軟件3.1 檢查yum倉庫3.2 安裝httpd軟件3.3 啟動httpd服務3.4 查看httpd服務狀態3.5 防火墻…

Qt設置軟件使用期限【新版防修改系統時間】

在工業軟件或其他領域中,經常會對軟件進行授權,軟件需要付費進行有期限的使用。以下是我用Qt設計的設置軟件使用期限的兩種方案。 主體思想: 1.軟件需要綁定機器,讓用戶無法通過復制在另一臺機器上運行。 2.由廠家提供激活碼供用戶…

【JavaEE】多線程(線程安全問題)

有些代碼在單個線程環境下執行正確,如果同樣的代碼在多個線程下同時執行可能就會出現問題,這個就是線程安全問題(或者稱線程不安全問題),簡而言之就是:線程安全問題是由于多線程出現的問題,原因…

NodeJs 桌面開發學習 electron.js (一)

今天開始學習NodeJs 關于 桌面應用的內容,長期目標是 React electron 實現一個桌面應用。今天先實現一個簡單的目標,搭建一個Electron ts 項目架構,并實現主業務線程 和前端渲染線程的交互一、代碼結構和配置例子項目結構大致如下&#xff…

diffusion model(1.4) 相關論文閱讀清單

以下是閱讀清單: 《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》擴散模型,arxiv鏈接《Denoising Diffusion Probabilistic Models》DDPM論文 arxiv鏈接