@ -3,6 +3,7 @@ package session
import (
"context"
"encoding/json"
"errors"
"fmt"
"log"
"time"
@ -51,16 +52,16 @@ func (rs *RedisStore) sessionKeys(sids []string) []string {
func ( rs * RedisStore ) Get ( id string ) ( * Session , error ) {
ctx := context . Background ( )
data , err := rs . client . Get ( ctx , keyPrefix + id ) . Bytes ( )
if err == redis . Nil {
if errors . Is ( err , redis . Nil ) {
return nil , nil
}
if err != nil {
return nil , fmt . Errorf ( "R edis GET session: %w" , err )
return nil , fmt . Errorf ( "r edis GET session: %w" , err )
}
var s Session
if err := json . Unmarshal ( data , & s ) ; err != nil {
return nil , fmt . Errorf ( "R edis 反序列化 session: %w" , err )
return nil , fmt . Errorf ( "r edis 反序列化 session: %w" , err )
}
return & s , nil
}
@ -71,7 +72,7 @@ func (rs *RedisStore) Set(s *Session) error {
data , err := json . Marshal ( s )
if err != nil {
return fmt . Errorf ( "R edis 序列化 session: %w" , err )
return fmt . Errorf ( "r edis 序列化 session: %w" , err )
}
ttl := rs . idleTimeout
@ -91,7 +92,7 @@ func (rs *RedisStore) Set(s *Session) error {
_ , err = pipe . Exec ( ctx )
if err != nil {
return fmt . Errorf ( "R edis SET session: %w" , err )
return fmt . Errorf ( "r edis SET session: %w" , err )
}
return nil
}
@ -102,11 +103,11 @@ func (rs *RedisStore) Delete(id string) error {
// 先读取 session 获取 UserID, 再从集合中移除
data , err := rs . client . Get ( ctx , keyPrefix + id ) . Bytes ( )
if err == redis . Nil {
if errors . Is ( err , redis . Nil ) {
return nil
}
if err != nil {
return fmt . Errorf ( "R edis GET session for delete: %w" , err )
return fmt . Errorf ( "r edis GET session for delete: %w" , err )
}
var s Session
@ -126,7 +127,7 @@ func (rs *RedisStore) DeleteByUID(uid uint) error {
sids , err := rs . client . SMembers ( ctx , uidKey ) . Result ( )
if err != nil {
return fmt . Errorf ( "R edis SMEMBERS user_sessions: %w" , err )
return fmt . Errorf ( "r edis SMEMBERS user_sessions: %w" , err )
}
if len ( sids ) == 0 {
@ -138,7 +139,7 @@ func (rs *RedisStore) DeleteByUID(uid uint) error {
pipe . Del ( ctx , uidKey )
_ , err = pipe . Exec ( ctx )
if err != nil {
return fmt . Errorf ( "R edis DeleteByUID: %w" , err )
return fmt . Errorf ( "r edis DeleteByUID: %w" , err )
}
log . Printf ( "[RedisStore] DeleteByUID uid=%d count=%d" , uid , len ( sids ) )
@ -152,7 +153,7 @@ func (rs *RedisStore) DeleteByUIDExclude(uid uint, excludeSID string) error {
sids , err := rs . client . SMembers ( ctx , uidKey ) . Result ( )
if err != nil {
return fmt . Errorf ( "R edis SMEMBERS user_sessions: %w" , err )
return fmt . Errorf ( "r edis SMEMBERS user_sessions: %w" , err )
}
var toDelete [ ] string
@ -176,7 +177,7 @@ func (rs *RedisStore) DeleteByUIDExclude(uid uint, excludeSID string) error {
}
_ , err = pipe . Exec ( ctx )
if err != nil {
return fmt . Errorf ( "R edis DeleteByUIDExclude: %w" , err )
return fmt . Errorf ( "r edis DeleteByUIDExclude: %w" , err )
}
log . Printf ( "[RedisStore] DeleteByUIDExclude uid=%d removed=%d kept=%d" , uid , len ( toDelete ) , kept )
@ -190,7 +191,7 @@ func (rs *RedisStore) ListByUID(uid uint) ([]*Session, error) {
sids , err := rs . client . SMembers ( ctx , uidKey ) . Result ( )
if err != nil {
return nil , fmt . Errorf ( "R edis SMEMBERS user_sessions: %w" , err )
return nil , fmt . Errorf ( "r edis SMEMBERS user_sessions: %w" , err )
}
if len ( sids ) == 0 {
@ -199,7 +200,7 @@ func (rs *RedisStore) ListByUID(uid uint) ([]*Session, error) {
results , err := rs . client . MGet ( ctx , rs . sessionKeys ( sids ) ... ) . Result ( )
if err != nil {
return nil , fmt . Errorf ( "R edis MGET sessions: %w" , err )
return nil , fmt . Errorf ( "r edis MGET sessions: %w" , err )
}
var sessions [ ] * Session