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地址
⽂档地址:
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": "134********"}
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 {
redis支持的数据结构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)))
}
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。