** Copyright (C) 2001-2025 Zabbix SIA
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
"github.com/mediocregopher/radix/v3"
"golang.zabbix.com/sdk/log"
"golang.zabbix.com/sdk/uri"
"golang.zabbix.com/sdk/zbxerr"
var errMasterDown = errors.New("MASTERDOWN Link with MASTER is down and slave-serve-stale-data is set to 'no'.")
type redisClient interface {
Query(cmd radix.CmdAction) error
// Query wraps the radix.Client.Do function.
func (r *RedisConn) Query(cmd radix.CmdAction) error {
// updateAccessTime updates the last time a connection was accessed.
func (r *RedisConn) updateAccessTime() {
r.lastTimeAccess = time.Now()
// ConnManager is thread-safe structure for manage connections.
type ConnManager struct {
connections map[uri.URI]*RedisConn
Destroy context.CancelFunc
// NewConnManager initializes ConnManager structure and runs Go Routine that watches for unused connections.
func NewConnManager(keepAlive, timeout, hkInterval time.Duration) *ConnManager {