MCPcopy Create free account
hub / github.com/GoSimplicity/LinkMe / releaseLock

Method releaseLock

internal/repository/cache/lotteryDraw.go:314–334  ·  view source on GitHub ↗

releaseLock 释放分布式锁,使用 Lua 脚本确保操作的原子性

(ctx context.Context, lockKey, lockValue string)

Source from the content-addressed store, hash-verified

312
313// releaseLock 释放分布式锁,使用 Lua 脚本确保操作的原子性
314func (c *lotteryDrawCache) releaseLock(ctx context.Context, lockKey, lockValue string) error {
315 // Lua 脚本:如果 key 的值等于 lockValue,则删除 key
316 script := `
317 if redis.call("GET", KEYS[1]) == ARGV[1] then
318 return redis.call("DEL", KEYS[1])
319 else
320 return 0
321 end
322 `
323
324 result, err := c.client.Eval(ctx, script, []string{lockKey}, lockValue).Result()
325 if err != nil {
326 return err
327 }
328
329 if result.(int64) == 0 {
330 return errors.New("未能释放锁,可能锁已过期或被其他人释放")
331 }
332
333 return nil
334}
335
336// generateLotteryDrawKey 生成抽奖活动的缓存键
337func generateLotteryDrawKey(id int) string {

Callers 2

Calls

no outgoing calls

Tested by

no test coverage detected