package
0.0.0-20241019011701-d1f668bb12ff
Repository: https://github.com/walleframe/wplugins.git
Documentation: pkg.go.dev

# README

#+startup: content #+title: wredis插件文档

  • wredis文档 ** 约定及使用方式 *** 约定
  • 必须在消息级定义 redis.key option才会生成redis代码.
  • 生成redis操作的代码和操作的结构体不在一个包内.应该通过只有一个字段的message进行引用.
  • 同一个消息/key 只能定义一种数据类型,防止误操作.

*** 使用 以下全是消息级option定义. | options | value | desc | |-------------------------+--------------------------------+-----------------------------| | redis.key | string | key 定义 | | redis.keysize | int | key 预估大小,默认64 | | redis.type | string/hash/zset/list/set/lock | | | redis.protobuf | true/false | | | redis.wproto | true/false | | | redis.field/redis.value | key define | 详情见 hash/set/zset类型 | | redis.member | string | redis-zet用来定义member拼接 | | redis.script.* | string | 详情见 redis script |

redis.type 定义的类型互斥. '!' 开头屏蔽redis keys 相关操作生成. 例: redis.key="!string"

*** 环境变量 | 变量 | 默认值 | | |----------------+---------------------------------------------+------------------------------------------| | WREDIS_PB_PKG | | 不为空,生成pb接口. 非空应该设置包路径 | | WREDIS_WPB_PKG | github.com/walleframe/walle/process/message | 不为空生成walle消息解析函数,非空为包路径 | | WREDIS_SVC_PKG | github.com/walleframe/svc_redis | 不能为空,替换管理包 | ** key 定义 默认使用 : 分隔key的每一个部分. 每个部分的字符必须是 a-z A-Z 0-9.

例: userdata:123

*** 时间戳 @time-func[op] 使用 @ 开头,后接获取时间戳函数.可以对时间进行 + / - / % 操作.

支持的函数有: | function | type | func | desc | |------------+--------+-------------------------+----------------------------------------------------| | daystamp | int64 | wtime.DayStamp() | current day 00:00:00 | | weekstamp | int64 | wtime.WeekStamp() | current week first day 00:00:00 | | monthstamp | int64 | wtime.MonthStamp() | current month 1st 00:00:00 | | yearstamp | int64 | wtime.YearStamp() | current year January 1st 00:00:00 | | curday | string | wtime.CurDayString() | current day, format '20060102' | | nextday | string | wtime.NextDayString() | next day, format '20060102' | | curweek | string | wtime.CurWeekString() | current week first day 00:00:00, format '20060102' | | nextweek | string | wtime.NextWeekString() | next week first day 00:00:00, format '20060102' | | curmonth | string | wtime.CurMonthString() | current month 1st,format '200601' | | nextmonth | string | wtime.NextMonthString() | next month 1st,format '200601' | | curyear | string | wTime.CurYearString() | | | nextyear | string | wtime.NextYearString() | |

例: #+begin_example u:login:@daystamp

u:check:@month+3600:xx

xx:@weestamp-1800:xx #+end_example

*** 外部输入 go类型参数 $[arg-name=]go-type[op] 使用 $ 开头,可选的设置参数名称(影响生成代码).可以对数值进行 + / - / % 操作. 支持go基础类型: int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64, bool, string

例: #+begin_example xx:$uint64:xxx

xx:$uid=int64:xxx

xx:$name=string:xx #+end_example

** redis-string redis.type = "string"

*** 空消息体,没有字段.

  • 设置 WREDIS_PB_PKG 环境变量,在消息体级设置选项 redis.protobuf=true 将生成通用pb相关接口
  • 设置 WREDIS_WPB_PKG 环境变量(默认已经设置),在消息体级设置选项 redis.wproto 将生成通用walle message相关接口
  • 默认生成string类型接口

