go實踐十五 使用redis快取操作普通佇列

2021-09-25 15:13:13 字數 4694 閱讀 5873

目錄架構+http伺服器+redis+熱重啟的參考:

下面說的是使用redis快取佇列 和 操作普通佇列fifo(先進先出)

package model

/*********普通佇列 使用先進先出fifo *********/

type normalqueue struct

//佇列長度

func (queue *normalqueue) length() int

//插入佇列

func (queue *normalqueue) innormalqueue(value string) string

} //插入

return queue.list

}//排在第一的, 先出佇列

)//初始化路由

func initrouter(g *gin.engine)

//中介軟體

g.use(gin.recovery())

g.use(middleware.nocache)

g.use(middleware.options)

g.use(middleware.secure)

g.use(middlewares...)

//404處理

g.noroute(func(c *gin.context))

//健康檢查中介軟體

g.get("/",service.index)//主頁

g.get("/setredis",service.setredis) //設定redis

g.get("/getredis",service.getredis) //獲取redis

g.get("/inqueue",service.inqueue) //獲取佇列

g.get("/outqueue",service.outqueue) //出佇列

//列表資料的結構體

type resultlist struct

//設定redis客戶端構造體

func setrediscli(client *redis.client)

//首頁

func index(c *gin.context)

func setredis(c *gin.context)

_,err := cli.set(key,value,0).result();

if(err != nil)

results := "成功"

sendresponse(c,nil,results)

}func getredis(c *gin.context)

log.printf("key %+v\n",key)

results,err := cli.get(key).result();

if(err != nil)

log.printf("results %+v\n",results)

sendresponse(c,nil,results)

}func inqueue(c *gin.context)

//取出redis快取佇列

redisstr,err := cli.get("queuelist").result()

valueget := byte(redisstr) //佇列資料轉換為 byte

if err != nil

var redislist string

//json解析佇列資料

errshal := json.unmarshal(valueget, &redislist)

if errshal != nil

fmt.printf("redislist %+v\n",redislist)

//使用佇列模型 插入佇列

queue := model.normalqueue{}

queue.list = redislist //佇列資料賦值

list := queue.innormalqueue(value) //插入佇列

total := queue.length() //獲取佇列長度

//資料轉換成json 儲存到redis裡面

queuelist, _ := json.marshal(list)

_,err = cli.set("queuelist",queuelist,0).result() //儲存到redis裡面

if(err != nil)

"str %v",str)

//返回資料

var res inte***ce{}

res = resultlist

fmt.printf("res %+v\n",res)

sendresponse(c,nil,res)

}func outqueue(c *gin.context)

var redislist string

//json解析佇列資料

errshal := json.unmarshal(valueget, &redislist)

if errshal != nil

fmt.printf("redislist %+v\n",redislist)

//使用佇列模型 出佇列

queue := model.normalqueue{}

queue.list = redislist //佇列資料賦值

list := queue.outnormalqueue() //出佇列

total := queue.length() //獲取佇列長度//返回資料

//資料轉換成json 儲存到redis裡面

queuelist, _ := json.marshal(list)

_,err = cli.set("queuelist",queuelist,0).result() //儲存到redis裡面

參考:

go實踐十三 使用redis

使用 go run testcolly.go 執行該檔案即可 redis set 10秒生存時間 err client.setnx test value 10 time.second result if err nil redis get value client.get test if err n...

使用redis快取的實踐總結

使用場景一 高頻率使用但不頻繁更新的業務資料。由於不頻繁更新,所以可以在系統啟動時,從資料庫中載入,放入redis。如果更新,需重啟服務,當然這比較笨。更好的做法下面會列出。使用場景二 高頻率使用更新還算頻繁的業務資料。由於有一定頻率的更新,所以可以在使用者訪問時,查詢快取,如果沒有值,則從資料庫中...

Redis 快取穿透 快取擊穿 快取雪崩(十五)

前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資...