Giới hạn lượt sử dụng tính năng: Database hay Redis?
Khi cần giới hạn lượt sử dụng một tính năng, nên đếm từ database hay dùng Redis? Lựa chọn phù hợp phụ thuộc vào dữ liệu hệ thống đã có, quy mô hiện tại và mức độ phức tạp mà sản phẩm cần vận hành.

Giới hạn lượt sử dụng tính năng: Database hay Redis?
Một tính năng AI sắp lên production. Mỗi user được dùng tối đa 3 lượt trong 5 ngày để kiểm soát chi phí.
Mỗi lần dùng tính năng AI sẽ tạo một conversation mới, và user không thể chạy lại tính năng đó trong cùng conversation. Vì vậy, mỗi conversation tương ứng với một lượt dùng AI. Nhưng đối tượng cần giới hạn là lượt sử dụng tính năng, không phải tất cả cuộc chat của user.
Câu hỏi của team là: nên đếm lượt từ database hay dùng Redis?
Database: bắt đầu từ dữ liệu hệ thống đã có
Conversation đã được lưu trong database. Khi user bắt đầu một lượt AI, backend có thể đếm số conversation tương ứng với các lượt dùng tính năng trong 5 ngày gần nhất. Nếu user còn lượt thì tiếp tục; nếu đã chạm giới hạn thì từ chối trước khi gọi AI.
Cách này tự nhiên với một ứng dụng chat: backend vốn cần truy vấn conversation để hiển thị lịch sử. Database vừa lưu dữ liệu sản phẩm, vừa có thể cung cấp dữ liệu để kiểm tra hạn mức. Không cần duy trì thêm một bộ đếm riêng chỉ để lưu lại con số có thể tính từ các bản ghi hiện có.
Điều quan trọng là chỉ đếm đúng conversation được tạo bởi tính năng AI cần giới hạn. Nếu lịch sử được phân trang, số conversation đang hiển thị không phải tổng lượt đã dùng; backend cần đếm toàn bộ các bản ghi phù hợp trong khoảng thời gian cần kiểm tra.
Redis: nhanh hơn, nhưng thêm trạng thái cần quản lý
Redis phù hợp khi cần kiểm tra giới hạn thật nhanh, hoặc query database đã trở thành nút thắt. Thay vì đếm các bản ghi conversation mỗi lần, backend có thể kiểm tra một bộ đếm trong Redis.
Đổi lại, database lưu conversation còn Redis lưu số lượt. Hai nơi này cần được cập nhật nhất quán. Nếu conversation được tạo nhưng Redis không tăng, lượt dùng có thể không được tính. Nếu Redis tăng nhưng tạo conversation thất bại, user có thể bị trừ lượt dù chưa sử dụng thành công.
Redis giúp truy cập bộ đếm nhanh, nhưng team cần tính cả việc đồng bộ trạng thái.
Lựa chọn phù hợp theo từng giai đoạn
Khi sản phẩm đang test thị trường, ưu tiên cách đơn giản để kiểm chứng nhu cầu và theo dõi chi phí. Nếu query database vẫn đáp ứng tốt, hãy bắt đầu bằng cách đếm các conversation đại diện cho lượt dùng AI. Ứng dụng chat vốn đã truy vấn conversation để hiển thị lịch sử, nên database là điểm khởi đầu tự nhiên.
Khi sản phẩm tăng trưởng, hãy dựa vào số liệu thực tế. Nếu việc đếm conversation làm tăng tải database hoặc ảnh hưởng đến tốc độ phản hồi, lúc đó cân nhắc Redis để giảm số lần query.
Còn trước mắt, hãy bảo đảm đếm đúng lượt AI, áp dụng giới hạn nhất quán và xử lý an toàn khi nhiều request đến cùng lúc.
Đừng chọn Redis chỉ vì đang làm limit. Hãy chọn công cụ phù hợp với quy mô và nhu cầu hiện tại, rồi thay đổi khi dữ liệu vận hành cho thấy hệ thống cần điều đó.
