Bài 1: Khởi đầu với go-redis - Cài đặt và Kết nối đầu tiên
Mục tiêu bài học:
-
Cài đặt thành công thư viện
go-redis(phiên bản v9 tiêu chuẩn). -
Khởi tạo Redis Client kết nối đến server Standalone.
-
Làm quen với
contextvà thực hiện lệnhPINGđể kiểm tra trạng thái.
1. Cài đặt thư viện
Thư viện go-redis phiên bản v9 yêu cầu Go version 1.18 trở lên và bắt buộc sử dụng context cho mọi thao tác.
Mở terminal tại thư mục dự án của bạn và chạy lệnh sau:
Bash
# Khởi tạo module nếu chưa có
go mod init my-redis-app
# Tải thư viện go-redis v9
go get github.com/redis/go-redis/v9
2. Khởi tạo Client và Kiểm tra kết nối (Code mẫu)
Tạo file main.go và nhập đoạn mã sau. Cấu hình mặc định sẽ cố gắng kết nối tới Redis đang chạy trên localhost cổng 6379.
Go
package main
import (
"context"
"fmt"
"log"
"github.com/redis/go-redis/v9"
)
// Khởi tạo một global context cho các thao tác đơn giản
var ctx = context.Background()
func main() {
// 1. Khởi tạo cấu hình Redis Client
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Địa chỉ và cổng của Redis server
Password: "", // Không có password thì để trống
DB: 0, // Sử dụng database mặc định (từ 0 đến 15)
})
// Luôn đảm bảo đóng kết nối khi ứng dụng dừng
defer func() {
if err := client.Close(); err != nil {
log.Fatalf("Lỗi khi đóng kết nối: %v", err)
}
}()
// 2. Gửi lệnh PING để kiểm tra kết nối
pong, err := client.Ping(ctx).Result()
if err != nil {
log.Fatalf("Không thể kết nối tới Redis: %v", err)
}
fmt.Println("Kết nối thành công! Server phản hồi:", pong)
}
3. Giải thích các thành phần quan trọng
-
context.Background(): Từ bản v8 trở đi,go-redisyêu cầu truyềncontextvào tham số đầu tiên của mọi hàm. Điều này giúp bạn dễ dàng quản lý timeout hoặc hủy luồng (cancellation) trong hệ thống Microservices. -
redis.Options{}: Struct chứa toàn bộ thông số kết nối. NgoàiAddr,PasswordvàDB, struct này còn cho phép cấu hình Connection Pool (sẽ học ở phần nâng cao). -
.Result(): Hầu hết các lệnh tronggo-redistrả về một đối tượng chứa cả kết quả và lỗi. Hàm.Result()là cú pháp viết tắt tiện lợi để bung (unpack) giá trị này thành 2 biến riêng biệt(value, error). -
defer client.Close(): Mặc dùgo-redistự động quản lý Connection Pool dưới nền, việc gọiClose()một cách rõ ràng khi tắt ứng dụng giúp giải phóng tài nguyên mạng triệt để, tránh tình trạng rò rỉ (leak) kết nối.
4. Lỗi thường gặp (Troubleshooting)
Nếu khi chạy go run main.go bạn gặp lỗi:
Không thể kết nối tới Redis: dial tcp [::1]:6379: connect: connection refused
Cách xử lý:
-
Bạn chưa bật Redis server. Nếu dùng Docker, hãy chạy:
docker run --name my-redis -p 6379:6379 -d redis. -
Server Redis của bạn được cấu hình ở cổng khác (không phải 6379) hoặc có yêu cầu mật khẩu. Hãy kiểm tra lại
AddrvàPassword.
All rights reserved