Redis 执行Lua脚本

embedded/2024/9/23 6:35:08/

Redis 执行Lua脚本

1. 简介

“Redis Lua是一种在Redis中使用的轻量级、高效的脚本语言,用于实现复杂操作和保证操作的原子性。

优点

  1. 大量减少Redis客户端Redis服务器的RTT时间。
  2. 降低Redis客户端Redis服务器的宽带压力,很多数据不需要传回Redis客户端直接在Redis服务端处理。

缺点

  1. 大量使用Lua脚本可能会增加复杂性。

2. 直接执行

import redisr = redis.Redis(host='localhost', port=6379, db=0)# 准备数据
r.set("num1", 1, ex=3)
r.set("num2", 2, ex=3)lua_script = """  
local key1 = KEYS[1]  
local key2 = KEYS[2]  
local value1 = redis.call('get', key1)  
local value2 = redis.call('get', key2)  
if value1 == false or value2 == false then  return 0  
end  
return tonumber(value1) + tonumber(value2)  
"""
# 执行
result = r.eval(lua_script, 2, 'num1', 'num2')
# 输出结果
print(result)  # 3

3. 提前注册

import redisr = redis.Redis(host='localhost', port=6379, db=0)lua_script = """  
local key1 = KEYS[1]  
local key2 = KEYS[2]  
local value1 = redis.call('get', key1)  
local value2 = redis.call('get', key2)  
if value1 == false or value2 == false then  return 0  
end  
return tonumber(value1) + tonumber(value2)  
"""# 注册脚本
script = r.register_script(lua_script)# 准备数据
r.set("num1", 1, ex=3)
r.set("num2", 2, ex=3)# 执行
result = script(keys=['num1', 'num2'])
print(result)  # 3

优点

  1. 节省每次脚本传输的带宽。
  2. 脚本一但注册会被服务器编译存在起来,省去每次编译的时间。

http://www.ppmy.cn/embedded/92337.html

相关文章

8.1 使用ansible部署mysql_exporter,注入dsn环境变量

本节重点介绍 : ansible 部署二进制 mysqld_exporter通过环境变量传入mysql的连接地址,让 mysqld_exporter采集到 部署 项目地址 项目地址 https://github.com/prometheus/mysqld_exporter 下载地址 wget -O /opt/tgzs/mysqld_exporter-0.12.1.linux-amd64.t…

基于ESP32的掌上网关智能家居控制设备:集成MQTT、后端Node.js、MongoDB、React(代码示例)

一、项目概述 本项目旨在设计并实现一个基于ESP32的掌上网关智能家居控制设备。该设备可以作为智能家居系统的核心控制单元,实现对家庭中各种智能设备的集中管理和控制。用户可以通过手机APP或Web界面远程操控家中的智能灯、空调、窗帘等设备,还可以设置自动化场景和定时任务,…

iOS学习笔记总结版

iOS学习笔记 文章目录 iOS学习笔记Xcode环境配置基础语法.h 声明文件.m 实现文件WKScriptMessageHandler实现js调用原生方法修饰符语法NSString常用操作NSMutableNStringNSDictionaryNSMutableDictionaryNSArrayNSMutableArrayNSUserDefault 全局变量常用方法dispatch_async 功…

2.如何定制 Dcat-admin list 中显示的信息

操作在xxxController.php文件中的 protected function grid() 中进行 定制显示的内容 protected function grid(){return Grid::make(new Robot(), function (Grid $grid) {// ->sortable() 新增一个排序的按钮在列标题中$grid->column(id)->sortable();// 正常字符…

# 基于MongoDB实现商品管理系统(2)

基于MongoDB实现商品管理系统(2) 基于 mongodb 实现商品管理系统之准备工作 1、案例需求 这里使用的不是前端页面,而是控制台来完成的。 具体的需求如下所示: 运行 查询所有 通过id查询详情 添加 - 通过id删除 2、案例分析 程…

[Git][多人协作][下]详细讲解

目录 1.不同分支下多人协作2.远程分⽀删除后,本地git branch -a依然能看到 1.不同分支下多人协作 ⼀般情况下,如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需求或⼀个功能点就要创建⼀个feature分…

科普文:万字细说微服务及其框架Netflix,Spring Cloud,Spring Cloud Alibaba梳理

概叙 微服务(Microservices)是一种软件架构风格,它将单一的应用程序拆分为多个小的服务,每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能,具有自己的数据存储,并且通过轻量级的通信机制…

线性代数课程介绍

一、课程概述 线性代数课程内容丰富,主要围绕向量、矩阵和线性变换等核心概念展开,旨在培养学生的空间直观和想象能力、抽象思维和逻辑推理能力。线性代数是理工科大学生必修的数学基础课之一,也是硕士研究生入学全国统一考试中必考的数学…