*** 1个字段的结构体

  • 不支持 bool/[]byte 类型
  • 数值类型,浮点类型,string类型,将生成对应类型get/set接口
  • 自定义类型 默认认为结构体是walle message结构体. 通过设置 WREDIS_PB_PKG 环境变量和选项 redis.protobuf=true ,生成代码会认为结构体是protobuf message.

*** 2个及2个以上的字段, 不支持

** redis-hash redis.type = "hash" *** 空消息体,没有字段. 不支持

*** 1个字段的结构体. 仅支持自定义类型. 自定义类型的字段必须都是基础数据类型. 生成hmget,hmset,hset,hget,hincr,hgetall等. *** 2个字段的结构体.

  • 序号1 定义field类型,序号2 定义value类型. 支持scan操作.
  • 序号1 field 类型仅支持基础类型 如果是float,bytes,不会生成返回map结构体接口.
  • 序号2 value 类型支持基础数据类型和自定义结构体类型. **** field或value 的类型是string时,允许使用 redis.field/redis.value 对数据进行拼接.

redis.field/redis.value 消息级option. 值为redis-key定义中的go类型参数.

例: #+begin_example redis.field = "$uid=int64:$sex=int8:$level=uint8" redis.value = "$level=uint8:" #+end_example

只要有拼接数据存在,就不会生成返回map结构的接口. *** +3个字段结构体+ 不支持 +第一个字段结构体, 第二三个字段配置 动态字段类型和动态value类型.+ +NOTE: 不生成hgetall接口+

需要调整hvals,hfields,range等接口实现,有实际需求再弄.

** redis-set *** 空消息体,没有字段.

  • 设置 WREDIS_PB_PKG 环境变量,在消息体级设置选项 redis.protobuf=true 将生成通用pb相关接口
  • 设置 WREDIS_WPB_PKG 环境变量(默认已经设置),在消息体级设置选项 redis.wproto 将生成通用walle message相关接口
  • 默认生成string类型接口

*** 1个字段的结构体

  • 不支持 bool 类型
  • 未生成集合类型相关接口(有需要再加)
  • 自定义类型 默认认为结构体是walle message结构体. 通过设置 WREDIS_PB_PKG 环境变量和选项 redis.protobuf=true ,生成代码会认为结构体是protobuf message.

*** 2个及2个以上的字段, 不支持

** redis-zset

  • member不支持 bool 类型,score 仅支持有符号的数值和float类型.
  • member如果是自定义类型 默认认为结构体是walle message结构体. 通过设置 WREDIS_PB_PKG 环境变量和选项 redis.protobuf=true ,生成代码会认为结构体是protobuf message.
  • member 是string类型时候,支持通过 redis.member 进行拼接. 规则参考 redis.field. *** 空消息体,没有字段. 不支持

*** 1个字段的结构体.

  • filed 1 是member
  • score 默认是 float64 类型

*** 2个字段

  • filed 1 是member
  • field 2 是score. *** 3个及3个以上的字段, 不支持 ** redis脚本 只支持生成对一个key进行操作的redis script相关代码. 同一个key(message)定义,可以添加多个脚本.

定义一个redis script,必须设置3个选项:

  1. redis.script. 开头
  2. .lua 结尾,定义实际lua脚本数据.
  3. .argv 结尾,定义脚本参数. 规则参考 redis.field.
  4. .reply 结尾, 定义脚本返回值. 规则参考 redis.field.

例如定义名为 operate_name 的脚本. #+begin_example redis.script.operate_name.lua = "lua script"; redis.script.operate_name.argv = "$x1=int32:$x2=int8:$string"; redis.script.operate_name.reply = "$count=int32"; #+end_example

脚本参数和脚本返回值必须设置不冲突的名称.

** lock 分布式锁

redis.type = "lock"

** TODO: redis-bitmap 有需求再弄.

** NOTE: redis list/pubsub/stream/zpop 不封装在这个生成里面,之后会封成pipeline接口.

# Packages

No description provided by the author
No description provided by the author