国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Go語言開發中redis的使用詳解

2020-04-01 18:55:45
字體:
來源:轉載
供稿:網友

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

一、理論知識

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

Redis 優勢

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

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

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

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

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

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

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

二、使用:

在開發過程中我們使用到了開源庫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

//寫jsonfunc 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")  }}//讀jsonfunc 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)))  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 孟津县| 乌拉特中旗| 慈溪市| 禄丰县| 米林县| 日照市| 洛阳市| 华容县| 兖州市| 北辰区| 吉隆县| 安岳县| 安塞县| 阳城县| 临颍县| 德昌县| 云阳县| 樟树市| 清水河县| 大庆市| 洛川县| 安阳市| 织金县| 包头市| 南川市| 南木林县| 茌平县| 剑川县| 农安县| 莱西市| 郧西县| 洛阳市| 银川市| 工布江达县| 班玛县| 南澳县| 中宁县| 安平县| 安达市| 扶沟县| 临海市|