Senior
Чӣ гуна хоҳад буд нақшаи навсозишудаи Redis бо timeout-worker барои бозиҳо бо маҳдудияти вақт?
sobes.tech AI
Ҷавоб аз AI
Барои бозӣҳои бо маҳдудияти вақт дар Redis, мумкин аст схемае бо калидҳое, ки худ ба худ тамом мешаванд (TTL), ва як коргардон (worker) ки тамомшавиро назорат мекунад ва тайм-аутиҳоро идора мекунад, истифода бурд.
Схемаи навшуда метавонад чунин бошад:
- Барои ҳар як сессияи бозӣ калид бо ID-и беназири сохта мешавад ва TTL, ки баробар ба вақти маҳдудият аст, муқаррар карда мешавад.
- Коргардон ба ҳодисаҳои тамомшавии калидҳо обуна мешавад (бо истифода аз Redis Keyspace Notifications).
- Вақте ки калид тамом мешавад, коргардон огоҳӣ мегирад ва логикаи анҷоми бозиро иҷро мекунад (масалан, ғолибро муайян кардан, статистикаро нав кардан).
Масалан, барои танзим кардани калид бо TTL дар Go:
err := redisClient.Set(ctx, "game:session:12345", "active", time.Minute*5).Err()
if err != nil {
// идоракунии хато
}
Коргардон ҳодисаҳои тамомшавиро гӯш мекунад:
pubsub := redisClient.PSubscribe(ctx, "__keyevent@0__:expired")
for msg := range pubsub.Channel() {
if strings.HasPrefix(msg.Payload, "game:session:") {
sessionID := strings.TrimPrefix(msg.Payload, "game:session:")
// идоракунии тайм-аути сессия sessionID
}
}
Ин усул имкон медиҳад, ки вақти бозӣ самаранок идора карда шавад ва ба тайм-аутиҳо бидуни пайваста пурсиш ҷавоб додан, вокуниш нишон диҳад.