Go操作Redis
这是我参与【第五届青训营】伴学笔记创作活动的第12天。
1.连接Redis:
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
fmt.Println("redis conn success")
defer c.Close()
}
2.String类型Set、Get操作:
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
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快照导致不能持久化。
- 解决方案:
- 运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。
3.String批量操作:
- MSet可以进行批量操作,无论是Set还是Get一样都是Mset即可完成
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
}
4.设置过期时间:
- "expire"可以用来设置过期时间(是以秒为单位)
defer c.Close()
_, err = c.Do("expire", "abc", 10)
if err != nil {
fmt.Println(err)
return
}
5.List队列操作:
- c.Do("lpush", "book_list", "abc", "ceg", 300)
- 将字符串abc,ceg放入到book_list这个队列当中去
- c.Do("lpop", "book_list")
- 弹出
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
}
6.Hash表
- c.Do("HSet", "books", "abc", 100)
- 可以将数据推送到Set里面
- c.Do("HGet", "books", "abc")
- 获取键值对
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
}
7.Redis连接池:
- pool = &redis.Pool
- 用来实例化一个连接池
- c := pool.Get()
- 从连接池,获取一个链接
var pool *redis.Pool
func init(){
pool = &redis.Pool{
MaxIdle:16,
MaxActive:0,
IdleTimeout:300,
Dial: func() (redis.Conn ,error){
return redis.Dial("tcp","localhost:6379")
},
}
}
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()
}