赞
踩
最近工作中有使用到通过Go语言操作Redis相关内容,特此记录便于日后查阅。
1、获取Golang的redis第三方api
$ git clone https://github.com/garyburd/redigo.git
2、获取redis连接 & Set/Get接口
- package main
-
- import (
- "fmt"
- "github.com/garyburd/redigo/redis" // 引入redis包
- )
-
- func main() {
-
- // 通过go向redis写入数据和读取数据
- // 1.连接到redis
- conn, err := redis.Dial("tcp", "127.0.0.1:6379")
- if err != nil {
- fmt.Println("redis connect failed. err = ", err)
- return
- }
- defer conn.Close() //关闭连接
-
- // 2.通过go向redis写入数据
- _, err = conn.Do("Set", "name", "tomjerry")
- if err != nil {
- fmt.Println("Set err = ", err)
- return
- }
-
- // 3.从redis中读取数据
- // 由于返回的r是一个interface{},故要转成字符串
- r, err := redis.String(conn.Do("Get", "name"))
- if err != nil {
- fmt.Println("Get err = ", err)
- return
- }
- fmt.Println("操作ok. name =", r) // 操作ok. name = tomjerry
- }
3、批量HMSet/HMGet
- package main
-
- import (
- "fmt"
- "github.com/garyburd/redigo/redis" // 引入redis包
- )
-
- func main() {
-
- // 通过go向redis写入数据和读取数据
- // 1.连接到redis
- conn, err := redis.Dial("tcp", "127.0.0.1:6379")
- if err != nil {
- fmt.Println("redis connect failed. err = ", err)
- return
- }
- defer conn.Close() //关闭连接
-
- // 2.通过go向redis写入数据
- _, err = conn.Do("HMSet", "user01", "name", "jack", "age", 20)
- if err != nil {
- fmt.Println("HMSet err = ", err)
- return
- }
-
- // 3.从redis中读取数据
- // 由于返回的r是一个多类型的变量,故需要用redis.Strings()
- r, err := redis.Strings(conn.Do("HMGet", "user01", "name", "age"))
- if err != nil {
- fmt.Println("HMGet err = ", err)
- return
- }
- // 遍历结果
- for i, v := range r {
- fmt.Printf("r[%d]=%v\n", i, v)
- }
- /*
- r[0]=jack
- r[1]=20
- */
- }
4、设置数据有效时间
- _, err = conn.Do("MSet", "name01", "RSQ", "name02", "Tom")
- if err != nil {
- fmt.Println("HMSet err = ", err)
- return
- }
- // 设置超时时间
- _, err = conn.Do("expire", "name01", 10)
- if err != nil {
- fmt.Println("Set Expire err = ", err)
- return
- }
5、操作List
- // 1.通过go向redis写入数据
- _, err = conn.Do("Lpush", "herolist", "no1:宋江", 30, "no2:吴淞", 40)
- if err != nil {
- fmt.Println("Lpush err = ", err)
- return
- }
-
- // 2.从redis中读取数据
- r, err = redis.String(conn.Do("rpop", "herolist"))
- if err != nil {
- fmt.Println("rpop err = ", err)
- return
- }
6、redis连接池
- package main
-
- import (
- "fmt"
- "github.com/garyburd/redigo/redis"
- )
- // 定义一个全局的pool
- var pool *redis.Pool
-
- // 创建连接池
- func init() {
- pool = &redis.Pool{
- MaxIdle: 8, // 表示最大空闲连接数
- MaxActive: 0, // 表示和数据库的最大连接数,0表示没有限制
- IdleTimeout: 100, // 最大空闲时间
- Dial: func() (redis.Conn, error) { // 初始化连接的代码,连接哪个ip的redis
- return redis.Dial("tcp", "localhost:6379")
- },
- }
- }
-
- func main() {
-
- conn := pool.Get() // 从连接池中取出一个连接
- defer conn.Close() // 关闭连接池,一旦关闭连接池,就不能从连接池再取出连接
-
- _, err := conn.Do("set", "car", "BBB")
- if err != nil {
- fmt.Println("conn.Do err=", err)
- return
- }
-
- r, err := redis.String(conn.Do("Get", "car"))
- if err != nil {
- fmt.Println("read Data err=", err)
- return
- }
-
- fmt.Println("r=", r)
- // 如果要从pool池中取出连接,一定要保证连接池是没有关闭的
-
- }
-
7、redis操作实战
- Monster信息[name, age, skill]
- 通过终端输入三个monster的信息,使用golang操作redis,存放到redis中[用hash数据类型]
- 遍历出所有的Monster信息,并显示在终端
- 保存monster可以使用hash数据类型,遍历时先取出所有的keys,比如keys monster*
- package main
-
- import (
- "fmt"
- "github.com/garyburd/redigo/redis"
- )
-
- type Monster struct {
- Name string
- Age int
- Skill string
- }
-
- func Process(name string, age int, skill string) {
-
- // 1.连接redis
- conn, err := redis.Dial("tcp", "127.0.0.1:6379")
- if err != nil {
- fmt.Println("conn err = ", err)
- return
- }
- defer conn.Close()
-
- // 2.往redis数据库写入数据
- _, err = conn.Do("HMset", "monster", "name", name, "age", age, "skill", skill)
- if err != nil {
- fmt.Println("write data err = ", err)
- return
- }
-
- // 3.从redis中读取数据
- r, err := redis.Strings(conn.Do("HMget", "monster", "name", "age", "skill"))
- if err != nil {
- fmt.Println("read data err = ", err)
- return
- }
- for i, v := range r {
- fmt.Printf("r[%d]=%v\n", i, v)
- }
-
- }
-
- func main() {
-
- // 定义结构体实例
- var monster Monster
- fmt.Println("请输入monster的Name:")
- fmt.Scanln(&monster.Name)
- fmt.Println("请输入monster的Age:")
- fmt.Scanln(&monster.Age)
- fmt.Println("请输入monster的Skill:")
- fmt.Scanln(&monster.Skill)
-
- Process(monster.Name, monster.Age, monster.Skill)
-
- }
到此 Golang语言操作Redis介绍完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。