Redis中的Lua使用

Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大,所以许多应用都选用它作为脚本语言,尤其是在游戏领域,暴雪公司的“魔兽世界”,“愤怒的小鸟”,Nginx将Lua语言作为扩展。Redis将Lua作为脚本语言可帮助开发者定制自己的Redis命令。
Redis 2.6 版本通过内嵌支持 Lua 环境。也就是说一般的运用,是不需要单独安装Lua的。

一.为什么使用Lua

1、减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行;

2、原子操作,Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件;

3、复用性,客户端发送的脚本会存储在Redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑

二.怎么使用

eval script numkeys key[key...]arg[arg...]

1、script 参数:
是一段 Lua 脚本程序,它会被运行在Redis 服务器上下文中,这段脚本不必(也不应该)定义为一个 Lua 函数。

2、numkeys 参数:
用于指定键名参数的个数。

3、key [key…] 参数:
从 eval 的第三个参数开始算起,使用了 numkeys 个键(key),表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用1为基址的形式访问(KEYS[1],KEYS[2]···)。

4、arg [arg…]参数:
可以在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似(ARGV[1],ARGV[2]···)。

eval"return redis.call('mset',KEYS[1],ARGV[1],KEYS[2],ARGV[2])"2goudan wangcai111222

三. Redis与限流

1、使用Redis+Lua语言实现限流

2、限流算法


3-2-1 固定窗口算法

简单粗暴,但是有临界问题

3-2-2、滑动窗口算法
算法演示

不会出现边界问题,但是主要缺陷是内存占用较高,因为需要存储每个请求的时间戳,当限流阈值大或请求频繁时,zset会积累大量元素。另外,ZREMRANGEBYSCORE和ZCARD操作的时间复杂度是O(logN),高并发下可能对Redis性能有一定影响。

3-2-3、漏洞算法

漏桶核心是:请求来了以后,直接进桶,然后桶根据自己的漏洞大小慢慢往外面漏。但是处理突发情况下处理差

3-2-4、令牌算法

突发情况下可以一次拿多个令牌进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能车辆检索系统解析

智能车辆检索系统解析 卡口车辆智能检索系统,基于海量卡口图像和视频数据,通过视频识别分析、模式匹配及快速搜索等智能图像处理技术,完成车辆、车型、车身颜色、车辆特征、相似车辆搜索等业务功能,扩展基于治安卡口数据的应用。视…

人脸比对技术助力破案

人脸比对技术助力破案 通过人脸识别和大数据技术,在大数据平台上建立人脸库(失踪人脸库、重点人口库、追逃人员库、在逃人员库、暂住人口库等)进行实时的人脸搜索比对,支持照片比照片、视频流比照片,对案件相关人员进行…

深入解析:GIT 实战命令操作大全,代码变动,推动,修改备注,撤销(篇幅一)

深入解析:GIT 实战命令操作大全,代码变动,推动,修改备注,撤销(篇幅一)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

@PropertySource@ImportResource@Bean

