Documentation
¶
Overview ¶
Package storage defines redis storage.
Index ¶
- Constants
- Variables
- func ConnectToRedis(ctx context.Context, config *Config)
- func Connected() bool
- func DisableRedis(ok bool)
- func GenerateToken(orgID, keyID, hashAlgorithm string) (string, error)
- func HashKey(in string) string
- func HashStr(in string) string
- func NewRedisClusterPool(isCache bool, config *Config) redis.UniversalClient
- func TokenHashAlgo(token string) string
- func TokenOrg(token string) string
- type AnalyticsHandler
- type Config
- type Handler
- type RedisCluster
- func (r *RedisCluster) AddToSet(ctx context.Context, keyName, value string)
- func (r *RedisCluster) AddToSortedSet(ctx context.Context, keyName, value string, score float64)
- func (r *RedisCluster) AppendToSet(ctx context.Context, keyName, value string)
- func (r *RedisCluster) AppendToSetPipelined(ctx context.Context, key string, values [][]byte)
- func (r *RedisCluster) Connect() bool
- func (r *RedisCluster) Decrement(ctx context.Context, keyName string)
- func (r *RedisCluster) DeleteAllKeys(ctx context.Context) bool
- func (r *RedisCluster) DeleteKey(ctx context.Context, keyName string) bool
- func (r *RedisCluster) DeleteKeys(ctx context.Context, keys []string) bool
- func (r *RedisCluster) DeleteRawKey(ctx context.Context, keyName string) bool
- func (r *RedisCluster) DeleteScanMatch(ctx context.Context, pattern string) bool
- func (r *RedisCluster) Exists(ctx context.Context, keyName string) (bool, error)
- func (r *RedisCluster) GetAndDeleteSet(ctx context.Context, keyName string) []interface{}
- func (r *RedisCluster) GetClient() redis.UniversalClient
- func (r *RedisCluster) GetExp(ctx context.Context, keyName string) (int64, error)
- func (r *RedisCluster) GetKey(ctx context.Context, keyName string) (string, error)
- func (r *RedisCluster) GetKeyPrefix() string
- func (r *RedisCluster) GetKeyTTL(ctx context.Context, keyName string) (ttl int64, err error)
- func (r *RedisCluster) GetKeys(ctx context.Context, filter string) []string
- func (r *RedisCluster) GetKeysAndValues(ctx context.Context) map[string]string
- func (r *RedisCluster) GetKeysAndValuesWithFilter(ctx context.Context, filter string) map[string]string
- func (r *RedisCluster) GetListRange(ctx context.Context, keyName string, from, to int64) ([]string, error)
- func (r *RedisCluster) GetMultiKey(ctx context.Context, keys []string) ([]string, error)
- func (r *RedisCluster) GetRawKey(ctx context.Context, keyName string) (string, error)
- func (r RedisCluster) GetRollingWindow(ctx context.Context, keyName string, per int64, pipeline bool) (int, []interface{})
- func (r *RedisCluster) GetSet(ctx context.Context, keyName string) (map[string]string, error)
- func (r *RedisCluster) GetSortedSetRange(ctx context.Context, keyName, scoreFrom, scoreTo string) ([]string, []float64, error)
- func (r *RedisCluster) IncrememntWithExpire(ctx context.Context, keyName string, expire int64) int64
- func (r *RedisCluster) IsMemberOfSet(ctx context.Context, keyName, value string) bool
- func (r *RedisCluster) Publish(ctx context.Context, channel, message string) error
- func (r *RedisCluster) RemoveFromList(ctx context.Context, keyName, value string) error
- func (r *RedisCluster) RemoveFromSet(ctx context.Context, keyName, value string)
- func (r *RedisCluster) RemoveSortedSetRange(ctx context.Context, keyName, scoreFrom, scoreTo string) error
- func (r *RedisCluster) SetExp(ctx context.Context, keyName string, timeout time.Duration) error
- func (r *RedisCluster) SetKey(ctx context.Context, keyName, session string, timeout time.Duration) error
- func (r *RedisCluster) SetRawKey(ctx context.Context, keyName, session string, timeout time.Duration) error
- func (r *RedisCluster) SetRollingWindow(ctx context.Context, keyName string, per int64, valueOverride string, ...) (int, []interface{})
- func (r *RedisCluster) StartPubSubHandler(ctx context.Context, channel string, callback func(interface{})) error
- type RedisOpts
Constants ¶
const B64JSONPrefix = "ey"
B64JSONPrefix stand for `{"` in base64.
Variables ¶
var ( HashSha256 = "sha256" HashMurmur32 = "murmur32" HashMurmur64 = "murmur64" HashMurmur128 = "murmur128" )
Defines algorithm constant.
var ErrKeyNotFound = errors.New("key not found")
ErrKeyNotFound is a standard error for when a key is not found in the storage engine.
var ErrRedisIsDown = errors.New("storage: Redis is either down or ws not configured")
ErrRedisIsDown is returned when we can't communicate with redis.
Functions ¶
func ConnectToRedis ¶
ConnectToRedis starts a go routine that periodically tries to connect to redis. 可以启动一个goroutine不断重试链接
func DisableRedis ¶
func DisableRedis(ok bool)
DisableRedis very handy when testsing it allows to dynamically enable/disable talking with redisW.
func GenerateToken ¶
GenerateToken generate token, if hashing algorithm is empty, use legacy key generation.
func NewRedisClusterPool ¶
func NewRedisClusterPool(isCache bool, config *Config) redis.UniversalClient
NewRedisClusterPool create a redis cluster pool.
Types ¶
type AnalyticsHandler ¶
type AnalyticsHandler interface { Connect() bool AppendToSetPipelined(string, [][]byte) GetAndDeleteSet(string) []interface{} SetExp(string, time.Duration) error // Set key expiration GetExp(string) (int64, error) // Returns expiry of a key }
AnalyticsHandler defines the interface for analytics.
type Config ¶
type Config struct { Host string Port int Addrs []string MasterName string Username string Password string Database int MaxIdle int MaxActive int Timeout int EnableCluster bool UseSSL bool SSLInsecureSkipVerify bool EnableTracing bool //是否开启tracing }
Config defines options for redis cluster.
type Handler ¶
type Handler interface { GetKey(string) (string, error) // Returned string is expected to be a JSON object (user.SessionState) GetMultiKey([]string) ([]string, error) GetRawKey(string) (string, error) SetKey(string, string, int64) error // Second input string is expected to be a JSON object (user.SessionState) SetRawKey(string, string, int64) error SetExp(string, int64) error // Set key expiration GetExp(string) (int64, error) // Returns expiry of a key GetKeys(string) []string DeleteKey(string) bool DeleteAllKeys() bool DeleteRawKey(string) bool Connect() bool GetKeysAndValues() map[string]string GetKeysAndValuesWithFilter(string) map[string]string DeleteKeys([]string) bool Decrement(string) IncrememntWithExpire(string, int64) int64 SetRollingWindow(key string, per int64, val string, pipeline bool) (int, []interface{}) GetRollingWindow(key string, per int64, pipeline bool) (int, []interface{}) GetSet(string) (map[string]string, error) AddToSet(string, string) GetAndDeleteSet(string) []interface{} RemoveFromSet(string, string) DeleteScanMatch(string) bool GetKeyPrefix() string AddToSortedSet(string, string, float64) GetSortedSetRange(string, string, string) ([]string, []float64, error) RemoveSortedSetRange(string, string, string) error GetListRange(string, int64, int64) ([]string, error) RemoveFromList(string, string) error AppendToSet(string, string) Exists(string) (bool, error) }
Handler is a standard interface to a storage backend, used by AuthorisationManager to read and write key values to the backend.
type RedisCluster ¶
RedisCluster is a storage manager that uses the redis database.
func (*RedisCluster) AddToSet ¶
func (r *RedisCluster) AddToSet(ctx context.Context, keyName, value string)
AddToSet add value to key set.
func (*RedisCluster) AddToSortedSet ¶
func (r *RedisCluster) AddToSortedSet(ctx context.Context, keyName, value string, score float64)
AddToSortedSet adds value with given score to sorted set identified by keyName.
func (*RedisCluster) AppendToSet ¶
func (r *RedisCluster) AppendToSet(ctx context.Context, keyName, value string)
AppendToSet append a value to the key set.
func (*RedisCluster) AppendToSetPipelined ¶
func (r *RedisCluster) AppendToSetPipelined(ctx context.Context, key string, values [][]byte)
AppendToSetPipelined append values to redis pipeline.
func (*RedisCluster) Connect ¶
func (r *RedisCluster) Connect() bool
Connect will establish a connection this is always true because we are dynamically using redis.
func (*RedisCluster) Decrement ¶
func (r *RedisCluster) Decrement(ctx context.Context, keyName string)
Decrement will decrement a key in redis.
func (*RedisCluster) DeleteAllKeys ¶
func (r *RedisCluster) DeleteAllKeys(ctx context.Context) bool
DeleteAllKeys will remove all keys from the database.
func (*RedisCluster) DeleteKey ¶
func (r *RedisCluster) DeleteKey(ctx context.Context, keyName string) bool
DeleteKey will remove a key from the database.
func (*RedisCluster) DeleteKeys ¶
func (r *RedisCluster) DeleteKeys(ctx context.Context, keys []string) bool
DeleteKeys will remove a group of keys in bulk.
func (*RedisCluster) DeleteRawKey ¶
func (r *RedisCluster) DeleteRawKey(ctx context.Context, keyName string) bool
DeleteRawKey will remove a key from the database without prefixing, assumes user knows what they are doing.
func (*RedisCluster) DeleteScanMatch ¶
func (r *RedisCluster) DeleteScanMatch(ctx context.Context, pattern string) bool
DeleteScanMatch will remove a group of keys in bulk.
func (*RedisCluster) GetAndDeleteSet ¶
func (r *RedisCluster) GetAndDeleteSet(ctx context.Context, keyName string) []interface{}
GetAndDeleteSet get and delete a key.
func (*RedisCluster) GetClient ¶
func (r *RedisCluster) GetClient() redis.UniversalClient
func (*RedisCluster) GetKeyPrefix ¶
func (r *RedisCluster) GetKeyPrefix() string
GetKeyPrefix returns storage key prefix.
func (*RedisCluster) GetKeys ¶
func (r *RedisCluster) GetKeys(ctx context.Context, filter string) []string
GetKeys will return all keys according to the filter (filter is a prefix - e.g. tyk.keys.*).
func (*RedisCluster) GetKeysAndValues ¶
func (r *RedisCluster) GetKeysAndValues(ctx context.Context) map[string]string
GetKeysAndValues will return all keys and their values - not to be used lightly.
func (*RedisCluster) GetKeysAndValuesWithFilter ¶
func (r *RedisCluster) GetKeysAndValuesWithFilter(ctx context.Context, filter string) map[string]string
GetKeysAndValuesWithFilter will return all keys and their values with a filter.
func (*RedisCluster) GetListRange ¶
func (r *RedisCluster) GetListRange(ctx context.Context, keyName string, from, to int64) ([]string, error)
GetListRange gets range of elements of list identified by keyName.
func (*RedisCluster) GetMultiKey ¶
GetMultiKey gets multiple keys from the database.
func (RedisCluster) GetRollingWindow ¶
func (r RedisCluster) GetRollingWindow(ctx context.Context, keyName string, per int64, pipeline bool) (int, []interface{})
GetRollingWindow return rolling window.
func (*RedisCluster) GetSortedSetRange ¶
func (r *RedisCluster) GetSortedSetRange(ctx context.Context, keyName, scoreFrom, scoreTo string) ([]string, []float64, error)
GetSortedSetRange gets range of elements of sorted set identified by keyName.
func (*RedisCluster) IncrememntWithExpire ¶
func (r *RedisCluster) IncrememntWithExpire(ctx context.Context, keyName string, expire int64) int64
IncrememntWithExpire will increment a key in redis.
func (*RedisCluster) IsMemberOfSet ¶
func (r *RedisCluster) IsMemberOfSet(ctx context.Context, keyName, value string) bool
IsMemberOfSet return whether the given value belong to key set.
func (*RedisCluster) Publish ¶
func (r *RedisCluster) Publish(ctx context.Context, channel, message string) error
Publish publish a message to the specify channel.
func (*RedisCluster) RemoveFromList ¶
func (r *RedisCluster) RemoveFromList(ctx context.Context, keyName, value string) error
RemoveFromList delete an value from a list idetinfied with the keyName.
func (*RedisCluster) RemoveFromSet ¶
func (r *RedisCluster) RemoveFromSet(ctx context.Context, keyName, value string)
RemoveFromSet remove a value from key set.
func (*RedisCluster) RemoveSortedSetRange ¶
func (r *RedisCluster) RemoveSortedSetRange(ctx context.Context, keyName, scoreFrom, scoreTo string) error
RemoveSortedSetRange removes range of elements from sorted set identified by keyName.
func (*RedisCluster) SetKey ¶
func (r *RedisCluster) SetKey(ctx context.Context, keyName, session string, timeout time.Duration) error
SetKey will create (or update) a key value in the store.
func (*RedisCluster) SetRawKey ¶
func (r *RedisCluster) SetRawKey(ctx context.Context, keyName, session string, timeout time.Duration) error
SetRawKey set the value of the given key.
func (*RedisCluster) SetRollingWindow ¶
func (r *RedisCluster) SetRollingWindow( ctx context.Context, keyName string, per int64, valueOverride string, pipeline bool, ) (int, []interface{})
SetRollingWindow will append to a sorted set in redis and extract a timed window of values.
func (*RedisCluster) StartPubSubHandler ¶
func (r *RedisCluster) StartPubSubHandler(ctx context.Context, channel string, callback func(interface{})) error
StartPubSubHandler will listen for a signal and run the callback for every subscription and message event.
type RedisOpts ¶
type RedisOpts redis.UniversalOptions
RedisOpts is the overridden type of redis.UniversalOptions. simple() and cluster() functions are not public in redis library. Therefore, they are redefined in here to use in creation of new redis cluster logic. We don't want to use redis.NewUniversalClient() logic.