Redis佇列部份

2021-07-22 13:15:15 字數 2186 閱讀 5210

上篇用純go在本機模擬了下分布式佇列的東西。這裡補上redis佇列部份。

用redis做佇列有下面三個問題需解決:

1. 佇列構建

使用redis的rpush/lpop來解決

2. 引數傳遞/解析 

客戶端將josn引數存入redis,server端取出後解析還原。

3. 連線池

redigo支援redis連線池

下面**就是具體解決實現:

[cpp]view plain

copy

//redis做後台任務佇列

//將job放入佇列

r.enqueue()  

//依次取出兩個job

r.getjob()  

r.getjob()  

}  type redispool struct   

func newredispool(server, password string) (*redispool, error)   

pool := &redis.pool  

if password != ""   

}  return c, err  

},  

testonborrow: func(c redis.conn, t time.time) error ,  

}  return &redispool, nil  

}  type job struct  `json:"args"`  

}  //模擬客戶端

func (r *redispool) enqueue() error   

j.class = "mail"

j2 := &job{}  

j2.class = "log"

for _, v := range *job   

_, err = c.do("rpush", "queue", b)  

if err != nil   

}  fmt.println("[enqueue()] succeed!")  

return nil  

}  //模擬job server

func (r *redispool) getjob() error   

fmt.println("[getjob()] jobs count:", count)  

c := r.pool.get()  

defer c.close()  

for i := 0; i 

var j job  

decoder := json.newdecoder(bytes.newreader(reply.(byte)))  

if err := decoder.decode(&j); err != nil   

fmt.println("[getjob()] ", j.class, " : ", j.args)  

}  return nil  

}  func (r *redispool) queuedjobcount() (int, error)   

count, ok := lenqueue.(int64)  

if !ok   

return

int(count), nil  

}  /*

執行結果:

[enqueue()] succeed!

[getjob()] jobs count: 2

[getjob()]  mail  :  [[email protected]  body 2 true]

[getjob()]  log  :  [ccc.log ddd.log [222 333]]

[root@xclos src]#

*/     可以看到go已能取得引數。都是些最基礎的東西。

redis 佇列 redis 延時佇列

定時發公告 使用者下單30分鐘後未付款自動關閉訂單 使用者下單後延時簡訊提醒 延時關閉空閒客戶端連線 使用redis提供的有序資料結構zset,把過期時間戳作為score。public void produce string topic,string msg,date date 生產訊息 於 消費 ...

Redis訊息佇列

redis的訊息佇列使用簡單,沒有什麼配置,比activemq要輕量級太多,當然功能也比較簡單,如果只需要簡單的訂閱以及發布,可以考慮使用它。訂閱操作 命令為 subscribe channel channel 如 1 所示,即成功訂閱頻道 redis.blog 發布操作 命令為publish ch...

Redis 訊息佇列

訊息佇列,是在構建大型專案的時候 經常會用到的中間價系統,使用訊息佇列有很多好處,例如 1.實現各元件之間的松耦合。利用訊息系統可以使各個元件之間面向資料,而不是面向具體的介面。2.易於擴充套件。對於訊息系統而言,消費者和生產者都可以橫向擴充套件。提到佇列,很自然的就會想到redis的列表型別,可以...