使用 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 != nil
fmt.println("test", value)
// 自定義redis命令
cmd1 := client.do("get", "test")
client.process(cmd1)
test, err := cmd1.result()
if err != nil else
//使用管道 pipeline 獲取資料
_, err = client.setnx("test1", "value1", 10*time.second).result()
_, err = client.setnx("test2", "value2", 10*time.second).result()
_, err = client.setnx("test3", "value3", 10*time.second).result()
/*redis的pipeline功能的原理是 client通過一次性將多條redis命令發往redis server,減少了每條命令分別傳輸的io開銷。同時減少了系統呼叫的次數,因此提公升了整體的吞吐能力。
我們在主-從模式的redis中,pipeline功能應該用的很多,但是cluster模式下,估計還沒有幾個人用過。
我們知道 redis cluster 預設分配了 16384 個slot,當我們set乙個key 時,會用crc16演算法來取模得到所屬的slot,然後將這個key 分到雜湊槽區間的節點上,具體演算法就是:crc16(key) % 16384。如果我們使用pipeline功能,乙個批次中包含的多條命令,每條命令涉及的key可能屬於不同的slot
go-redis 為了解決這個問題, 分為3步
原始碼可以閱讀 defaultprocesspipeline
1) 將計算command 所屬的slot, 根據slot選擇合適的cluster node
2)將同乙個cluster node 的所有command,放在乙個批次中傳送(併發操作)
3)接收結果
*/ pipe := client.pipeline()
pipe.get("test1")
pipe.get("test2")
pipe.get("test3")
cmders, err := pipe.exec()
if err != nil
for _, cmder := range cmders
fmt.println("str", str) }}
//初始化鏈結
func redisinits() error)
pong, err := client.ping().result()
if(err != nil)
fmt.println(pong)
// output: pong return nil
}參考:
參考:
go實踐二十三 使用正則
使用 go run testregexp.go 執行該檔案即可 通過正則判斷是否匹配 regexp包中含有三個函式用來判斷是否匹配,如果匹配返回true,否則返回false func match pattern string,b byte matched bool,error error func ...
go實踐十五 使用redis快取操作普通佇列
目錄架構 http伺服器 redis 熱重啟的參考 下面說的是使用redis快取佇列 和 操作普通佇列fifo 先進先出 package model 普通佇列 使用先進先出fifo type normalqueue struct 佇列長度 func queue normalqueue length ...
Redis(十三)redis事務
redis作為乙個非關係型資料庫,其也是有事務操作的。redis 事務可以一次執行多個命令,並且帶有以下三個重要的保證 1 批量操作在傳送 exec 命令前被放入佇列快取。2 收到 exec 命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然被執行。3 在事務執行過程,其他客戶端提交的命令請...