Go語言開發(fā)中redis的使用

前段時間因為忙一些其它的事情沪袭,分享的有些少,最近學習一下redis在Go語言開發(fā)中的應用瘫想。

一蹋偏、理論知識

Redis是一個開源的、使用C語言編寫的饶火、支持網絡交互的鹏控、可基于內存也可持久化的Key-Value數據庫。

Redis 優(yōu)勢

性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 肤寝。

豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作当辐。

原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執(zhí)行鲤看。

豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性缘揪。

Redis與其他key-value存儲有什么不同?

Redis有著更為復雜的數據結構并且提供對他們的原子性操作义桂,這是一個不同于其他數據庫的進化路徑找筝。Redis的數據類型都是基于基本數據結構的同時對程序員透明,無需進行額外的抽象慷吊。

Redis運行在內存中但是可以持久化到磁盤袖裕,所以在對不同數據集進行高速讀寫時需要權衡內存,因為數據量不能大于硬件內存溉瓶。在內存數據庫方面的另一個優(yōu)點是急鳄,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單堰酿,這樣Redis可以做很多內部復雜性很強的事情疾宏。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的胞锰,因為他們并不需要進行隨機訪問灾锯。

二、使用:

在開發(fā)過程中我們使用到了開源庫redis如下
github地址
https://github.com/garyburd/redigo
文檔地址:
http://godoc.org/github.com/garyburd/redigo/redis

1嗅榕、數據庫的連接

func connDB() (c redis.Conn, err error) {
    db, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println("Connect to redis error", err)
        return
    }
    return db, err
}

2顺饮、寫入

func saveToDB(c redis.Conn) {
    _, err := c.Do("SET", "name", "qiuqiu", "EX", "50")
    if err != nil {
        fmt.Println("redis set failed:", err)
    } else {
        fmt.Println("save success")
    }
}

批量寫入
_, err := c.Do("MSET", "name", "superWang", "SEX", "F", "EX", "50")
    if err != nil {
        fmt.Println("redis set failed:", err)
    } else {
        fmt.Println("save success")
    }

tips:EX是這個值的過期時間

3、讀取

func readFromDB(c redis.Conn) {
    username, err := redis.String(c.Do("GET", "name"))
    if err != nil {
        fmt.Println("redis get failed:", err)
    } else {
        fmt.Printf("Get mykey: %v \n", username)
    }

}
批量讀取
func readFromDB(c redis.Conn) {
    username, err := redis.Strings(c.Do("MGET", "SEX", "name"))
    if err != nil {
        fmt.Println("redis get failed:", err)
    } else {
        fmt.Printf("Get mykey: %v \n", username)
    }

}

4凌那、刪除

func delFromDB(c redis.Conn) {
    _, err := c.Do("DEL", "name", "SEX")
    if err != nil {
        fmt.Println("redis delete failed:", err)
    } else {
        fmt.Println("delete success")
    }
}

5兼雄、設置keys 過期時間
在寫入的時候如果設置了EX的時間,則當前的key過期時間為設置時間帽蝶,不設置則當前的key永久有效

6赦肋、讀寫json到redis

//寫json
func saveJsonDataToDB(c redis.Conn) {
    imap := map[string]string{"name": "waiwaigo", "phone": "13498739038"}
    value, _ := json.Marshal(imap)
    n, err := c.Do("SETNX", "jsonkey", value)
    if err != nil {
        fmt.Println(err)
    }
    if n == int64(1) {
        fmt.Println("success")
    }
}

//讀json
func readJsonFromDB(c redis.Conn) {
    var imapGet map[string]string
    valueGet, err := redis.Bytes(c.Do("GET", "jsonkey"))
    if err != nil {
        fmt.Println(err)
    }

    errShal := json.Unmarshal(valueGet, &imapGet)
    if errShal != nil {
        fmt.Println(err)
    }
    fmt.Println(imapGet["name"])
    fmt.Println(imapGet["phone"])
}

7、列表操作,存入一組數據
//存列表

func saveListToDB(c redis.Conn) {
    _, err := c.Do("lpush", "username", "zhangsan")
    if err != nil {
        fmt.Println("redis set failed:", err)
    }

    _, err = c.Do("lpush", "username", "lisi")
    if err != nil {
        fmt.Println("redis set failed:", err)
    }
    _, err = c.Do("lpush", "username", "wangwu")
    if err != nil {
        fmt.Println("redis set failed:", err)
    }
}

//讀列表
func readListFromDB(c redis.Conn) {
    values, _ := redis.Values(c.Do("lrange", "username", "0", "2"))
    fmt.Printf("count%d", len(values))
    for _, v := range values {
        fmt.Println(string(v.([]byte)))
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末佃乘,一起剝皮案震驚了整個濱河市囱井,隨后出現的幾起案子,更是在濱河造成了極大的恐慌趣避,老刑警劉巖庞呕,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異程帕,居然都是意外死亡住练,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門愁拭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讲逛,“玉大人,你說我怎么就攤上這事岭埠≌祷欤” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵枫攀,是天一觀的道長括饶。 經常有香客問我,道長来涨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任启盛,我火速辦了婚禮蹦掐,結果婚禮上,老公的妹妹穿的比我還像新娘僵闯。我一直安慰自己卧抗,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布鳖粟。 她就那樣靜靜地躺著社裆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪向图。 梳的紋絲不亂的頭發(fā)上泳秀,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音榄攀,去河邊找鬼嗜傅。 笑死,一個胖子當著我的面吹牛檩赢,可吹牛的內容都是我干的吕嘀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偶房!你這毒婦竟也來了趁曼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤棕洋,失蹤者是張志新(化名)和其女友劉穎挡闰,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體拍冠,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡尿这,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了庆杜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片射众。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晃财,靈堂內的尸體忽然破棺而出叨橱,到底是詐尸還是另有隱情,我是刑警寧澤断盛,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布罗洗,位于F島的核電站,受9級特大地震影響钢猛,放射性物質發(fā)生泄漏伙菜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一命迈、第九天 我趴在偏房一處隱蔽的房頂上張望贩绕。 院中可真熱鬧,春花似錦壶愤、人聲如沸淑倾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娇哆。三九已至,卻和暖如春勃救,著一層夾襖步出監(jiān)牢的瞬間碍讨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工剪芥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垄开,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓税肪,卻偏偏與公主長得像溉躲,于是被迫代替她去往敵國和親榜田。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容

  • 【本教程目錄】 1.redis是什么2.redis的作者3.誰在使用redis4.學會安裝redis5.學會啟動r...
    徐猿猿閱讀 1,869評論 0 35
  • 轉載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,452評論 0 82
  • Redis是啥 Redis是一個開源的key-value存儲系統(tǒng)锻梳,由于擁有豐富的數據結構箭券,又被其作者戲稱為數據結構...
    一凡呀閱讀 1,174評論 0 5
  • /*div{ border: 1px solid red; width:400px; padding: 20px;...
    DRBIN閱讀 310評論 0 0
  • 1.F51我是新生 還依稀記得作為準新生時,每天守候翻轉課堂疑枯,每天的等待和守候成了我生命的一部分辩块。到了F51,才知...
    笨笨ym閱讀 264評論 0 2