相关依赖

  • 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的更多相关文章

  1. 阿里云部署安装redis无法访问

    ps:我在linux上安装redis后发现一直端口不通连接不上,折腾一晚上.后来在阿里云官方回复(机器人)中看到下面的回复:       2019/02/28 22:50 自己一试,过完是端口监听是本 ...

  2. Docker上安装Redis

    Docker可以很方便的进行服务部署和管理,下面我们通过docker来搭建Redis的单机模式.Redis主从复制.Redis哨兵模式.Redis-Cluster模式 一.在Docker上安装单机版R ...

  3. 从阿里云迁移分布式redis实例到华为云解决方案(详细)

    如果要换多数是经济因素啦- 一. 准备工作 先在华为云上买一台redis数据库,配置一定要注意多数要保持一致,至于4.0还是5.0倒问题不大亲测兼容 可用区要找现有ECS云主机中的相同的机器.记下:这 ...

  4. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  5. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  6. 本地计算机 上的 Redis Server 服务启动后停止

    服务器上Redis服务安装正常..却启动不了.. 报错  :   本地计算机 上的 Redis Server 服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止. 最后发现是Redis的配置 ...

  7. 云计算之路-阿里云上:遭遇CDN问题

    7月10日11:14接到一位用户反馈,访问园子时加载不了 common.cnblogs.com/script/jquery.js 这个文件. 由于这个域名用了阿里云CDN,所以我们判断可能是某个CDN ...

  8. centOS上安装redis

    1.安装tcl支持 yum install tcl 2.安装redis我们以最新的2.8.9为例 $ wget http://download.redis.io/releases/redis-2.8. ...

  9. Redis简介以及如何在Windows上安装Redis

    Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...

  10. 远程登录阿里云上的MySQL

    近期对云和server之类的感兴趣,想要将自己的数据什么的保存到远端server.研究了阿里云和百度云.今天算是有点进步吧. 我在阿里云上申请了个免费的云server(ECS),非常可惜仅仅能用5天. ...

随机推荐

  1. day01---操作系统安装环境准备

    虚拟机安装操作系统步骤 1.新建虚拟主机 2.选择自定义 3.稍后安装操作系统 4.操作系统选择linux 5.选择存放位置 6.cpu和核数选择,默认即可 7.内存分配 8.网络选择 9.控制器类型 ...

  2. java基础之StringBuilder---03

    StringBuilder概述 StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的. 如果对字符串进行拼接操作, ...

  3. ChainMap合并字典

    在python中,我们有两个字典需要合并的时候,可以使用字典的update方法 a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4} a.update(b) print( ...

  4. 01-Redis系列之-Redis介绍安装配置

    Redis初识 Redis主要内容 1 redis介绍,特性,安装和配置,典型应用场景 2 单线程架构,5大数据类型操作,通用指令和高级API的使用 3 高级用法(慢查询,管道,shu发布订阅,bit ...

  5. 无法加载 DLL“librdkafka”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

    我这个错误是在引用了封装kafka项目的情况下提示的. 解决方案:在本项目里面安装 RdKafka ,再次运行就好了.

  6. Linux Cheat Sheet

  7. 【Azure 应用服务】部署Azure Web App时,是否可以替换hostingstart.html文件呢?

    问题描述 当成功创建一个Web App时,通过高级工具(Kudu)可以查看 Web App的根目录(wwwroot)中有一个默认的文件(hostingstart.html).它就是应用服务的默认页面. ...

  8. Java 多态 解释+案例

    1 package com.bytezreo.duotai; 2 /** 3 * 4 * @Description 面向对象的特征三 ------多态性 5 * @author Bytezero·zh ...

  9. Zabbix技术分享——snmp异常排查指南

    大家好,我是乐乐.在IT运维中,难免会碰上设备snmp不通的情况,那么,当问题出现的时候,运维工程师该如何快速找到问题所在呢?下面让我们一起来看看吧!   1.IP配置检查 首先检查zabbix监控上 ...

  10. 浅谈Zabbix与Prometheus区别

    Zabbix和Prometheus都是非常流行的监控系统.它们有许多相似之处,但也有一些不同之处.以下是Zabbix和Prometheus监控对比的一些关键点: 1.数据模型和查询语言 Prometh ...