Documentation ¶
Overview ¶
gsession 包实现了会话的管理与存储功能。 md5:743dbbcf3d74735d
Index ¶
- Constants
- Variables
- func NewSessionId() string
- type Manager
- type Session
- func (s *Session) Close() error
- func (s *Session) Contains(key string) (ok bool, err error)
- func (s *Session) Data() (sessionData map[string]interface{}, err error)
- func (s *Session) Get(key string, def ...interface{}) (value *gvar.Var, err error)
- func (s *Session) Id() (id string, err error)
- func (s *Session) IsDirty() bool
- func (s *Session) MustContains(key string) bool
- func (s *Session) MustData() map[string]interface{}
- func (s *Session) MustGet(key string, def ...interface{}) *gvar.Var
- func (s *Session) MustId() string
- func (s *Session) MustRemove(keys ...string)
- func (s *Session) MustSet(key string, value interface{})
- func (s *Session) MustSetMap(data map[string]interface{})
- func (s *Session) MustSize() int
- func (s *Session) Remove(keys ...string) (err error)
- func (s *Session) RemoveAll() (err error)
- func (s *Session) SetId(id string) error
- func (s *Session) SetIdFunc(f func(ttl time.Duration) string) error
- func (s *Session) SetMap(data map[string]interface{}) (err error)
- func (s *Session) Size() (size int, err error)
- func (s *Session) X设置值(key string, value interface{}) (err error)
- type Storage
- type StorageBase
- func (s *StorageBase) Data(ctx context.Context, sessionId string) (sessionData map[string]interface{}, err error)
- func (s *StorageBase) Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)
- func (s *StorageBase) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
- func (s *StorageBase) GetSize(ctx context.Context, sessionId string) (size int, err error)
- func (s *StorageBase) New(ctx context.Context, ttl time.Duration) (id string, err error)
- func (s *StorageBase) Remove(ctx context.Context, sessionId string, key string) error
- func (s *StorageBase) RemoveAll(ctx context.Context, sessionId string) error
- func (s *StorageBase) SetMap(ctx context.Context, sessionId string, mapData map[string]interface{}, ...) error
- func (s *StorageBase) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ...) error
- func (s *StorageBase) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
- func (s *StorageBase) X设置值(ctx context.Context, sessionId string, key string, value interface{}, ...) error
- type StorageFile
- func (s *StorageFile) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (sessionData *gmap.StrAnyMap, err error)
- func (s *StorageFile) RemoveAll(ctx context.Context, sessionId string) error
- func (s *StorageFile) SetCryptoEnabled(enabled bool)
- func (s *StorageFile) SetCryptoKey(key []byte)
- func (s *StorageFile) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ...) error
- func (s *StorageFile) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
- type StorageMemory
- func (s *StorageMemory) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
- func (s *StorageMemory) RemoveAll(ctx context.Context, sessionId string) error
- func (s *StorageMemory) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ...) error
- func (s *StorageMemory) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
- type StorageRedis
- func (s *StorageRedis) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
- func (s *StorageRedis) RemoveAll(ctx context.Context, sessionId string) error
- func (s *StorageRedis) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ...) error
- func (s *StorageRedis) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
- type StorageRedisHashTable
- func (s *StorageRedisHashTable) Data(ctx context.Context, sessionId string) (data map[string]interface{}, err error)
- func (s *StorageRedisHashTable) Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)
- func (s *StorageRedisHashTable) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
- func (s *StorageRedisHashTable) GetSize(ctx context.Context, sessionId string) (size int, err error)
- func (s *StorageRedisHashTable) Remove(ctx context.Context, sessionId string, key string) error
- func (s *StorageRedisHashTable) RemoveAll(ctx context.Context, sessionId string) error
- func (s *StorageRedisHashTable) SetMap(ctx context.Context, sessionId string, data map[string]interface{}, ...) error
- func (s *StorageRedisHashTable) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ...) error
- func (s *StorageRedisHashTable) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
- func (s *StorageRedisHashTable) X设置值(ctx context.Context, sessionId string, key string, value interface{}, ...) error
Examples ¶
- Manager.GetStorage
- Manager.SetStorage
- Manager.SetTTL
- New
- Session.Contains
- Session.Data
- Session.Id
- Session.Remove
- Session.RemoveAll
- Session.SetId
- Session.SetIdFunc
- Session.SetMap
- Session.Size
- StorageFile.SetCryptoEnabled
- StorageFile.SetCryptoKey
- StorageFile.UpdateTTL
- StorageRedis.RemoveAll
- StorageRedis.UpdateTTL
- StorageRedisHashTable.Data
- StorageRedisHashTable.Get
- StorageRedisHashTable.GetSession
- StorageRedisHashTable.GetSize
- StorageRedisHashTable.Remove
- StorageRedisHashTable.RemoveAll
- StorageRedisHashTable.SetSession
- StorageRedisHashTable.UpdateTTL
Constants ¶
const ( DefaultStorageFileCryptoEnabled = false DefaultStorageFileUpdateTTLInterval = 10 * time.Second DefaultStorageFileClearExpiredInterval = time.Hour )
const ( // DefaultStorageRedisLoopInterval 是用于在最近一段时间内更新会话ID的TTL(生存时间)的间隔。 // md5:5adbee0aa8ff1658 DefaultStorageRedisLoopInterval = 10 * time.Second )
Variables ¶
var ( DefaultStorageFilePath = gfile.X取临时目录("gsessions") DefaultStorageFileCryptoKey = []byte("Session storage file crypto key!") )
var ( // ErrorDisabled 用于标记某些接口函数未被使用。 md5:2a81adf17310353b ErrorDisabled = gerror.NewWithOption(gerror.Option{ Text: "this feature is disabled in this storage", Code: gcode.CodeNotSupported, }) )
Functions ¶
func NewSessionId ¶
func NewSessionId() string
NewSessionId 创建并返回一个新的、唯一的会话ID字符串,该字符串长度为32字节。 md5:c16016979687f8e5
Types ¶
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager for sessions.
func New ¶
New 创建并返回一个新的会话管理器。 md5:f41a96ed9e4273e4
Example ¶
package main import ( "fmt" "time" gsession "github.com/888go/goframe/os/gsession" ) func main() { manager := gsession.New(time.Second) fmt.Println(manager.GetTTL()) }
Output: 1s
func (*Manager) GetStorage ¶
GetStorage 返回当前会话管理器的存储对象。 md5:43cdd2b5155f8389
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { manager := gsession.New(time.Second, gsession.NewStorageMemory()) size, _ := manager.GetStorage().GetSize(gctx.X创建(), "id") fmt.Println(size) }
Output: 0
func (*Manager) New ¶
New 为给定的 session ID 创建或获取会话。 参数 `sessionId` 是可选的,如果未提供,则根据 Storage.New 的行为创建新的会话。 md5:4d84930c3cbf9027
func (*Manager) SetStorage ¶
SetStorage 设置管理器的会话存储。 md5:9fe6b2a9a6ae9990
Example ¶
package main import ( "fmt" "time" gsession "github.com/888go/goframe/os/gsession" ) func main() { manager := gsession.New(time.Second) manager.SetStorage(gsession.NewStorageMemory()) fmt.Println(manager.GetTTL()) }
Output: 1s
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session 结构体,用于存储单个会话数据,它与单个请求绑定。Session 结构体是与用户交互的接口,但 Storage 是底层适配器设计的接口,用于实现特定功能。 md5:1d1b86dcb53a276e
func (*Session) Close ¶
Close 方法关闭当前会话并在会话管理器中更新其TTL(生存时间)。 如果此会话已被修改(脏会话),它还会将该会话导出到存储中。
注意:此功能必须在每次会话请求完成后调用。 md5:f68a83f493f4727a
func (*Session) Contains ¶
Contains 检查键是否存在于会话中。 md5:7a03d1ea75cda393
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s1 := manager.New(gctx.X创建()) notContains, _ := s1.Contains("Contains") fmt.Println(notContains) s2 := manager.New(gctx.X创建(), "Contains") contains, _ := s2.Contains("Contains") fmt.Println(contains) }
Output: false false
func (*Session) Data ¶
Data 将所有数据作为映射返回。 请注意,为了并发安全,它内部使用了值拷贝。 md5:a37827aba4dd5df4
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s1 := manager.New(gctx.X创建()) data1, _ := s1.Data() fmt.Println(data1) s2 := manager.New(gctx.X创建(), "id_data") data2, _ := s2.Data() fmt.Println(data2) }
Output: map[] map[]
func (*Session) Get ¶
Get 通过给定的键获取 session 值。 如果键在 session 中不存在且提供了 `def`,则返回 `def`, 否则返回 nil。 md5:893a612d87b25ee2
func (*Session) Id ¶
Id 返回此会话的会话标识符。 如果在初始化时未传递会话标识符,则创建并返回新的会话标识符。 md5:c1a4c6b98633e656
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s := manager.New(gctx.X创建(), "Id") id, _ := s.Id() fmt.Println(id) }
Output: Id
func (*Session) MustContains ¶
MustContains执行Contains函数的功能,但如果发生任何错误,它将引发恐慌。 md5:b9f29f0374157bc5
func (*Session) MustRemove ¶
MustRemove 行为与函数 Remove 相同,但如果发生任何错误则会引发恐慌。 md5:76bd8c9cb1e6223b
func (*Session) MustSetMap ¶
MustSetMap 行为类似于函数 SetMap,但如果发生任何错误则会引发 panic。 md5:3d54948e22292bcf
func (*Session) Remove ¶
Remove 从本次会话中移除指定的键及其对应的值。 md5:3dc440da200c0834
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s1 := manager.New(gctx.X创建()) fmt.Println(s1.Remove("key")) s2 := manager.New(gctx.X创建(), "Remove") fmt.Println(s2.Remove("key")) }
Output: <nil> <nil>
func (*Session) RemoveAll ¶
RemoveAll 从该会话中删除所有键值对。 md5:6ca756339a9f18b5
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s1 := manager.New(gctx.X创建()) fmt.Println(s1.RemoveAll()) s2 := manager.New(gctx.X创建(), "Remove") fmt.Println(s2.RemoveAll()) }
Output: <nil> <nil>
func (*Session) SetId ¶
SetId 在会话开始前设置自定义会话。如果在会话已经开始后调用,将返回错误。 md5:cf8fd98a6cd07079
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { nilSession := &gsession.Session{} fmt.Println(nilSession.SetId("id")) storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s := manager.New(gctx.X创建()) s.Id() fmt.Println(s.SetId("id")) }
Output: <nil> session already started
func (*Session) SetIdFunc ¶
SetIdFunc 在会话开始前设置自定义会话ID生成函数。 如果在会话已经开始后调用它,将返回错误。 md5:07c5962c3c68bf37
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { nilSession := &gsession.Session{} fmt.Println(nilSession.SetIdFunc(func(ttl time.Duration) string { return "id" })) storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s := manager.New(gctx.X创建()) s.Id() fmt.Println(s.SetIdFunc(func(ttl time.Duration) string { return "id" })) }
Output: <nil> session already started
func (*Session) SetMap ¶
SetMap 批量使用映射设置会话。 md5:f55c78b98e85ba61
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s := manager.New(gctx.X创建()) fmt.Println(s.SetMap(map[string]interface{}{}) == nil) }
Output: true
func (*Session) Size ¶
Size返回会话的大小。 md5:072795e87a3938d1
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) manager := gsession.New(time.Second, storage) s1 := manager.New(gctx.X创建()) size1, _ := s1.Size() fmt.Println(size1) s2 := manager.New(gctx.X创建(), "Size") size2, _ := s2.Size() fmt.Println(size2) }
Output: 0 0
type Storage ¶
type Storage interface { // New 创建一个自定义会话ID。 // 此函数可用于自定义会话创建。 // md5:bf8b403018c5c6df New(ctx context.Context, ttl time.Duration) (sessionId string, err error) // Get 通过给定的键获取并返回会话中的特定值。 // 如果键在会话中不存在,则返回nil。 // md5:2584a452a5632118 Get(ctx context.Context, sessionId string, key string) (value interface{}, err error) // GetSize 从存储中获取并返回键值对的大小。 md5:2c41726f18e2cd04 GetSize(ctx context.Context, sessionId string) (size int, err error) // Data 从存储中获取所有的键值对并将其作为映射返回。 md5:7160c6695dcc211b Data(ctx context.Context, sessionId string) (sessionData map[string]interface{}, err error) // X设置值 将一个键值对设置到存储中。 // 参数 `ttl` 指定了会话 ID 的过期时间。 // md5:f141e9b5de211364 X设置值(ctx context.Context, sessionId string, key string, value interface{}, ttl time.Duration) error // SetMap 批量将键值对设置为存储中的会话映射。参数 `ttl` 指定会话 ID 的过期时间。 // md5:be3d6b9412b66e49 SetMap(ctx context.Context, sessionId string, mapData map[string]interface{}, ttl time.Duration) error // Remove 从存储中删除指定会话中的键值对。 md5:3887f6d1acd56ad6 Remove(ctx context.Context, sessionId string, key string) error // RemoveAll 从存储中删除会话。 md5:488d9f9ca747e8e4 RemoveAll(ctx context.Context, sessionId string) error // GetSession 从存储中返回给定会话的数据,数据类型为 `*gmap.StrAnyMap`。 // // 参数 `ttl` 指定了该会话的生存时间(TTL)。 // 参数 `data` 是当前存储在内存中的旧会话数据,对于某些存储,如果禁用了内存存储,此参数可能为 `nil`。 // // 这个函数会在每次会话开始时被调用。 // 如果会话不存在或者其 TTL 已过期,它将返回 `nil`。 // md5:a495b20f42259c94 GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error) // SetSession 更新指定会话ID的数据。 // 在关闭已更改的会话后,都会调用此函数。这个函数将内存中的所有会话数据映射复制到存储中。 // md5:16766d7e58c61924 SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error // UpdateTTL 更新指定会话ID的TTL(时间到 live)。 // 在非脏会话关闭后,将调用此函数。 // md5:29eae01946af2846 UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error }
Storage是会话存储的接口定义。 md5:3c03cfdd3299edcc
type StorageBase ¶
type StorageBase struct{}
StorageBase是会话存储的基本实现。 md5:9a65ccca10de1608
func (*StorageBase) Data ¶
func (s *StorageBase) Data(ctx context.Context, sessionId string) (sessionData map[string]interface{}, err error)
Data 从存储中获取所有的键值对并将其作为映射返回。 md5:7160c6695dcc211b
func (*StorageBase) Get ¶
func (s *StorageBase) Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)
Get 使用给定的键获取会话中的特定值。 如果键在会话中不存在,则返回nil。 md5:c1696c0fb72c680b
func (*StorageBase) GetSession ¶
func (s *StorageBase) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。
参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。
此函数在会话启动时会被调用。 md5:01e56ce09d5fd934
func (*StorageBase) RemoveAll ¶
func (s *StorageBase) RemoveAll(ctx context.Context, sessionId string) error
RemoveAll 从存储中删除会话。 md5:488d9f9ca747e8e4
func (*StorageBase) SetMap ¶
func (s *StorageBase) SetMap(ctx context.Context, sessionId string, mapData map[string]interface{}, ttl time.Duration) error
SetMap 使用映射批量设置键值对会话到存储中。 参数 `ttl` 指定了会话ID的TTL(并非针对键值对)。 md5:a1bf3a748ba4aef3
func (*StorageBase) SetSession ¶
func (s *StorageBase) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error
SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4
type StorageFile ¶
type StorageFile struct { StorageBase // contains filtered or unexported fields }
StorageFile实现了使用文件系统作为会话存储的接口。 md5:bae13bc406aa3178
func NewStorageFile ¶
func NewStorageFile(path string, ttl time.Duration) *StorageFile
NewStorageFile 创建并返回一个用于会话的文件存储对象。 md5:047619bd552117d1
func (*StorageFile) GetSession ¶
func (s *StorageFile) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (sessionData *gmap.StrAnyMap, err error)
GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。
参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。
此函数在会话启动时会被调用。 md5:01e56ce09d5fd934
func (*StorageFile) RemoveAll ¶
func (s *StorageFile) RemoveAll(ctx context.Context, sessionId string) error
RemoveAll 删除存储中的所有键值对。 md5:8b06607595d19a73
func (*StorageFile) SetCryptoEnabled ¶
func (s *StorageFile) SetCryptoEnabled(enabled bool)
SetCryptoEnabled 启用/禁用会话存储的加密功能。 md5:14228b4577da32ec
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) storage.SetCryptoEnabled(true) size, _ := storage.GetSize(gctx.X创建(), "id") fmt.Println(size) }
Output: 0
func (*StorageFile) SetCryptoKey ¶
func (s *StorageFile) SetCryptoKey(key []byte)
SetCryptoKey 设置会话存储的加密密钥。 当启用加密功能时,将使用此加密密钥。 md5:dbc53d710307bd28
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageFile("", time.Second) storage.SetCryptoKey([]byte("key")) size, _ := storage.GetSize(gctx.X创建(), "id") fmt.Println(size) }
Output: 0
func (*StorageFile) SetSession ¶
func (s *StorageFile) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error
SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4
func (*StorageFile) UpdateTTL ¶
UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab
Example ¶
package main import ( "fmt" "time" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { var ( ctx = gctx.X创建() ) storage := gsession.NewStorageFile("", time.Second) fmt.Println(storage.UpdateTTL(ctx, "id", time.Second*15)) time.Sleep(time.Second * 11) }
Output: <nil>
type StorageMemory ¶
type StorageMemory struct { StorageBase // contains filtered or unexported fields }
StorageMemory 使用内存实现了会话存储接口。 md5:1a9a78b3bd5a138b
func NewStorageMemory ¶
func NewStorageMemory() *StorageMemory
NewStorageMemory 创建并返回一个用于会话的内存存储对象。 md5:9b1b616d48dd808e
func (*StorageMemory) GetSession ¶
func (s *StorageMemory) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。
参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。
此函数在会话启动时会被调用。 md5:01e56ce09d5fd934
func (*StorageMemory) RemoveAll ¶
func (s *StorageMemory) RemoveAll(ctx context.Context, sessionId string) error
RemoveAll 从存储中删除会话。 md5:488d9f9ca747e8e4
type StorageRedis ¶
type StorageRedis struct { StorageBase // contains filtered or unexported fields }
StorageRedis 使用Redis实现会话存储接口。 md5:df4e47711869aaf9
func NewStorageRedis ¶
func NewStorageRedis(redis *gredis.Redis, prefix ...string) *StorageRedis
NewStorageRedis 创建并返回一个用于session的redis存储对象。 md5:58528aab48b7daea
func (*StorageRedis) GetSession ¶
func (s *StorageRedis) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。
参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。
此函数在会话启动时会被调用。 md5:01e56ce09d5fd934
func (*StorageRedis) RemoveAll ¶
func (s *StorageRedis) RemoveAll(ctx context.Context, sessionId string) error
RemoveAll 删除存储中的所有键值对。 md5:8b06607595d19a73
Example ¶
package main import ( "fmt" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedis(g.Redis类()) err := storage.RemoveAll(gctx.X创建(), "id") fmt.Println(err != nil) // May Output: // true }
Output:
func (*StorageRedis) SetSession ¶
func (s *StorageRedis) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error
SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4
func (*StorageRedis) UpdateTTL ¶
UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab
Example ¶
package main import ( "fmt" "time" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedis(g.Redis类()) err := storage.UpdateTTL(gctx.X创建(), "id", time.Second*15) fmt.Println(err) time.Sleep(time.Second * 11) // May Output: // <nil> }
Output:
type StorageRedisHashTable ¶
type StorageRedisHashTable struct { StorageBase // contains filtered or unexported fields }
StorageRedisHashTable 是使用 Redis 哈希表实现的会话存储接口。 md5:4479b82640ee5fc6
func NewStorageRedisHashTable ¶
func NewStorageRedisHashTable(redis *gredis.Redis, prefix ...string) *StorageRedisHashTable
NewStorageRedisHashTable 创建并返回一个用于会话的redis哈希表存储对象。 md5:7d5ec78a44d3be11
func (*StorageRedisHashTable) Data ¶
func (s *StorageRedisHashTable) Data(ctx context.Context, sessionId string) (data map[string]interface{}, err error)
Data 从存储中获取所有的键值对并将其作为映射返回。 md5:7160c6695dcc211b
Example ¶
package main import ( "fmt" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) data, err := storage.Data(gctx.X创建(), "id") fmt.Println(data) fmt.Println(err) // May Output: // map[] // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) Get ¶
func (s *StorageRedisHashTable) Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)
Get 通过给定的键获取会话值。 如果该键不存在于会话中,它将返回nil。 md5:dd25fb53030b0080
Example ¶
package main import ( "fmt" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) v, err := storage.Get(gctx.X创建(), "id", "key") fmt.Println(v) fmt.Println(err) // May Output: // <nil> // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) GetSession ¶
func (s *StorageRedisHashTable) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)
GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。
参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。
此函数在会话启动时会被调用。 md5:01e56ce09d5fd934
Example ¶
package main import ( "fmt" "time" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) data, err := storage.GetSession(gctx.X创建(), "id", time.Second) fmt.Println(data) fmt.Println(err) // May Output: // // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) GetSize ¶
func (s *StorageRedisHashTable) GetSize(ctx context.Context, sessionId string) (size int, err error)
GetSize 从存储中检索键值对的大小。 md5:9dcc1d87ddc0a989
Example ¶
package main import ( "fmt" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) size, err := storage.GetSize(gctx.X创建(), "id") fmt.Println(size) fmt.Println(err) // May Output: // 0 // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) Remove ¶
Remove 删除存储中键及其对应的值。 md5:95ea150955b88994
Example ¶
package main import ( "fmt" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) err := storage.Remove(gctx.X创建(), "id", "key") fmt.Println(err) // May Output: // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) RemoveAll ¶
func (s *StorageRedisHashTable) RemoveAll(ctx context.Context, sessionId string) error
RemoveAll 删除存储中的所有键值对。 md5:8b06607595d19a73
Example ¶
package main import ( "fmt" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) err := storage.RemoveAll(gctx.X创建(), "id") fmt.Println(err) // May Output: // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) SetMap ¶
func (s *StorageRedisHashTable) SetMap(ctx context.Context, sessionId string, data map[string]interface{}, ttl time.Duration) error
SetMap 使用映射批量设置键值对会话到存储中。 参数 `ttl` 指定了会话ID的TTL(并非针对键值对)。 md5:a1bf3a748ba4aef3
func (*StorageRedisHashTable) SetSession ¶
func (s *StorageRedisHashTable) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error
SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4
Example ¶
package main import ( "fmt" "time" gmap "github.com/888go/goframe/container/gmap" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) strAnyMap := gmap.StrAnyMap{} err := storage.SetSession(gctx.X创建(), "id", &strAnyMap, time.Second) fmt.Println(err) // May Output: // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output:
func (*StorageRedisHashTable) UpdateTTL ¶
func (s *StorageRedisHashTable) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab
Example ¶
package main import ( "fmt" "time" "github.com/888go/goframe/frame/g" gctx "github.com/888go/goframe/os/gctx" gsession "github.com/888go/goframe/os/gsession" ) func main() { storage := gsession.NewStorageRedisHashTable(g.Redis类()) err := storage.UpdateTTL(gctx.X创建(), "id", time.Second) fmt.Println(err) // May Output: // redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis }
Output: