0
点赞
收藏
分享

微信扫一扫

Go~初学日记,连接和操作Redis

梯梯笔记 2022-04-13 阅读 72
golang

文章目录

前言

入门记录,简单笔记记录要点,详细请看官方文档。
https://pkg.go.dev/github.com/gomodule/redigo/redis

依赖

import (
	"fmt"
	"github.com/garyburd/redigo/redis"
)

常量

const (
	newWork = "tcp"
	address = "localhost:6379"
)

建立连接

var c redis.Conn

func init() {
	client, err := redis.Dial(newWork, address)
	if err != nil {
		fmt.Println("conn redis failed,", err)
		return
	}
	c = client
	fmt.Println("redis conn success")
}

基本String的get和set

func stringGetAndSet() {
	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)
}
  • 如果出现如下错误

Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。

  • 原因:

强制关闭Redis快照导致不能持久化。

  • 解决方案:

运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。

开启命令行新窗口 :

链接Redis,执行命令:

redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> config set stop-writes-on-bgsave-error no
    OK

至此程序可正常执行。

批量操作

func MOperation() {
	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)
	}
}

设置过期时间

func setWithExpire() {
	defer c.Close()
	// 10秒后过期
	_, err := c.Do("expire", "abc", 10)
	if err != nil {
		fmt.Println(err)
		return
	}
}

List操作

func listOperation() {
	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)
}

Hsah操作

func HashOperation() {
	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)
}

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(newWork,address)
		},
	}
}

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() //关闭连接池
}
举报

相关推荐

0 条评论