zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Golang操作Redis

RedisGolang 操作
2023-09-11 14:14:56 时间

redis 使用

使用第三方开源的 redis库:
github.com/garyburd/redigo/redis

命令行输入 :

PS E:\go_test>  go get github.com/garyburd/redigo/redis
go: downloading github.com/garyburd/redigo v1.6.4
go: module github.com/garyburd/redigo is deprecated: Use github.com/gomodule/redigo instead.
go: added github.com/garyburd/redigo v1.6.4
PS E:\go_test>

链接 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
	}

	fmt.Println("redis conn success")

	defer c.Close()
}
PS E:\go_test> go run .\main.go
redis conn success
PS E:\go_test>

String 类型 Set、Get 操作

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	// redis.DialDatabase(1),//dialOption参数可以配置选择数据库、连接密码、心跳检测等等
	c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
	if err != nil {
		fmt.Println("conn redis failed,", err)
		return
	}

	defer c.Close()
	_, err = c.Do("Set", "abc", 100)
	if err != nil {
		fmt.Println(err)
		return
	}

	r, err := redis.Int(c.Do("Get", "abc"))
	if err != nil {
		fmt.Println("get abc failed,", err)
		return
	}

	fmt.Println(r)
}

运行结果:

PS E:\go_test> go run .\main.go
100
PS E:\go_test>

String 批量操作

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
	if err != nil {
		fmt.Println("conn redis failed,", err)
		return
	}

	defer c.Close()
	_, err = c.Do("MSet", "abc", 100, "efg", 300)
	if err != nil {
		fmt.Println(err)
		return
	}

	r, err := redis.Ints(c.Do("MGet", "abc", "efg"))
	if err != nil {
		fmt.Println("get abc failed,", err)
		return
	}

	for _, v := range r {
		fmt.Println(v)
	}
}
PS E:\go_test> go run .\main.go
100
300
PS E:\go_test>

设置过期时间

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
	if err != nil {
		fmt.Println("conn redis failed,", err)
		return
	}

	defer c.Close()
	_, err = c.Do("expire", "abc", 10)
	if err != nil {
		fmt.Println(err)
		return
	}
}

List 队列操作

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
	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)
}

运行结果:

PS E:\go_test> go run .\main.go
300
PS E:\go_test>

Hash 表

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
	if err != nil {
		fmt.Println("conn redis failed,", err)
		return
	}

	defer c.Close()
	_, err = c.Do("HSet", "books", "abc", 100)
	if err != nil {
		fmt.Println(err)
		return
	}

	r, err := redis.Int(c.Do("HGet", "books", "abc"))
	if err != nil {
		fmt.Println("get abc failed,", err)
		return
	}

	fmt.Println(r)
}
PS E:\go_test> go run .\main.go
100
PS E:\go_test>

Redis 连接池

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

var pool *redis.Pool //创建redis连接池

func init() {
	pool = &redis.Pool{ //实例化一个连接池
		MaxIdle: 16, //最初的连接数量
		// MaxActive:1000000,    //最大连接数量
		MaxActive:   0,   //连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
		IdleTimeout: 300, //连接关闭时间 300秒 (300秒不使用自动关闭)
		Dial: func() (redis.Conn, error) { //要连接的redis数据库
			return redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
		},
	}
}

func main() {
	c := pool.Get() //从连接池,取一个链接
	defer c.Close() //函数运行结束 ,把连接放回连接池

	_, err := c.Do("Set", "abc", 200)
	if err != nil {
		fmt.Println(err)
		return
	}

	r, err := redis.Int(c.Do("Get", "abc"))
	if err != nil {
		fmt.Println("get abc faild :", err)
		return
	}
	fmt.Println(r)
	pool.Close() //关闭连接池
}
PS E:\go_test> go run .\main.go
200
PS E:\go_test>