Go語言開發中redis的使用詳解
前段時間因為忙一些其它的事情,分享的有些少,最近學習一下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","superWang","SEX","F",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",username) } }
4、刪除
func delFromDB(c redis.Conn) { _,err := c.Do("DEL","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","lisi") if err != nil { fmt.Println("redis set failed:",err) } _,"wangwu") if err != nil { fmt.Println("redis set failed:",err) } } //讀列表 func readListFromDB(c redis.Conn) { values,_ := redis.Values(c.Do("lrange","0","2")) fmt.Printf("count%d",len(values)) for _,v := range values { fmt.Println(string(v.([]byte))) } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。