一、核心定义与基础用法1. Value 注解Value 是 Spring 中用于零散地、直接地注入单个配置值的注解,支持 SpEL 表达式(Spring 表达式语言),通常作用在字段、方法参数或构造器参数上。java运行Component public class ValueDemo {//…

SpringBoot中多配置文件和外部配置文件加载顺序

一、项目基础信息1. 项目结构基于 Maven 构建的 Spring Boot 项目&#xff0c;核心依赖包含 web、validation、devtools 等&#xff1a;JDK 版本&#xff1a;17Spring Boot 版本&#xff1a;3.2.02. 核心 POM 配置xml<project xmlns"http://maven.apache.org/POM/4.0.0…

Spring Boot 配置文件核心用法与加载优先级

一、多配置文件的核心用法Spring Boot 采用「主配置文件 环境专属配置文件」的模式管理多环境配置&#xff0c;核心规则如下&#xff1a;1. 配置文件命名规范Spring Boot 默认识别 .properties / .yml/.yaml 两种格式&#xff0c;命名需遵循以下规则&#xff1a;配置文件类型命…

Week 34: 量子深度学习入门:从 Neural ODE 到哈密顿量子演化

文章目录 Week 34: 量子深度学习入门&#xff1a;从 Neural ODE 到哈密顿量子演化摘要Abstract1. ResNet的连续极限1.1 从离散层到连续流1.2 伴随敏感度法 2. 非均匀时序建模2.1 场景2.2 ODE-RNN 3. 跨越边界&#xff1a;哈密顿量与量子可能性3.1 物理守恒与哈密顿网络 (HNN)3.…

什么是“同余数问题(千年数学难题)”?

“同余数问题”&#xff08;Congruent Number Problem&#xff09;是数论中一个历史悠久、表述简单但深刻且尚未完全解决的著名问题。尽管它不是克雷数学研究所&#xff08;Clay Mathematics Institute&#xff09;官方列出的七个“千禧年大奖难题”之一&#xff0c;但由于其与…

Vue3+Node.js实现文件上传并发控制与安全防线 进阶篇

上一篇我们实现了最基础的 FormData 上传&#xff0c;体会了前后端的基础联调。但如果在面试中被问到&#xff1a;“如果用户上传了一个 10GB 的文件怎么办&#xff1f;”或者“用户同时选了 100 张图片&#xff0c;浏览器卡死怎么办&#xff1f;”这就需要用到进度监听、双端校…

大厂迷思:为什么顶级工程师会产出难以维护的代码

当你终于通过几轮严苛的技术面试&#xff0c;加入一家享有盛誉的大型科技公司时&#xff0c;往往会对即将接触的代码库抱有极高的期待。你想象着整洁的架构、清晰的文档以及如教科书般完美的逻辑实现。然而现实往往极具冲击力&#xff1a;你所看到的可能是一个由无数补丁堆叠、…

menset的使用方法

menset的使用方法#include <cstring> // 必须包含这个头文件&#xff01; memset(目标内存地址, 填充值, 填充的字节数);填充值只能是「单字节值」memset是按字节填充&#xff0c;所以&#xff1a;✅ 填充0&#xff1a;完全没问题&#xff08;所有类型数组清空都能用&am…

“AUTOSAR?我连CAN都看不懂…” 一个汽车电子工程师的坦白与指南

我刚入职现时&#xff0c;导师指着电脑上复杂的网络拓扑图说&#xff1a;“这个ECU的AUTOSAR架构需要优化。” 我表面点头&#xff0c;手心却在冒汗——获取车软嵌入式&#xff0c;欢迎可&#xff1a;AutoButo。那些分层框图像天书&#xff0c;MCAL、BSW、RTE这些缩写&#xff…

大数据领域数据中台的安全审计与合规

大数据领域数据中台的安全审计与合规 关键词:大数据、数据中台、安全审计、合规、数据安全 摘要:本文聚焦于大数据领域数据中台的安全审计与合规问题。随着大数据技术的迅猛发展,数据中台成为企业整合和管理数据的重要平台。然而,其安全与合规性面临诸多挑战。文章首先介绍…

数据结构01——时间复杂度和空间复杂度

一.什么是数据结构数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据集合。不存在一种通用的数据结构针对于所有应用场景&#xff0c;所以产生了多种多样的数据结构来适配不同的环境&#xff1a;例如顺序表、链表、堆栈…

Java中strip与trim()的区别

TOC Java中strip与trim()的区别 jdk11及以上版本&#xff0c;java的String支持strip()方法&#xff0c;那么原来的删除空白trim()与strip()的区别时什么&#xff1f; 区别 trim()&#xff1a;仅处理字符串首尾的ASCII空白字符串&#xff08;小于等于\u0020字符&#xff0c;…

Python入门——字符串

Python快速入门&#xff08;1&#xff09;——字符串字符串索引访问常用倒序访问截取/切片常用方法长度判空大小写删除空白分割最近需要使用到python&#xff0c;本系列适合有其他编程语言&#xff08;C/C/Java&#xff09;基础的同学&#xff0c;帮助大家一起快速上手Python&a…

多级缓存必要性

Java多级缓存设计&#xff1a;应对微博明星官宣的高并发场景 一、多级缓存原理与必要性 1.1 为什么需要多级缓存&#xff1f; 单级缓存的问题&#xff1a; 性能瓶颈&#xff1a;所有请求都打到同一缓存层&#xff0c;压力集中容错性差&#xff1a;缓存层故障直接影响整体可…

OpenHarmony Flutter 分布式安全防护:跨设备身份认证与数据加密传输方案 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

tp3.2性能暂时优化调整

// 1. 禁用TP3.2的冗余组件(在入口文件index.php最顶部添加)define(APP_DEBUG, false); // 关闭调试模式(必须)define(BIND_MODULE,Api); // 绑定模块,减少模块扫描define(THINK_PATH, __DIR__./ThinkPHP/);// 禁…

百万数据报表操作 - 努力-

百万数据报表操作百万数据报表操作,Excel报表一、百万数据报表概述 1.1 百万数据报表概述 我们都知道Excel可以分为早期的Excel2003版本(使用POI的HSSF对象操作)和Excel2007版本(使用POI的XSSF操作),两者对百万数…