入门记录,简单笔记记录要点,详细请看官方文档。
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() //关闭连接池
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)