最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年07月23日 10:12:19   作者:小歪子go  
這篇文章主要介紹了Go語言開發(fā)中redis的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

一、理論知識

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

Redis 優(yōu)勢

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

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

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

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

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

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

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

二、使用:

在開發(fā)過程中我們使用到了開源庫redis如下

github地址

https://github.com/garyburd/redigo

文檔地址:

http://godoc.org/github.com/garyburd/redigo/redis

1、數(shù)據(jù)庫的連接

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、列表操作,存入一組數(shù)據(jù)

//存列表
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)))
  }
}

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

相關文章

  • Linux環(huán)境下編譯并運行go項目的全過程

    Linux環(huán)境下編譯并運行go項目的全過程

    Go語言是Google的開源編程語言,廣泛應用于云計算、分布式系統(tǒng)開發(fā)等領域,在Linux上也有大量的應用場景,這篇文章主要給大家介紹了關于Linux環(huán)境下編譯并運行go項目的相關資料,需要的朋友可以參考下
    2023-11-11
  • Golang定時任務框架GoCron的源碼分析

    Golang定時任務框架GoCron的源碼分析

    本文主要介紹了Golang定時任務框架GoCron的源碼分析,原生的gocron存在一些問題,如任務列表維護不當、并發(fā)操作不可預測等,經過改進的gocron解決了這些問題,感興趣的可以了解一下
    2025-03-03
  • golang判斷net.Conn 是否已關閉的操作

    golang判斷net.Conn 是否已關閉的操作

    這篇文章主要介紹了golang判斷net.Conn 是否已關閉的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang教程之不可重入函數(shù)的實現(xiàn)方法

    Golang教程之不可重入函數(shù)的實現(xiàn)方法

    這篇文章主要給大家介紹了關于Golang教程之不可重入函數(shù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • Go語言中的流程控制結構和函數(shù)詳解

    Go語言中的流程控制結構和函數(shù)詳解

    這篇文章主要介紹了Go語言中的流程控制結構和函數(shù)詳解,本文詳細講解了if、goto、for、switch等控制語句,同時對函數(shù)相關知識做了講解,需要的朋友可以參考下
    2014-10-10
  • GO中高效的將int轉換為string的方法與源碼

    GO中高效的將int轉換為string的方法與源碼

    本文將從逐步介紹幾種在?Go?中將?int?轉換為?string?的常見方法,并重點剖析這幾種方法在性能上的特點,另外,還會重點介紹?FormatInt?高效的算法實現(xiàn),需要的朋友可以參考下
    2024-01-01
  • Golang 類型轉換的實現(xiàn)(斷言、強制、顯式類型)

    Golang 類型轉換的實現(xiàn)(斷言、強制、顯式類型)

    將一個值從一種類型轉換到另一種類型,便發(fā)生了類型轉換,在go可以分為斷言、強制、顯式類型轉換,本文就詳細的介紹一下這就幾種轉換方式,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • go?mod文件內容版本號簡單用法詳解

    go?mod文件內容版本號簡單用法詳解

    這篇文章主要為大家介紹了go?mod文件內容版本號簡單用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 超詳細Go語言中JSON處理技巧分享

    超詳細Go語言中JSON處理技巧分享

    這篇文章主要為大家總結了go語言中對JSON數(shù)據(jù)結構和結構體之間相互轉換問題及解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06
  • 簡單易用的Go逗號comma ok模式使用詳解

    簡單易用的Go逗號comma ok模式使用詳解

    這篇文章主要為大家介紹了簡單易用的Go逗號comma ok模式使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論

大名县| 随州市| 太原市| 阳山县| 濉溪县| 灌云县| 临洮县| 桑植县| 开原市| 子长县| 茌平县| 叶城县| 肥东县| 基隆市| 长宁区| 古丈县| 尉犁县| 武邑县| 连江县| 益阳市| 钟祥市| 淮阳县| 福州市| 调兵山市| 曲水县| 西盟| 邯郸市| 广平县| 和田县| 五原县| 时尚| 阳西县| 扶绥县| 土默特左旗| 门源| 黔西县| 星子县| 翁牛特旗| 瓮安县| 嘉荫县| 通江县|