这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
Redis 是一个高性能的键值存储系统,它可以用来作为缓存、队列等数据存储应用的后端。
安装 Redis
首先需要安装 Redis,可以在 Redis 的官网上下载相应的安装包进行安装,也可以使用包管理器进行安装。
安装 Redis Go 客户端
Golang 的 Redis 客户端有很多,其中最常用的是 go-redis 和 redigo。在本文中我们将使用 go-redis。
go get github.com/go-redis/redis
连接 Redis
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
defer client.Close()
pong, err := client.Ping().Result()
fmt.Println(pong, err)
}
在上面的代码中,我们创建了一个 Redis 客户端实例,并连接到本地 Redis 服务器。使用 Ping() 方法可以检查是否连接成功。
设置和获取键值对
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
defer client.Close()
err := client.Set("key", "value", 0).Err()
if err != nil {
panic(err)
}
val, err := client.Get("key").Result()
if err != nil {
panic(err)
}
fmt.Println("key", val)
}
在上面的代码中,我们使用 Set() 方法设置了一个键值对,键为 "key",值为 "value",并且设置了过期时间为 0(即不过期)。然后使用 Get() 方法获取键为 "key" 的值,并打印输出。
删除键值对
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
defer client.Close()
err := client.Del("key").Err()
if err != nil {
panic(err)
}
fmt.Println("key deleted")
}
在上面的代码中,我们使用 Del() 方法删除键为 "key" 的键值对。
批量操作
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
defer client.Close()
pipe := client.Pipeline()
pipe.Incr("counter")
pipe.Expire("counter", 0)
_, err := pipe.Exec()
if err != nil {
panic(err)
}
val, err := client.Get("counter").Result()
if err != nil {
panic(err)
}
fmt.Println("counter", val)
}
在上面的代码中,我们使用 Redis 的管道(Pipeline)实现批量操作。使用 Incr() 方法增加计数器的值,使用 Expire() 方法设置计数器的过期时间为 0(即不过期),然后使用 Exec() 方法执行管道中的所有命令。最后使用 Get() 方法获取计数器的值,并打印输出。
发布和订阅
Redis 还支持发布和订阅功能,可以用于实现消息队列等应用场景。下面是一个简单的发布和订阅的例子。
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
defer client.Close()
pubsub := client.Subscribe("mychannel")
defer pubsub.Close()
// 发布消息
err := client.Publish("mychannel", "hello world").Err()
if err != nil {
panic(err)
}
// 订阅消息
msg, err := pubsub.ReceiveMessage()
if err != nil {
panic(err)
}
fmt.Println(msg.Channel, msg.Payload)
}
在上面的代码中,我们使用 Subscribe() 方法订阅了一个名为 "mychannel" 的频道。使用 Publish() 方法发布了一条消息,消息内容为 "hello world"。然后使用 ReceiveMessage() 方法接收消息,并打印输出。
以上就是关于使用 Golang 访问 Redis 的一些笔记。需要注意的是,在实际使用中还需要考虑 Redis 的性能、并发、持久化等问题。