Giới thiệu

Bạn đã bao giờ ước rằng mình có thể sử dụng các cấu trúc dữ liệu tuyệt vời của Redis nhưng lại không muốn bị giới hạn bởi dung lượng RAM đắt đỏ? Hay bạn muốn tận dụng sức mạnh của các truy vấn SQL trên chính dữ liệu Key-Value của mình?

Chào mừng bạn đến với Redka - một dự án mã nguồn mở đầy thú vị giúp tái triển khai các thành phần cốt lõi của Redis bằng ngôn ngữ SQL, trong khi vẫn giữ nguyên khả năng tương thích với Redis API. Với hơn 4,400 stars trên GitHub, Redka đang chứng minh rằng sự kết hợp giữa tính linh hoạt của Redis và sự tin cậy của SQL (SQLite/PostgreSQL) là một hướng đi cực kỳ tiềm năng.

  • Ngôn ngữ chính: Go
  • Stars: 4,473+
  • Forks: 130+
  • Backend: SQLite hoặc PostgreSQL

Tính năng nổi bật

Redka không chỉ đơn thuần là một bản clone, nó mang lại những giá trị riêng biệt:

  1. Không giới hạn bởi RAM: Dữ liệu của bạn được lưu trữ trên đĩa (disk) thông qua SQL backend, giúp bạn lưu trữ lượng dữ liệu lớn hơn nhiều so với bộ nhớ vật lý.
  2. Hỗ trợ ACID: Nhờ sử dụng SQLite hoặc Postgres, Redka đảm bảo các giao dịch (transactions) an toàn và toàn vẹn dữ liệu.
  3. SQL Views: Bạn có thể dùng các công cụ SQL truyền thống để phân tích và báo cáo dữ liệu Redis một cách trực quan.
  4. Đa dạng cách dùng: Có thể chạy như một server độc lập hoặc nhúng trực tiếp vào ứng dụng Go (in-process).
  5. Tương thích RESP: Hỗ trợ giao thức Redis, nghĩa là bạn có thể dùng các thư viện client Redis hiện có để kết nối.

Cài đặt

Bạn có thể cài đặt Redka theo hai cách chính: dưới dạng binary độc lập hoặc thư viện cho Go.

Cài đặt Standalone Server

Nếu bạn đã cài đặt Go, hãy chạy lệnh sau:

go install github.com/nalgeon/redka/cmd/redka@latest

Cài đặt Go Module

Để nhúng vào project Go của mình:

go get github.com/nalgeon/redka

Hướng dẫn sử dụng

1. Chạy Redka Server

Sau khi cài đặt, bạn khởi động server đơn giản bằng lệnh:

redka

Server sẽ mặc định chạy tại cổng 6379 (giống Redis). Bạn có thể dùng redis-cli để kiểm tra:

redis-cli set user:1 "Hoang"
redis-cli get user:1

2. Sử dụng trong mã nguồn Go

Đây là ví dụ nhanh về cách bạn có thể sử dụng Redka như một database nhúng trong ứng dụng Go:

package main

import (
	"log"
	"github.com/nalgeon/redka"
)

func main() {
	// Mở database SQLite (tự động tạo nếu chưa có)
	db, err := redka.Open("data.db", nil)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// Thao tác với String
	err = db.Str().Set("name", "Redka")
	if err != nil {
		log.Fatal(err)
	}

	val, _ := db.Str().Get("name")
	println("Hello, ", val.String())
}

Kết luận

Ưu điểm:

  • Tiết kiệm chi phí RAM.
  • Dễ dàng backup và quản lý nhờ định dạng file SQL.
  • Cực kỳ phù hợp cho các môi trường testing hoặc ứng dụng nhỏ/vừa.

Nhược điểm:

  • Hiệu năng (latency) không thể bằng Redis thuần túy chạy trên RAM.
  • Hiện đang ở chế độ bảo trì (maintenance mode), ít tính năng mới được thêm vào.

Ai nên dùng Redka? Nếu bạn là một lập trình viên Go cần một Key-Value store nhẹ nhàng, hỗ trợ ACID, hoặc bạn muốn chạy các bài test tích hợp mà không muốn cài đặt một server Redis cồng kềnh, Redka chính là chân ái dành cho bạn!


Nguồn: Tool: Redka