go~在阿里mse上使用redis.call

这篇具有很好参考价值的文章主要介绍了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方法文章来源地址https://www.toymoban.com/news/detail-844160.html

  • 方法原型
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的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言github.com/gorilla/websocket框架websocket协议通信实战

          websocket是实际开发中比较常用的应用层协议,本文利用github.com/gorilla/websocket框架进行websocket通信实战。 目录 1.下载github.com/gorilla/websocket 2.websocket服务端 3.websocket Go客户端 4.websocket 网页客户端 5.运行结果展示 go get github.com/gorilla/websocket 服务器:  Go语言客户端:  We

    2024年02月16日
    浏览(33)
  • 解决go install github.com/mattn/goreman@latest安装报错

    报错: 解决方法如下: 执行成功如下

    2024年02月12日
    浏览(37)
  • Go:如何在GoLand中引用github.com中的第三方包

      本篇博客主要介绍如何在GoLand中引入github.com中的第三方包。具体步骤如下: 正文 (1) 先在GoLand中打开go的工作区目录(即环境变量$GOPATH设置的变量)。如图: 关于工作区目录中的三个子目录: bin: 保存已编译的二进制可执行程序; pkg: 保存已编译的二进制包文件; src: 保存

    2024年01月17日
    浏览(31)
  • 解决GO安装gin框架(go get -u github.com/gin-gonic/gin)超时问题

    🍊gin框架github地址:https://github.com/gin-gonic/gin         按照官方文档安装gin,但是尝试了好几次,包括使用国内网络或者使用梯子,都超时失败了,爆了如下超时错误 🍊 解决方法如下 1、先查看go相关的配置 如上显示GOPROXY配置是https://proxy.golang.org,这个地址已经被墙了,

    2024年02月11日
    浏览(45)
  • \vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo

    …goAdminvendorgithub.comgodrororahlp.go:531:19: undefined: VersionInfo 解决办法 降了go版本(go1.18),之前是go1.19 gorm版本不能用最新的,降至(gorm.io/gorm v1.21.16)就可以 修改交插编译参数 go env -w CGO_ENABLED=1 cgo: C compiler “gcc” not found: exec: “gcc”: executable file not found in %PATH% 解决方法:

    2024年02月13日
    浏览(24)
  • 阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

    开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立,目前合资股东分别为大众汽车(中国)投资有限公司、中国第一汽车股份有限公司、一汽-大众汽车有限公司[增资扩股将在取得适当监督(包括反垄断)审批后完成]、万帮数字能源股份有限公司和安徽江淮汽车集团控股有限

    2024年02月11日
    浏览(31)
  • 注册配置、微服务治理、云原生网关三箭齐发,阿里云 MSE 持续升级

    注册中心是日常使用频率很高的微服务组件,通过较低的资源溢价帮助客户缩短微服务的构建周期、提升可用性; 微服务治理实现了 0 门槛就能接入全链路灰度、无损上下线、限流降级、环境隔离、数据库治理等能力,轻松完成开源到稳定生产的跨越; 云原生网关则将网络

    2024年02月02日
    浏览(23)
  • 使用gitclone.com加速github访问

    有时候github访问太慢或者直接访问不了,可以使用gitclone加速,官网URL:https://gitclone.com/ 按照官方描述,有三种方式使用 个人建议直接使用Method 1,比较方便,也就是说比如原本的git clone的指令是 现在可以使用gitclone加速, 实测加速明显,速度飞快

    2024年02月16日
    浏览(31)
  • 使用Go模块进行依赖管理

    摘要:本文将介绍Go语言中的模块(module)概念,以及如何使用Go模块进行依赖管理。我们会探讨模块的基本概念、使用方法、配置和依赖关系管理等方面的内容。 Go语言自2007年发布以来,一直以其简洁、高效和强大的网络编程能力而受到开发者的喜爱。然而,随着项目规模

    2024年02月08日
    浏览(26)
  • 浅谈如何使用 github.com/kardianos/service

    在实际开发过程中,有时候会遇到如何编写Go开机自启服务的需求,在linux中我们可以使用 systemd 来进行托管,windows下可以通过 注册表 来实现,mac下可以通过 launchd 来实现,上面的方式对于开发者来说,并不是什么困难的事情,但是对于使用者而言,是并不希望通过这么复杂

    2024年02月02日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包