go redis之redigo的使用
本文主要介紹了go redis之redigo的使用,分享給大家,具體如下:
安裝
go-redis 三方庫為我們封裝了很多函數(shù)來執(zhí)行 Redis 命令,而 redigo 三方庫只有一個(gè) Do 函數(shù)執(zhí)行 Redis 命令,更接近使用 redis-cli 操作 Redis。
go-redis 支持連接哨兵及集群模式的Redis
go get github.com/gomodule/redigo go get github.com/go-redis/redis/v8
鏈接Redis
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
fmt.Println("redis conn success")
defer c.Close()
}String類型操作
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("Set", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.Int(c.Do("Get", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? fmt.Println(r)
}func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("MSet", "abc", 100, "efg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.Ints(c.Do("MGet", "abc", "efg"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? for _, v := range r {
? ? ? ? fmt.Println(v)
? ? }
}設(shè)置過期時(shí)間
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("expire", "abc", 10)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
}
----------------------------
或者這樣也行
do, err := client.Do("set", "name", "1111","EX",5)List操作
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("lpush", "book_list", "abc", "ceg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.String(c.Do("lpop", "book_list"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? fmt.Println(r)
}Hash表
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }
? ? defer c.Close()
? ? _, err = c.Do("HSet", "books", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
? ? r, err := redis.Int(c.Do("HGet", "books", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }
? ? fmt.Println(r)
}Redis連接池
var pool *redis.Pool ?//創(chuàng)建redis連接池
func init(){
? ? pool = &redis.Pool{ ? ? //實(shí)例化一個(gè)連接池
? ? ? ? MaxIdle:16, ? ?//最初的連接數(shù)量
? ? ? ? // MaxActive:1000000, ? ?//最大連接數(shù)量
? ? ? ? MaxActive:0, ? ?//連接池最大連接數(shù)量,不確定可以用0(0表示自動(dòng)定義),按需分配
? ? ? ? IdleTimeout:300, ? ?//連接關(guān)閉時(shí)間 300秒 (300秒不使用自動(dòng)關(guān)閉) ? ?
? ? ? ? Dial: func() (redis.Conn ,error){ ? ? //要連接的redis數(shù)據(jù)庫
? ? ? ? ? ? return redis.Dial("tcp","localhost:6379")
? ? ? ? },
? ? }
}
func main(){
? ? c := pool.Get() //從連接池,取一個(gè)鏈接
? ? defer c.Close() //函數(shù)運(yùn)行結(jié)束 ,把連接放回連接池
? ? ? ? _,err := c.Do("Set","abc",200)
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println(err)
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? r,err := redis.Int(c.Do("Get","abc"))
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println("get abc faild :",err)
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? fmt.Println(r)
? ? ? ? pool.Close() //關(guān)閉連接池
}到此這篇關(guān)于go redis之redigo的使用的文章就介紹到這了,更多相關(guān)go redis redigo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Golang中g(shù)oroutine執(zhí)行速度的問題
這篇文章主要介紹了解決Golang中g(shù)oroutine執(zhí)行速度的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-05-05
gorm golang 并發(fā)連接數(shù)據(jù)庫報(bào)錯(cuò)的解決方法
今天小編就為大家分享一篇gorm golang 并發(fā)連接數(shù)據(jù)庫報(bào)錯(cuò)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
使用Golang實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析
在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)數(shù)據(jù)包是信息傳遞的基本單位,抓包是一種監(jiān)控和分析網(wǎng)絡(luò)流量的方法,用于獲取網(wǎng)絡(luò)數(shù)據(jù)包并對(duì)其進(jìn)行分析,本文將介紹如何使用Golang實(shí)現(xiàn)抓包功能,包括網(wǎng)絡(luò)數(shù)據(jù)包捕獲和數(shù)據(jù)包分析,需要的朋友可以參考下2023-11-11
Golang Map實(shí)現(xiàn)賦值和擴(kuò)容的示例代碼
這篇文章主要介紹了Golang Map實(shí)現(xiàn)賦值和擴(kuò)容的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系解析
這篇文章主要為大家介紹了Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

