真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語言版本的redis,go語言原本

golang 如何連接redis --- 2022-04-03

下面介紹golang如何連接redis服務端。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),康保企業(yè)網(wǎng)站建設(shè),康保品牌網(wǎng)站建設(shè),網(wǎng)站定制,康保網(wǎng)站建設(shè)報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,康保網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

1.golang連接redis

通過例子,我們知道主要通過Options配置redis的連接參數(shù),下面對Options參數(shù)進行詳細說明。

提示:go-redis包自帶了連接池,會自動維護redis連接,因此創(chuàng)建一次client即可,不要查詢一次redis就關(guān)閉client。

2.Options參數(shù)詳解

Go語言與Docker操作Redis

首選,如果之前使用過redis容器,我們需要先remove掉之前的容器

然后創(chuàng)建redis容器,并運行

進入redis容器中

接著我們通過 redis-cli 連接測試使用 redis 服務

setex指令 可以設(shè)置數(shù)據(jù)存在的時間, setex key second value

MSET 一次設(shè)置多個key-value

MGET一次獲取多個key-value

HGET

HGETALL

Hlen和hexist

Lpush 和 Lrange

Lpop和Rpop 從鏈表取出并移走數(shù)據(jù)

刪除鏈表所有數(shù)據(jù) DEL

字符串無序 不能重復

從連接池中Get出一個conn連接

golang redis事務 --- 2022-04-03

redis事務可以一次執(zhí)行多個命令, 并且?guī)в幸韵聝蓚€重要的保證:

事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執(zhí)行。事務在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷。

事務是一個原子操作:事務中的命令要么全部被執(zhí)行,要么全部都不執(zhí)行。

下面介紹golang redis事務用法。

go redis事務常用函數(shù):

TxPipeline - 以Pipeline的方式操作事務

Watch - redis樂觀鎖支持

1.TxPipeline

以Pipeline的方式操作事務

2.watch

redis樂觀鎖支持,可以通過watch監(jiān)聽一些Key, 如果這些key的值沒有被其他人改變的話,才可以提交事務。

golang-redis系列——返回值助手函數(shù)(二)

從上一節(jié)的內(nèi)容可知,Do() 和 Receive() 等方法的返回值,除了 error 外,是一個 interface{} 類型的返回值,因此當我們的復雜操作返回的不是基本數(shù)據(jù)類型時,就需要我們自己解析返回值,例如,當我們利用 HMGET 方法獲取一批返回值時,就需要對返回結(jié)果進行解析,具體如下:

由于返回值是多條數(shù)據(jù),因此需要先將 reply 轉(zhuǎn)成 []interface 類型,然后在遍歷結(jié)果時在分別轉(zhuǎn)成 []uint8 (byte數(shù)組), 最后再轉(zhuǎn)成 string 類型。

隨著我們操作復雜度,數(shù)據(jù)解析的工作量也會非常大,(lua 腳本的使用,會使結(jié)果的解析更為復雜,因為可能存在多種類型的結(jié)果一起返回的情況,lua 腳本相關(guān)的內(nèi)容會在下一節(jié)介紹)。

redigo 包中的返回值助手函數(shù)的存在,就是為了幫助我們完成這些枯燥繁瑣的數(shù)據(jù)解析過程。

返回值助手函數(shù)相關(guān)源碼路徑為 github.com/gomodule/redigo/redis/reply.go 提供的主要方法如下:

上述返回值助手函數(shù)的具體使用,應該依據(jù)具體的命令進行選擇。如果大家還記得上一節(jié)介紹的 Redis 基本數(shù)據(jù)類型,可能會有些疑問,對于 redis 來說,其數(shù)據(jù)據(jù)存儲本質(zhì)都是 []bytes, 為什么可以解析出 Int、int64、float等類型的數(shù)據(jù)呢?

我們以 Float64() 為例進行說明,具體源碼如下:

