文章目录
前言
入门记录,简单笔记记录要点,详细请看官方文档。
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() //关闭连接池
}