第六单元 go操作redis 一、redis介绍 二、go redis使用 一、redis介绍 redis是KV结构的NOsql数据库 redis可以作为缓存使用,减少DB的负载 redis常用数据类型: 字符串:主要用于单一的字符串数据存储 哈希:主要存储对象数据的,比如:点赞,评论,收藏,关注 列表:主要于消息中间件,比如:解耦,肖峰等 集合:主要用于共同好友,粉丝 有序集合:主要用于排行榜 二、go redis使用 1.go 连接redis redis.Dial("tcp", "redis主机地址:端口号") package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", "localhost:6379") //redis连接 if err != nil { fmt.Println("conn redis failed,", err) return } fmt.Println("redis conn success") defer c.Close() } 2.redis字符串操作 package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("conn redis failed,", err) return } defer c.Close() _, err = c.Do("Set", "key", 100) if err != nil { fmt.Println(err) return } r, err := redis.Int(c.Do("Get", "key")) if err != nil { fmt.Println("get abc failed,", err) return } fmt.Println(r) } 3. 字符串批量操作 package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("conn redis failed,", err) return } defer c.Close() _, err = c.Do("MSet", "var1", 100, "var2", 300, "var3", 400) if err != nil { fmt.Println(err) return } r, err := redis.Ints(c.Do("MGet", "var1", "var2", "var3")) if err != nil { fmt.Println("get abc failed,", err) return } for _, v := range r { fmt.Println(v) } } 4.设置过期时间 用法:c.Do("expire", key, 秒数) c.Do("expire", "var1", 10) 代码示例 package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("conn redis failed,", err) return } defer c.Close() _, err = c.Do("expire", "var2", 10) if err != nil { fmt.Println(err) return } } 5.LIST操作 package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("conn redis failed,", err) return } defer c.Close() // _, err = c.Do("lpush", "book_list", "abc", "ceg", 300) // if err != nil { // fmt.Println(err) // return // } r, err := redis.String(c.Do("lpop", "book_list")) if err != nil { fmt.Println("get abc failed,", err) return } fmt.Println(r) } 6.哈希操作 package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("conn redis failed,", err) return } defer c.Close() _, err = c.Do("HSet", "books", "name", "三国") if err != nil { fmt.Println(err) return } r, err := redis.String(c.Do("HGet", "books", "name")) if err != nil { fmt.Println("get abc failed,", err) return } fmt.Println(r) }