go~在阿里mse上使用redis.call
相关依赖
- github.com/higress-group/proxy-wasm-go-sdk
- github.com/alibaba/higress/plugins/wasm-go
标准的redis
下面是一个读取redis指定key的方法,使用了higress的wasm-go组件实现的
err := config.Client.SMembers("online", func(response resp.Value) {
for _, item := range response.Array() {
str := item.String()
if strings.HasPrefix(str, "\"") {
str = str[1:]
}
if strings.HasSuffix(str, "\"") {
str = str[:len(str)-1]
}
if str == val {
msg := fmt.Sprintf("your %v (%v) is illegality.", blackType, val)
fmt.Println(msg)
ctx.SetContext("X-Blacklist-Reason", msg)
proxywasm.SendHttpResponse(ERROR_CODE, nil, []byte(msg), -1)
break
}
}
proxywasm.ResumeHttpRequest() // 恢复
})
扩展的Lua方式
在Redis的Lua脚本中,可以使用redis.call来执行Redis命令。如果需要在Lua脚本中设置键的过期时间,可以通过调用EXPIRE命令来实现。
下面是一个示例,演示如何在Lua脚本中使用redis.call执行EXPIRE命令来设置键的过期时间:
local key = KEYS[1]
local ttl = ARGV[1]
redis.call('SET', key, 'value')
redis.call('EXPIRE', key, ttl)
return 'Key set with expiration time'
在上面的示例中,首先通过KEYS[1]获取传入的键名,通过ARGV[1]获取传入的过期时间(以秒为单位)。然后使用redis.call('SET', key, 'value')设置键值对,并使用redis.call('EXPIRE', key, ttl)设置键的过期时间为ttl秒。最后返回一个提示信息。
通过这种方式,你可以在Lua脚本中使用redis.call执行EXPIRE命令来设置键的过期时间。
github.com/alibaba/higress/plugins/wasm-go中的Eval
阿里封装的wasm-go插件,在2024-03-18这一天支持了redis,同时也支持使用redis.call,你可以调用wasm-go中的Eval方法
- 方法原型
Eval(script string, numkeys int, keys, args []interface{}, callback RedisResponseCallback) error
- 开发人员调用它
redisKey := "business:username"
redisKey2 := "business:session_state"
var keyArr []interface{}
keyArr = append(keyArr, redisKey, redisKey2)
var valueArr []interface{}
valueArr = append(valueArr, logger.Username, logger.Username+"_"+logger.SessionState, 60*60*24*30)
err2 := config.Client.Eval("redis.call('ZINCRBY', KEYS[1], 1, ARGV[1]) redis.call('ZINCRBY', KEYS[2], 1, ARGV[2]) redis.call('EXPIRE', KEYS[1], ARGV[3]) redis.call('EXPIRE', KEYS[2], ARGV[3]) return 1", 2, keyArr, valueArr, func(response resp.Value) {
if response.Integer() == 1 {
proxywasm.ResumeHttpRequest()
}
})
if err2 != nil {
return types.ActionContinue
}
return types.ActionPause
go~在阿里mse上使用redis.call的更多相关文章
- 阿里云部署安装redis无法访问
ps:我在linux上安装redis后发现一直端口不通连接不上,折腾一晚上.后来在阿里云官方回复(机器人)中看到下面的回复: 2019/02/28 22:50 自己一试,过完是端口监听是本 ...
- Docker上安装Redis
Docker可以很方便的进行服务部署和管理,下面我们通过docker来搭建Redis的单机模式.Redis主从复制.Redis哨兵模式.Redis-Cluster模式 一.在Docker上安装单机版R ...
- 从阿里云迁移分布式redis实例到华为云解决方案(详细)
如果要换多数是经济因素啦- 一. 准备工作 先在华为云上买一台redis数据库,配置一定要注意多数要保持一致,至于4.0还是5.0倒问题不大亲测兼容 可用区要找现有ECS云主机中的相同的机器.记下:这 ...
- 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析
在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...
- 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题
今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...
- 本地计算机 上的 Redis Server 服务启动后停止
服务器上Redis服务安装正常..却启动不了.. 报错 : 本地计算机 上的 Redis Server 服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止. 最后发现是Redis的配置 ...
- 云计算之路-阿里云上:遭遇CDN问题
7月10日11:14接到一位用户反馈,访问园子时加载不了 common.cnblogs.com/script/jquery.js 这个文件. 由于这个域名用了阿里云CDN,所以我们判断可能是某个CDN ...
- centOS上安装redis
1.安装tcl支持 yum install tcl 2.安装redis我们以最新的2.8.9为例 $ wget http://download.redis.io/releases/redis-2.8. ...
- Redis简介以及如何在Windows上安装Redis
Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...
- 远程登录阿里云上的MySQL
近期对云和server之类的感兴趣,想要将自己的数据什么的保存到远端server.研究了阿里云和百度云.今天算是有点进步吧. 我在阿里云上申请了个免费的云server(ECS),非常可惜仅仅能用5天. ...
随机推荐
- 常见Python问题及解决办法
文件编码问题 如果Python文件中存在中文注释,在运行时报错"SyntaxError: Non-ASCII character '\xe7' in file". 解决办法: 在文 ...
- 硬件开发笔记(七): 硬件开发基本流程,制作一个USB转RS232的模块(六):创建0603封装并关联原理图元器件
前言 有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了贴片电阻电容0603芯片封装,创建 ...
- KVM整理
管理命令: virsh list --all 查看所有虚拟机状态 virsh start vm1 VM1开机 virsh shutdown vm1 VM1关机 virsh destroy vm1 强制 ...
- 【小程序分包】小程序包大于2M,来这教你分包啊
前言 缘由 该大的不大,小程序包超出2M,无法上传发布 前段时间项目迭代时,因版本大升级,导致uniapp打包后小程序后,包体积大于2M.虽然将图片等静态资源压缩,体积大的资源放置cdn,在不懈的努力 ...
- Java abstract 关键字使用
1 package com.bytezreo.abstractTest; 2 3 /** 4 * 5 * @Description Abstract 关键字使用 6 * @author Bytezer ...
- 10、zookeeper客户端curator
curator介绍 https://blog.csdn.net/wo541075754/article/details/68067872 关于第三方客户端的小介绍 zkClient有对dubbo的一些 ...
- C#串口开发之SerialPort类封装
目录 SerialPort类 参数封装 控件操作封装 SerialPortClient类实现 SerialPortClient类使用 测试Demo 参考文章 SerialPort类 微软在.NET中对 ...
- CMake的作用和价值--概念简介
一 简介: CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似 ...
- 使用Java给图片添加水印
什么是水印呢?比如使用手机拍摄一张照片的时候,照片右下角的位置显示得有日期和时间信息,那就表示一个水印. 项目开发中给图片添加水印的操作很常见,比如给图片添加日期和时间,给图片添加公司的logo之类的 ...
- 记录--ECharts — 饼图相关功能点(内环、外环、环形间隔、环形文字、轮播动画)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 记录一下在公司遇到的一些功能,以及相关实现 以上的内容我花了一周时间去实现的,自己也觉得时间很长,但主要因为很少使用ECharts,导致使 ...