0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Sử Dụng Redis Trong Golang

Đăng vào 2 tuần trước

• 3 phút đọc

Chủ đề:

golangBackendRedis

Redis Là Gì?

Redis là một máy chủ lưu trữ cấu trúc dữ liệu mã nguồn mở.
Nó thuộc loại cơ sở dữ liệu NoSQL được biết đến với các cửa hàng khóa/giá trị.

Các kiểu dữ liệu từ chuỗi đơn giản đến danh sách liên kết, tập hợp, JSON và nhiều hơn nữa.

Redis nhanh, mã nguồn mở, là một kho dữ liệu cấu trúc khóa giá trị trong bộ nhớ.

Việc truy cập RAM nhanh gấp 150,000 lần so với việc truy cập ổ đĩa và nhanh gấp 500 lần so với việc truy cập SSD.

Hãy tưởng tượng việc truy cập một cơ sở dữ liệu để đọc 10,000 bản ghi. Nếu dữ liệu được lưu trữ trên ổ đĩa, nó sẽ mất trung bình 30 giây, trong khi mất khoảng 0.0002 giây để đọc từ RAM.

Làm Thế Nào Để Xử Lý Việc Mất Dữ Liệu?

"Tính năng duy trì dữ liệu" đề cập đến việc ghi dữ liệu vào bộ nhớ bền, chẳng hạn như ổ đĩa thể rắn (SSD). Redis cung cấp một loạt các tùy chọn duy trì dữ liệu:

  • RDB (Redis Database): Duy trì RDB thực hiện các ảnh chụp từng thời điểm của tập dữ liệu của bạn trong các khoảng thời gian chỉ định.
  • AOF (Append Only File): Duy trì AOF ghi lại mọi thao tác ghi mà máy chủ nhận được. Những thao tác này có thể được phát lại tại thời điểm khởi động máy chủ, tái tạo lại tập dữ liệu gốc. Các lệnh được ghi lại theo định dạng giống như chính giao thức Redis.
  • Không duy trì: Bạn có thể tắt hoàn toàn tính năng duy trì. Điều này đôi khi được sử dụng khi lưu cache.
  • RDB + AOF: Bạn cũng có thể kết hợp cả AOF và RDB trong cùng một phiên bản.

Sử Dụng Redis Trong Golang

Để khởi động máy chủ Redis bằng Docker, bạn sử dụng lệnh sau:

Copy
docker run -d \
  --name redis-stack-server \
  -p 6379:6379 \
  -e REDIS_ARGS="--save 60 1000 --appendonly yes --requirepass yourpassword" \
  -v /local-data/:/data \
  redis/redis-stack-server:latest

Trong lệnh này, bạn chỉ chạy một Redis mà không xử lý việc mất dữ liệu, bạn có thể cấu hình tính năng duy trì này với redis_args thông qua thẻ -e.

Giải thích các tham số:

  • --save 60 1000: Cấu hình các ảnh chụp RDB định kỳ:
    • Lưu một ảnh chụp mỗi 60 giây nếu ít nhất 1000 khóa đã được chỉnh sửa.
  • --appendonly yes: Kích hoạt tính năng AOF (Append-Only File) để đảm bảo dữ liệu bền vững hơn.
  • --requirepass yourpassword: Đặt mật khẩu cho Redis.
    • Người dùng phải xác thực bằng mật khẩu (yourpassword) trước khi truy cập vào các lệnh Redis.
  • -v /local-data/:/data:: Gắn thư mục địa phương /local-data/ vào thư mục /data của container.

Sau khi chạy lệnh này, bạn có thể kiểm tra kết nối với Redis CLI và sử dụng lệnh PING:

Copy
redis-cli -p 6379 -a yourpassword

Khởi Tạo Dự Án Golang

Tạo khách hàng Redis với cấu trúc dự án.

Tạo Cấu Trúc Khách Hàng Redis

go Copy
package client

import (
	"context"
	redis "github.com/redis/go-redis/v9"
	"redis-learn/internal/infra/config"
	"time"
)

type RedisClient struct {
	redis *redis.Client
}

// NewRedisClient khởi tạo một phiên bản RedisClient mới.
// Nó tiếp nhận một cấu hình Redis (host, password và DB) và trả về một con trỏ đến RedisClient.
func NewRedisClient(redisConfig config.Redis) *RedisClient {
	rbd := redis.NewClient(
		&redis.Options{
			Addr:     redisConfig.Addr,
			Password: redisConfig.Password,
			DB:       redisConfig.DB,
		})

	return &RedisClient{
		redis: rbd,
	}
}

... (nội dung cắt bỏ để đạt độ dài tối ưu)

Tham Khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào