initial import
This commit is contained in:
66
core/stores/redis/redisblockingnode.go
Normal file
66
core/stores/redis/redisblockingnode.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"zero/core/logx"
|
||||
|
||||
red "github.com/go-redis/redis"
|
||||
)
|
||||
|
||||
type ClosableNode interface {
|
||||
RedisNode
|
||||
Close()
|
||||
}
|
||||
|
||||
func CreateBlockingNode(r *Redis) (ClosableNode, error) {
|
||||
timeout := readWriteTimeout + blockingQueryTimeout
|
||||
|
||||
switch r.Type {
|
||||
case NodeType:
|
||||
client := red.NewClient(&red.Options{
|
||||
Addr: r.Addr,
|
||||
Password: r.Pass,
|
||||
DB: defaultDatabase,
|
||||
MaxRetries: maxRetries,
|
||||
PoolSize: 1,
|
||||
MinIdleConns: 1,
|
||||
ReadTimeout: timeout,
|
||||
})
|
||||
return &clientBridge{client}, nil
|
||||
case ClusterType:
|
||||
client := red.NewClusterClient(&red.ClusterOptions{
|
||||
Addrs: []string{r.Addr},
|
||||
Password: r.Pass,
|
||||
MaxRetries: maxRetries,
|
||||
PoolSize: 1,
|
||||
MinIdleConns: 1,
|
||||
ReadTimeout: timeout,
|
||||
})
|
||||
return &clusterBridge{client}, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown redis type: %s", r.Type)
|
||||
}
|
||||
}
|
||||
|
||||
type (
|
||||
clientBridge struct {
|
||||
*red.Client
|
||||
}
|
||||
|
||||
clusterBridge struct {
|
||||
*red.ClusterClient
|
||||
}
|
||||
)
|
||||
|
||||
func (bridge *clientBridge) Close() {
|
||||
if err := bridge.Client.Close(); err != nil {
|
||||
logx.Errorf("Error occurred on close redis client: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (bridge *clusterBridge) Close() {
|
||||
if err := bridge.ClusterClient.Close(); err != nil {
|
||||
logx.Errorf("Error occurred on close redis cluster: %s", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user