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
分类:
python & golang & nodejs
, 云原生
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略
2022-04-06 k8s~云负载转发ingress解析
2012-04-06 你必须要知道的架构知识~第六章 .NET原生态的ORM软件对比