Redis的安装
Windows版本
1、下载redis压缩包
GITHUB下载地址:https://github.com/tporadowski/redis/releases
也可以用官网下载地址: https://redis.io/
下面以github地址为例。
2、解压redis文件
将下载的redis压缩包解压
可以看到以下内容

3、启动redis临时服务
在解压路径下,输入cmd按回车键,打开终端
# 使用默认配置启动
redis-server.exe
# 或指定配置文件启动(推荐)
redis-server.exe redis.conf
Liunx版本
Ubuntu
# 1. 安装 Redis 服务器
sudo apt install -y redis-server
# 2. 启动 Redis 服务
sudo systemctl start redis-server
# 3. 设置开机自启动(虚拟机重启后自动运行)
sudo systemctl enable redis-server
# 4. 检查 Redis 运行状态(出现 active (running) 表示成功)
sudo systemctl status redis-serve
centos
# 1. 安装 EPEL 仓库(若未安装)
sudo dnf install -y epel-release
# 2. 安装 Redis
sudo dnf install -y redis
# 3. 启动 Redis 服务
sudo systemctl start redis
# 4. 设置开机自启动
sudo systemctl enable redis
# 5. 检查运行状态
sudo systemctl status redis
快速入门
redis是目前使用最广的k/v数据库,基本上各大项目都会使用,go-redis是golang操作redis的库,也是目前使用最多的库之一。
1. 入门案例
以windows为例
写入门案例之前,需要先启动一个redis:
在本机启动一个单机redis服务端,连接地址为localhost:6379
安装go-redis
//redis 6
go get github.com/go-redis/redis/v8
//redis 7
go get github.com/go-redis/redis/v9
连接redis
import "github.com/go-redis/redis/v8"
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
简单实例
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
}
func main() {
ctx := context.Background()
//0代表永不过期
err := rdb.Set(ctx, "gorediskey", "goredisvalue", 0).Err()
if err != nil {
panic(err)
}
value, err := rdb.Get(ctx, "gorediskey").Result()
if err != nil {
panic(err)
}
fmt.Println("gorediskey", value)
//或者
val, err := rdb.Do(ctx, "get", "gorediskey").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("gorediskey 不存在")
return
}
panic(err)
}
fmt.Println("do operator : gorediskey", val.(string))
}
代码功能概述
这段Go代码演示了如何使用go-redis库与Redis数据库进行交互,主要实现了设置键值对和读取键值对的操作。
包导入与初始化
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
导入必要的包:context用于超时控制,fmt用于格式化输出,go-redis/redis/v8是Redis客户端库。
var rdb *redis.Client
func init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // 无密码
DB: 0, // 默认数据库
})
}
初始化全局Redis客户端rdb,连接到本地的Redis服务(默认端口6379),使用默认数据库(DB 0)且无密码。
主函数逻辑
ctx := context.Background()
创建空的上下文对象,用于后续的Redis操作。
err := rdb.Set(ctx, "gorediskey", "goredisvalue", 0).Err()
if err != nil {
panic(err)
}
使用Set方法向Redis写入键值对:
"gorediskey"为键"goredisvalue"为值0表示永不过期 错误时触发panic
value, err := rdb.Get(ctx, "gorediskey").Result()
if err != nil {
panic(err)
}
fmt.Println("gorediskey", value)
使用Get方法读取键"gorediskey"的值,打印结果。错误时触发panic。
val, err := rdb.Do(ctx, "get", "gorediskey").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("gorediskey 不存在")
return
}
panic(err)
}
fmt.Println("do operator : gorediskey", val.(string))
使用通用的Do方法执行Redis命令:
"get"指定操作类型"gorediskey"为操作的键- 处理键不存在的特殊错误
redis.Nil - 类型断言将结果转为字符串后打印
关键点说明
- 连接配置:代码连接的是本地Redis,生产环境需修改
Addr为实际地址。 - 错误处理:区分了常规错误和键不存在的特殊场景。
- 两种读取方式:
Get是封装好的方法,Do是通用方法可执行任意Redis命令。 - 上下文使用:
context.Background()创建空上下文,实际项目可能需要添加超时控制。
这段代码完整展示了Go语言通过go-redis库操作Redis的基本流程,适合作为入门参考。
2. 连接设置
type Options struct {
// 网络类型:[ tcp , unix ]
// 默认是 tcp
Network string
// host:port 地址
Addr string
// 要使用的 TLS 配置。 当设置 TLS 时将协商。
TLSConfig *tls.Config
//创建一个新的连接,优先于Newwork和Addr选项
Dialer func(ctx context.Context, network, addr string) (net.Conn, error)
// 新建一个redis连接的时候,会回调这个函数
OnConnect func(ctx context.Context, cn *Conn) error
// 当连接到使用 Redis ACL 系统的 Redis 6.0 或更高版本的实例时,
// 使用指定的 用户名 对当前连接进行身份验证 (ACL 列表中定义的连接之一)。
Username string
// 可选密码。
// 必须与 requirepass 服务器配置选项中指定的密码(如果连接到 Redis 5.0 或更低版本的实例)
// 或 连接到使用 Redis ACL 系统的 Redis 6.0 或更高版本的实例时的用户密码 匹配。
Password string
// 连接到服务器后要选择的数据库。
DB int
// ====== 重试、退避时间======
// 放弃前的最大重试次数。
// 默认是 3 次重试; -1(非 0)禁用重试。
MaxRetries int
// 每次重试之间的最小退避。
// 默认为 8 毫秒; -1 禁用退避。
MinRetryBackoff time.Duration
// 每次重试之间的最大退避。
// 默认为 512 毫秒; -1 禁用退避。
MaxRetryBackoff time.Duration
// ======连接超时、读超时、写超时======
// 建立新连接的拨号超时。
// 默认为 5 秒。
DialTimeout time.Duration
// 套接字读取超时。
// 如果达到,命令将失败并超时而不是阻塞。
// 使用值 -1 表示无超时,使用 0 表示默认值。
// 默认为 3 秒。
ReadTimeout time.Duration
// 套接字写入超时。
// 如果达到,命令将失败并超时而不是阻塞。
// 默认为 ReadTimeout。
WriteTimeout time.Duration
// 连接池的类型。
// FIFO 池为 true,LIFO 池为 false。
// 请注意,与 lifo 相比,fifo 的开销更高。
PoolFIFO bool
// 最大套接字连接数。
// 默认为每个可用 CPU 10 个连接,由 runtime.GOMAXPROCS 报告。
PoolSize int
// 建立新连接缓慢时有用的最小空闲连接数。
MinIdleConns int
// 客户端退出(关闭)连接的连接年龄。
// 默认是不关闭老化的连接。
MaxConnAge time.Duration
// 如果所有连接都忙,则客户端在返回错误之前等待连接的时间。
// 默认为 ReadTimeout + 1 秒。
PoolTimeout time.Duration
// 客户端关闭空闲连接的时间。
// 应该小于服务器的超时时间。
// 默认为 5 分钟。 -1 禁用空闲超时检查。
IdleTimeout time.Duration
// 空闲连接 reaper 进行空闲检查的频率。
// 默认为 1 分钟。 -1 禁用空闲连接reaper,
// 但如果设置了 IdleTimeout,空闲连接仍会被客户端丢弃。
IdleCheckFrequency time.Duration
// 在从节点上启用只读查询。
readOnly bool
// 用于实现断路器或速率限制器的限制器接口。
Limiter Limiter
}
Redis安装与Go语言入门教程
17万+

被折叠的 条评论
为什么被折叠?



