0

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 context và thực hiện lệnh PING để 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-redis yêu cầu truyền context và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ài Addr, Password và 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 trong go-redis trả 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-redis tự động quản lý Connection Pool dưới nền, việc gọi Close() 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ý:

  1. 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.

  2. 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 Addr và Password.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí