代码拉取完成,页面将自动刷新
// 缓存模块
package xcache
import (
"errors"
"fmt"
"sync"
"time"
"github.com/gomodule/redigo/redis"
)
// 因xgodb.Cachexxxxx使用稍微有些繁杂,所以此处将缓存模块进一步精简,并逐步废弃xgodb.Cachexxx操作
type Config struct {
Hosts string // Redis连接地址
Pass string // redis密码
RedisSelect uint8 // redis查询库
ErrFunc func(msg string, err error) // Redis报错记录函数,用于记录Redis的报错信息
// 以下的配置模块为程序内部使用的配置
Conn *redis.Pool // redis连接配置
CacheSync sync.Map // 程序内缓存定时
Connect redis.Conn // redis连接
DefaultTime time.Duration // 默认缓存时长
groupMaxLimit int // 分组内缓存最大数量,超过该数量后将会触发整个分组的清空操作
groupCounts int // 分组数量限制,即缓存中允许存在最多多少个分组
}
var _default Config = Config{
CacheSync: sync.Map{},
DefaultTime: time.Hour * 2,
groupMaxLimit: 100,
groupCounts: 100,
}
// 设置redis连接
//
// conf 缓存配置项
func Regedit(conf *Config) {
if conf == nil {
return
}
if conf.Hosts != "" {
_default.Hosts = conf.Hosts
}
if conf.DefaultTime > 0 {
_default.DefaultTime = conf.DefaultTime
}
if conf.RedisSelect > 0 {
_default.RedisSelect = conf.RedisSelect
}
if conf.Pass != "" {
_default.Pass = conf.Pass
}
if conf.ErrFunc != nil {
_default.ErrFunc = conf.ErrFunc
}
_default.Conn = &redis.Pool{
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", _default.Hosts)
},
}
}
// 移除缓存配置
func RemoveRegedit() {
_default.Hosts = ""
_default.Pass = ""
}
// 设置连接和密码,需要异步执行_default.Connect.Close()
func open() {
if _default.Connect == nil {
_default.Connect = _default.Conn.Get()
}
if _default.Pass != "" {
if _, err := _default.Connect.Do("AUTH", _default.Pass); err != nil {
errorFunc("缓存库密码认证报错", err)
_default.Connect = nil
}
}
if _default.Connect != nil && _default.RedisSelect != 0 {
if _, err := _default.Connect.Do("SELECT", _default.RedisSelect); err != nil {
errorFunc("缓存库认证失败", err)
_default.Connect = nil
}
}
}
// 执行redis关闭操作
func close() {
if _default.Connect == nil {
return
}
_default.Connect.Close()
_default.Connect = nil
}
// 错误返回
//
// msg 错误概述
// err 错误详情
func errorFunc(msg string, err error) error {
if _default.ErrFunc != nil {
_default.ErrFunc(msg, err)
}
return err
}
// 异常恢复函数
//
// msg 恢复描述关键词
func panic_recover(msg string) {
if r := recover(); r != nil {
_default.Connect = nil
switch err := r.(type) {
case string:
errorFunc("Panic "+msg+" 异常-1", errors.New(err))
case error:
errorFunc("Panic "+msg+" 异常-2", err)
default:
errorFunc("Panic "+msg+" 异常-3", fmt.Errorf("%T: %v", err, err))
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。