Как реализовать distributed lock на Go?

Senior
188 просмотров
AFK Offer AI

Redis: SET key value NX EX 30 (acquire), Lua скрипт для release (проверь owner, потом DEL). Проблема: если процесс завис дольше TTL — лок протухает. Решение: fencing token (монотонный счётчик). Более надёжно: etcd lease + KeepAlive. В PostgreSQL: advisory locks (pg_advisory_lock). Go: wrapper с context для timeout на acquire.

Следующий вопрос

Что выведет: s := "hello"; b := []byte(s); b[0] = 'H'; fmt.Println(s)?