From 4aa071441bf6e46c6fc72bd7a26ca00cb978cfd8 Mon Sep 17 00:00:00 2001 From: mountain Date: Mon, 22 Apr 2024 18:05:43 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=B8=EC=85=98=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=88=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- session/impl_redis.go | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/session/impl_redis.go b/session/impl_redis.go index 759fdd0..3881492 100644 --- a/session/impl_redis.go +++ b/session/impl_redis.go @@ -42,16 +42,42 @@ func newProviderWithRedis(ctx context.Context, redisUrl string, ttl time.Duratio } func (p *provider_redis) New(input *Authorization) (string, error) { - sk := make_storagekey(input.Account) - _, err := p.redisClient.HSet(p.ctx, string(sk), input.ToStrings()).Result() + newsk := make_storagekey(input.Account) + prefix := input.Account.Hex() + sks, err := p.redisClient.Keys(p.ctx, prefix+"*").Result() + if err != nil { + logger.Println("session provider delete :", sks, err) + return "", err + } + + for _, sk := range sks { + p.redisClient.HSet(p.ctx, sk, "inv", "true") + p.redisClient.Publish(p.ctx, p.deleteChannel, sk).Result() + } + + for { + duplicated := false + for _, sk := range sks { + if sk == string(newsk) { + duplicated = true + break + } + } + if !duplicated { + break + } + newsk = make_storagekey(input.Account) + } + + _, err = p.redisClient.HSet(p.ctx, string(newsk), input.ToStrings()).Result() if err != nil { return "", err } - _, err = p.redisClient.Expire(p.ctx, string(sk), p.ttl).Result() + _, err = p.redisClient.Expire(p.ctx, string(newsk), p.ttl).Result() if err != nil { return "", err } - pk := storagekey_to_publickey(sk) + pk := storagekey_to_publickey(newsk) return string(pk), err }