其實,返回值助手函數(shù)是將 []byte 類型的原始數(shù)據(jù),利用 strconv.ParseFloat(string(reply), 64) 轉(zhuǎn)換成了 float64類型,因此在我們使用過程中返回值助手函數(shù)的選擇,應該基于業(yè)務和實際存儲的數(shù)據(jù)格式為依據(jù)。我們以第一小節(jié)的示例為例,看返回值助手函數(shù)如何降低我們的工作量,具體如下:

除了使用返回值助手函數(shù)對上述固定結(jié)構(gòu)的結(jié)果進行解析外,redigo 包還提供了一個 Scan()函數(shù)用于解析自定義的復雜數(shù)據(jù)結(jié)構(gòu),我們依然以上一個示例進行說明,具體示例如下:

如果返回結(jié)果為結(jié)構(gòu)化切片,也可以使用 canSlice() 方法,從而簡化 loop 處理的部分,具體示例如下:

通過上述的示例,我們介紹了 scan 函數(shù)的基本用法,但是細心的同學可能會發(fā)現(xiàn)嗎,為什么數(shù)據(jù)寫入時,value 的類型為 []int64 但是讀取時只能按照 string 類型讀取呢。這是因為 Redis 底層存儲的數(shù)據(jù)本質(zhì)都是 string 類型,。 無論是 HMSET 還是 MSET 最終都只能按照 string 類型讀取,因為其本質(zhì)都是 hash 結(jié)構(gòu),不同之處僅在于 HMSET 是嵌套的 hash類型。 因此,[]int64 數(shù)據(jù)在寫入階段,就已經(jīng)被自動處理為 []byte,寫入 redis 之后,len 和 類型 屬性會丟失。

如果強行按照 []int64解析將出錯:

如果 value 必須以結(jié)構(gòu)化的數(shù)據(jù)存儲,那么可以提前對要寫入的數(shù)據(jù)進行編碼,例如 json、protobuf 等,取出后再進行解碼獲得原始數(shù)據(jù)。

如何在go語言中使用redis連接池

1.在創(chuàng)建連接池之后,起一個 go routine,每隔一段 idleTime 發(fā)送一個 PING 到 Redis server。其中,idleTime 略小于 Redis server 的 timeout 配置。

2.連接池初始化部分代碼如下:

p, err := pool.New("tcp", u.Host, concurrency) errHndlr(err) go func() { for { p.Cmd("PING") time.Sleep(idelTime * time.Second) } }()

3.使用 redis 傳輸數(shù)據(jù)部分代碼如下:

func redisDo(p *pool.Pool, cmd string, args ...interface{}) (reply *redis.Resp, err error) { reply = p.Cmd(cmd, args...) if err = reply.Err; err != nil { if err != io.EOF { Fatal.Println("redis", cmd, args, "err is", err) } } return }

4.其中,Radix.v2 連接池內(nèi)部進行了連接池內(nèi)連接的獲取和放回,代碼如下:

// Cmd automatically gets one client from the pool, executes the given command // (returning its result), and puts the client back in the pool func (p *Pool) Cmd(cmd string, args ...interface{}) *redis.Resp { c, err := p.Get() if err != nil { return redis.NewResp(err) } defer p.Put(c) return c.Cmd(cmd, args...) }

這樣,就有了系統(tǒng) keep alive 的機制,不會出現(xiàn) time out 的連接了,從 redis 連接池里面取出的連接都是可用的連接了??此坪唵蔚拇a,卻完美的解決了連接池里面超時連接的問題。同時,就算 Redis server 重啟等情況,也能保證連接自動重連。

GO語言使用 Redis數(shù)據(jù)庫

可以參考: windows環(huán)境下redis的安裝

啟動redis服務器:redis-server.exe redis.windows.conf

獲取包:

導入包

訪問:


分享題目:Go語言版本的redis,go語言原本
URL鏈接:http://weahome.cn/article/phiedj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部