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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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链接