首页 > 数据库 >golang redis队列实现

golang redis队列实现

时间:2022-11-14 14:01:06浏览次数:34  
标签:return err nil 队列 redis golang json conn string

记录一下

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

}


标签:return,err,nil,队列,redis,golang,json,conn,string
From: https://www.cnblogs.com/already/p/16888828.html

相关文章

  • Queue队列 Stack栈
    Queue先进先出,相当于做核酸排队。//创建队列Queue<string>排队做核酸=newQueue<string>();//入队排队做核酸.Enqueue("张三");排队做核酸.Enqueue("李四");排......
  • Nodejs+Redis实现简易消息队列
    前言消息队列是存储数据的一个中间件,可以理解为一个容器。生产者生产消息投递到队列中,消费者可以拉取消息进行消费,如果消费者目前没有消费的打算,则消息队列会保留消息,直......
  • 并发编程6 锁&进程&队列
    1.进程的其他方法2.验证进程空间隔离和守护进程3.孤儿进程和僵尸进程4.锁for循环加join数据共享5.进程队列的简单应用6.通过队列实现进程间的通信7.生产者消费者模型及Queu......
  • 一些网络编程方面的总结,以及redis、memcache、nginx组件的一些介绍
    网络编程主要关注的一些问题主要关注3个方面的问题连接的建立连接的断开消息的发送和到达连接的建立主要分为两种情况:服务器处理接受客户端的连接;服务端作为客户......
  • docker 搭建redis 集群
    一、创建6个redis节点的配置文件bind0.0.0.0port6381databases1save36001save300100save6010000dbfilenamedump6381.rdbdir./appendonlyyesa......
  • leetcode622. 设计循环队列
    题目设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队......
  • 阿里开源 Redis 数据迁移工具
    今天要推荐一个阿里巴巴开源工具redis-shake,一个Redis的数据迁移和清洗工具,工具使用起来比较简单,也经历过大厂的认证,正确性和稳定性都有保障。 Redis实例迁移到另一......
  • golang处理时区
    很多Golang初学者都不知道怎么来处理时区问题.这篇文章将解释清楚一下两个问题:怎么把带时区的时间保存到数据库?在Go语言中怎么解析带时区的时间?1.数据库时区(Time......
  • 《Linux内核设计与实现》内核数据结构6.2队列 P78-81
    队列与堆栈队列只允许在队列的前端(front,队头)进行删除操作,而在队列的后端(rear,队尾)进行插入操作。当队列中没有元素时,即front=rear,称为空队列。在队列中插入一个队列元素称......
  • 【Azure Redis 缓存】Redis 连接失败
    问题描述AzureRedis出现连接失败,过一会儿后,又能自动恢复。 问题解答其实,因为AzureRedis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的......