feat: channel affinity (#2669)
* feat: channel affinity * feat: channel affinity -> model setting * fix: channel affinity * feat: channel affinity op * feat: channel_type setting * feat: clean * feat: cache supports both memory and Redis. * feat: Optimise ui/ux * feat: Optimise ui/ux * feat: Optimise codex usage ui/ux * feat: Optimise ui/ux * feat: Optimise ui/ux * feat: Optimise ui/ux * feat: If the affinitized channel fails and a retry succeeds on another channel, update the affinity to the successful channel
This commit is contained in:
38
pkg/cachex/namespace.go
Normal file
38
pkg/cachex/namespace.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package cachex
|
||||
|
||||
import "strings"
|
||||
|
||||
// Namespace isolates keys between different cache use-cases. (e.g. "channel_affinity:v1").
|
||||
type Namespace string
|
||||
|
||||
func (n Namespace) prefix() string {
|
||||
ns := strings.TrimSpace(string(n))
|
||||
ns = strings.TrimRight(ns, ":")
|
||||
if ns == "" {
|
||||
return ""
|
||||
}
|
||||
return ns + ":"
|
||||
}
|
||||
|
||||
func (n Namespace) FullKey(key string) string {
|
||||
key = strings.TrimSpace(key)
|
||||
if key == "" {
|
||||
return ""
|
||||
}
|
||||
p := n.prefix()
|
||||
if p == "" {
|
||||
return strings.TrimLeft(key, ":")
|
||||
}
|
||||
if strings.HasPrefix(key, p) {
|
||||
return key
|
||||
}
|
||||
return p + strings.TrimLeft(key, ":")
|
||||
}
|
||||
|
||||
func (n Namespace) MatchPattern() string {
|
||||
p := n.prefix()
|
||||
if p == "" {
|
||||
return "*"
|
||||
}
|
||||
return p + "*"
|
||||
}
|
||||
Reference in New Issue
Block a user