Redis是什么
Redis(全称为Remote Dictionary Server)是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。
Redis 支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构提供了丰富的操作命令,使得开发者可以方便地处理各种数据需求。此外,Redis 还提供了两种持久化方式,即快照(Snapshotting)和日志追加(Append-only file,AOF)。快照方式将 Redis 内存数据以二进制格式写入磁盘,而 AOF 则通过追加记录 Redis 的操作命令来实现持久化。
Redis 还支持发布/订阅模式,可以用作消息代理。发布者将消息发送到指定的频道,订阅者则可以接收和处理这些消息。这种模式在构建实时通信、事件驱动系统和消息队列等场景中非常有用。此外,Redis 还可以通过主从复制和分片来实现数据的分布式存储和高可用性。主从复制可以将数据复制到多个从节点,实现读写分离和数据备份。而分片则可以将数据分布在多个 Redis 节点上,实现横向扩展和负载均衡。
类似于python github.com/go-redis/redis库提供了丰富的方法和命令,以满足各种Redis操作的需求
使用redis,最初始的步骤就是建立redis连接/连接池,以便后续使用: 相关的代码如下:
package main
import (
"fmt"
"time"
"github.com/go-redis/redis"
)
func main() {
// 创建Redis客户端
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis服务器地址和端口
Password: "", // Redis密码(如果有的话)
DB: 0, // Redis数据库索引
})
// 测试连接
pong, err := client.Ping().Result()
fmt.Println(pong, err)
从使用 GORM(Go 的 ORM 库)连接数据库,实现增删改查 | 青训营我们不难得出,一个数据库最基本的操作就是增删改查
设置键值对,并设置过期时间
err = client.Set("mykey", "myvalue", 5*time.Minute).Err() if err != nil { fmt.Println(err)
获取键对应的值
value, err := client.Get("mykey").Result() if err != nil { fmt.Println(err) } else { fmt.Println("mykey:", value) }
判断键是否存在
exists, err := client.Exists("mykey").Result() if err != nil { fmt.Println(err) } else { fmt.Println("mykey exists:", exists) }
同时也有下列用法
// 批量获取键对应的值
values, err := client.MGet("key1", "key2").Result()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Values:")
for i, v := range values {
fmt.Printf("key%d: %v\n", i+1, v)
}
}
// 使用管道(Pipeline)批量执行命令
pipe := client.Pipeline()
incr := pipe.Incr("pipeline_counter")
pipe.Expire("pipeline_counter", 5*time.Minute)
_, err = pipe.Exec()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Pipeline Counter:", incr.Val())
}
// 关闭连接
err = client.Close()
if err != nil {
fmt.Println(err)
}
}