mirror of
https://github.com/duanhf2012/origin.git
synced 2026-05-20 16:27:31 +08:00
新增异步setstring接口
This commit is contained in:
@@ -10,9 +10,25 @@ import (
|
|||||||
"github.com/gomodule/redigo/redis"
|
"github.com/gomodule/redigo/redis"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MAX_TASK_CHANNEL = 10240
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
type RetError struct {
|
||||||
|
resultType int
|
||||||
|
resultChan chan error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *RetError) Get() error {
|
||||||
|
return <-slf.resultChan
|
||||||
|
}
|
||||||
|
|
||||||
|
type Func func()
|
||||||
type RedisModule struct {
|
type RedisModule struct {
|
||||||
service.BaseModule
|
service.BaseModule
|
||||||
redispool *redis.Pool
|
redispool *redis.Pool
|
||||||
|
redisTask chan Func
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConfigRedis 服务器配置
|
// ConfigRedis 服务器配置
|
||||||
@@ -55,6 +71,25 @@ func (slf *RedisModule) Init(redisCfg *ConfigRedis) {
|
|||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slf.redisTask = make(chan Func, MAX_TASK_CHANNEL)
|
||||||
|
go slf.RunAnsyTask()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *RedisModule) RunAnsyTask() {
|
||||||
|
for {
|
||||||
|
task := <-slf.redisTask
|
||||||
|
task()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *RedisModule) GoTask(fc Func) error {
|
||||||
|
if len(slf.redisTask) >= MAX_TASK_CHANNEL {
|
||||||
|
return fmt.Errorf("chanel recover max channel.")
|
||||||
|
}
|
||||||
|
|
||||||
|
slf.redisTask <- fc
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetConn ...
|
// GetConn ...
|
||||||
@@ -89,39 +124,69 @@ func (slf *RedisModule) TestPingRedis() error {
|
|||||||
|
|
||||||
//SetRedisString redis添加string类型数据 无过期时间
|
//SetRedisString redis添加string类型数据 无过期时间
|
||||||
//示例:SetRedisString("TestKey", "Hell World!")
|
//示例:SetRedisString("TestKey", "Hell World!")
|
||||||
func (slf *RedisModule) SetRedisString(key, value string) (err error) {
|
func (slf *RedisModule) SetString(key, value string) (err error) {
|
||||||
err = slf.setRedisExStringByEx(key, value, "-1")
|
err = slf.setStringByExpire(key, value, "-1")
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *RedisModule) GoSetString(key, value string, err *RetError) {
|
||||||
|
slf.GoSetStringExpire(key, value, "-1", err)
|
||||||
|
}
|
||||||
|
|
||||||
//SetRedisExString redis添加string类型数据 有过期时间 ex过期时间,单位秒,必须是整数
|
//SetRedisExString redis添加string类型数据 有过期时间 ex过期时间,单位秒,必须是整数
|
||||||
//示例:SetRedisExString("TestKey", "Hell World!","60")
|
//示例:SetRedisExString("TestKey", "Hell World!","60")
|
||||||
func (slf *RedisModule) SetRedisExString(key, value, ex string) (err error) {
|
func (slf *RedisModule) SetStringExpire(key, value, expire string) (err error) {
|
||||||
err = slf.setRedisExStringByEx(key, value, ex)
|
err = slf.setStringByExpire(key, value, expire)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *RedisModule) GoSetStringExpire(key, value string, expire string, err *RetError) error {
|
||||||
|
if err != nil {
|
||||||
|
err.resultChan = make(chan error, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun := func() {
|
||||||
|
ret := slf.setStringByExpire(key, value, expire)
|
||||||
|
if err != nil {
|
||||||
|
err.resultChan <- ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slf.GoTask(fun)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
//SetRedisStringJSON redis添加JSON数据 无过期时间
|
//SetRedisStringJSON redis添加JSON数据 无过期时间
|
||||||
//示例:SetRedisStringJSON("AAAABTEST1", eagleconfig.Cfg)
|
//示例:SetRedisStringJSON("AAAABTEST1", eagleconfig.Cfg)
|
||||||
func (slf *RedisModule) SetRedisStringJSON(key string, val interface{}) (err error) {
|
func (slf *RedisModule) SetRedisStringJSON(key string, val interface{}) (err error) {
|
||||||
err = slf.SetRedisExStringJSON(key, val, "-1")
|
err = slf.SetStringJSONExpire(key, val, "-1")
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetRedisExStringJSON redis添加JSON数据 有过期时间 ex过期时间,单位秒,必须是整数
|
//SetRedisExStringJSON redis添加JSON数据 有过期时间 ex过期时间,单位秒,必须是整数
|
||||||
//示例:SetRedisStringJSON("AAAABTEST1", eagleconfig.Cfg,"60")
|
//示例:SetRedisStringJSON("AAAABTEST1", eagleconfig.Cfg,"60")
|
||||||
func (slf *RedisModule) SetRedisExStringJSON(key string, val interface{}, ex string) (err error) {
|
func (slf *RedisModule) SetStringJSONExpire(key string, val interface{}, expire string) (err error) {
|
||||||
if temp, err := json.Marshal(val); err == nil {
|
if temp, err := json.Marshal(val); err == nil {
|
||||||
err = slf.setRedisExStringByEx(key, string(temp), ex)
|
err = slf.setStringByExpire(key, string(temp), expire)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *RedisModule) setRedisExStringByEx(key, value, ex string) error {
|
func (slf *RedisModule) GoSetStringJSONExpire(key string, val interface{}, expire string, retErr *RetError) error {
|
||||||
|
temp, err := json.Marshal(val)
|
||||||
|
if err == nil {
|
||||||
|
slf.GoSetStringExpire(key, string(temp), expire, retErr)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *RedisModule) setStringByExpire(key, value, expire string) error {
|
||||||
if key == "" {
|
if key == "" {
|
||||||
return errors.New("Key Is Empty")
|
return errors.New("Key Is Empty")
|
||||||
}
|
}
|
||||||
@@ -134,10 +199,10 @@ func (slf *RedisModule) setRedisExStringByEx(key, value, ex string) error {
|
|||||||
|
|
||||||
var ret interface{}
|
var ret interface{}
|
||||||
var retErr error
|
var retErr error
|
||||||
if ex == "-1" {
|
if expire == "-1" {
|
||||||
ret, retErr = conn.Do("SET", key, value)
|
ret, retErr = conn.Do("SET", key, value)
|
||||||
} else {
|
} else {
|
||||||
ret, retErr = conn.Do("SET", key, value, "EX", ex)
|
ret, retErr = conn.Do("SET", key, value, "EX", expire)
|
||||||
}
|
}
|
||||||
|
|
||||||
if retErr != nil {
|
if retErr != nil {
|
||||||
@@ -262,6 +327,7 @@ func (slf *RedisModule) GetRedisStringJSON(key string, st interface{}) error {
|
|||||||
//Pipeline实现的原理是队列,而队列的原理是先进先出
|
//Pipeline实现的原理是队列,而队列的原理是先进先出
|
||||||
//示例:GetMuchRedisString(&[]string{"AAAABTEST1", "AAAABTEST2"})
|
//示例:GetMuchRedisString(&[]string{"AAAABTEST1", "AAAABTEST2"})
|
||||||
func (slf *RedisModule) GetMuchRedisString(keys []string) (retMap map[string]string, err error) {
|
func (slf *RedisModule) GetMuchRedisString(keys []string) (retMap map[string]string, err error) {
|
||||||
|
|
||||||
if len(keys) <= 0 {
|
if len(keys) <= 0 {
|
||||||
err = errors.New("Func[GetMuchRedisString] Keys Is Empty")
|
err = errors.New("Func[GetMuchRedisString] Keys Is Empty")
|
||||||
return
|
return
|
||||||
@@ -472,6 +538,7 @@ func (slf *RedisModule) GetRedisAllHashJSON(redisKey string) (map[string]string,
|
|||||||
|
|
||||||
//GetRedisHashValueByKey ...
|
//GetRedisHashValueByKey ...
|
||||||
func (slf *RedisModule) GetRedisHashValueByKey(redisKey string, fieldKey string) (string, error) {
|
func (slf *RedisModule) GetRedisHashValueByKey(redisKey string, fieldKey string) (string, error) {
|
||||||
|
|
||||||
if redisKey == "" || fieldKey == "" {
|
if redisKey == "" || fieldKey == "" {
|
||||||
return "", errors.New("Key Is Empty")
|
return "", errors.New("Key Is Empty")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestRedisModule(t *testing.T) {
|
func TestRedisModule(t *testing.T) {
|
||||||
|
|
||||||
var cfg ConfigRedis
|
var cfg ConfigRedis
|
||||||
var module RedisModule
|
var module RedisModule
|
||||||
|
|
||||||
@@ -18,7 +19,16 @@ func TestRedisModule(t *testing.T) {
|
|||||||
cfg.DbIndex = 15
|
cfg.DbIndex = 15
|
||||||
module.Init(&cfg)
|
module.Init(&cfg)
|
||||||
|
|
||||||
|
var retErr RetError
|
||||||
|
module.GoSetString("testkey", "testvalue", &retErr)
|
||||||
|
ret1, err1 := module.GetRedisString("testkey")
|
||||||
|
fmt.Print(ret1, err1, retErr.Get())
|
||||||
|
|
||||||
module.SetRedisHash("rediskey", "hashkey", "1111")
|
module.SetRedisHash("rediskey", "hashkey", "1111")
|
||||||
|
var mapTest map[string]string
|
||||||
|
mapTest = make(map[string]string)
|
||||||
ret, err := module.GetRedisHashValueByKey("rediskey", "hashkey")
|
ret, err := module.GetRedisHashValueByKey("rediskey", "hashkey")
|
||||||
|
|
||||||
|
fmt.Print(mapTest)
|
||||||
fmt.Print(ret, err)
|
fmt.Print(ret, err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user