相关依赖
- 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
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |