| 39 | } |
| 40 | |
| 41 | func NewInteractiveCache(client redis.Cmdable) InteractiveCache { |
| 42 | locker := redislock.New(client) |
| 43 | |
| 44 | // 将 Lua 脚本加载到 Redis 中,并保存其 SHA1 值以便后续调用 |
| 45 | incrByScript := redis.NewScript(` |
| 46 | local key = KEYS[1] |
| 47 | local field = ARGV[1] |
| 48 | local increment = tonumber(ARGV[2]) |
| 49 | local value = redis.call("HINCRBY", key, field, increment) |
| 50 | return value |
| 51 | `) |
| 52 | |
| 53 | return &interactiveCache{ |
| 54 | client: client, |
| 55 | locker: locker, |
| 56 | incrByScript: incrByScript, |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | // Get 获取互动信息 |
| 61 | func (i *interactiveCache) Get(ctx context.Context, postId uint) (domain.Interactive, error) { |