89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package store
|
||
|
||
import (
|
||
"errors"
|
||
"time"
|
||
)
|
||
|
||
// ErrNotFound is returned when a key is not found in the store.
|
||
var ErrNotFound = errors.New("key not found")
|
||
|
||
// Message is the struct for received pub/sub messages.
|
||
type Message struct {
|
||
Channel string
|
||
Payload []byte
|
||
}
|
||
|
||
// Subscription represents an active subscription to a pub/sub channel.
|
||
type Subscription interface {
|
||
Channel() <-chan *Message
|
||
Close() error
|
||
}
|
||
|
||
// Pipeliner defines an interface for executing a batch of commands.
|
||
type Pipeliner interface {
|
||
// General
|
||
Del(keys ...string)
|
||
Expire(key string, expiration time.Duration)
|
||
|
||
// HASH
|
||
HSet(key string, values map[string]any)
|
||
HIncrBy(key, field string, incr int64)
|
||
|
||
// SET
|
||
SAdd(key string, members ...any)
|
||
SRem(key string, members ...any)
|
||
|
||
// LIST
|
||
LPush(key string, values ...any)
|
||
LRem(key string, count int64, value any)
|
||
|
||
// Execution
|
||
Exec() error
|
||
}
|
||
|
||
// Store is the master interface for our cache service.
|
||
type Store interface {
|
||
// Basic K/V operations
|
||
Set(key string, value []byte, ttl time.Duration) error
|
||
Get(key string) ([]byte, error)
|
||
Del(keys ...string) error
|
||
Exists(key string) (bool, error)
|
||
SetNX(key string, value []byte, ttl time.Duration) (bool, error)
|
||
|
||
// HASH operations
|
||
HSet(key string, values map[string]any) error
|
||
HGetAll(key string) (map[string]string, error)
|
||
HIncrBy(key, field string, incr int64) (int64, error)
|
||
HDel(key string, fields ...string) error // [新增]
|
||
|
||
// LIST operations
|
||
LPush(key string, values ...any) error
|
||
LRem(key string, count int64, value any) error
|
||
Rotate(key string) (string, error)
|
||
LIndex(key string, index int64) (string, error)
|
||
|
||
// SET operations
|
||
SAdd(key string, members ...any) error
|
||
SPopN(key string, count int64) ([]string, error)
|
||
SMembers(key string) ([]string, error)
|
||
SRem(key string, members ...any) error
|
||
SRandMember(key string) (string, error)
|
||
|
||
// Pub/Sub operations
|
||
Publish(channel string, message []byte) error
|
||
Subscribe(channel string) (Subscription, error)
|
||
|
||
// Pipeline (optional) - 我们在redis实现它,内存版暂时不实现
|
||
Pipeline() Pipeliner
|
||
|
||
// Close closes the store and releases any underlying resources.
|
||
Close() error
|
||
|
||
// === 新增方法,支持轮询策略 ===
|
||
ZAdd(key string, members map[string]float64) error
|
||
ZRange(key string, start, stop int64) ([]string, error)
|
||
ZRem(key string, members ...any) error
|
||
PopAndCycleSetMember(mainKey, cooldownKey string) (string, error)
|
||
}
|