栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

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

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
    • 前言
    • 依赖
    • 常量
    • 建立连接
    • 基本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() //关闭连接池
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906719.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号