golang redis队列实现
记录一下
package redis
import (
"bytes"
"encoding/json"
"errors"
)
type Job struct {
JobId string `json:"job_id"`
Uid uint64 `json:"uid"`
Action string `json:"action"` //
Input string `json:"input"` //json
CreateTime int64 `json:"create_time"` //时间戳-毫秒
Retry int `json:"retry"` //重试次数
ErrCode int `json:"err_code"` //错误code
Message string `json:"message"` //错误信息
}
//入
func PushQueue(aliasName string, dbNode int, jobKey string, jobs []*Job) error {
if len(jobs) == 0 {
return errors.New("no jobs")
}
if jobKey == "" {
return errors.New("no job key")
}
pool, err := GetConnPool(aliasName, dbNode, true)
if err != nil {
return err
}
conn := pool.Get()
defer conn.Close()
for _, v := range jobs {
b, err := json.Marshal(v)
if err != nil {
return err
}
//入队列
_, err = conn.Do("rpush", jobKey, b)
if err != nil {
return err
}
}
return nil
}
//取
func PopQueue(aliasName string, dbNode int, jobKey string) (*Job, error) {
pool, err := GetConnPool(aliasName, dbNode, true)
if err != nil {
return nil, err
}
conn := pool.Get()
defer conn.Close()
reply, err := conn.Do("LPOP", jobKey)
if err != nil {
return nil, err
}
if reply != nil {
var j *Job
decoder := json.NewDecoder(bytes.NewReader(reply.([]byte)))
if err := decoder.Decode(&j); err != nil {
return nil, err
}
return j, nil
}
return nil, nil
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2019-11-14 Vue 定义全局变量
2019-11-14 vue 配置CDN加速