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

Go~初学日记,连接和 *** 作Redis,第1张

文章目录 前言依赖常量建立连接基本String的get和set批量 *** 作设置过期时间List *** 作Hsah *** 作Redis连接池

前言

入门记录,简单笔记记录要点,详细请看官方文档。
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)
}
如果出现如下错误
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/995011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存