Cài đặt Memcached trong 5 phút
Cài đặt Memcached thực ra nhẹ nhàng hơn bạn tưởng. Không cần cấu hình rườm rà, bạn có thể đưa nó vào vận hành ngay trên Ubuntu/Debian – hệ điều hành quốc dân cho server hiện nay.
1. Cài đặt trên Ubuntu
sudo apt update
sudo apt install memcached libmemcached-tools -y
2. Kiểm tra trạng thái
Dịch vụ sẽ tự khởi động sau khi cài xong. Hãy dùng lệnh này để chắc chắn nó đang chạy:
sudo systemctl status memcached
3. Thử nghiệm nhanh với Telnet
Thay vì viết code ngay, bạn có thể “nói chuyện” trực tiếp với Memcached qua Telnet. Cách này cực kỳ hữu ích để debug nhanh.
telnet localhost 11211
# Cú pháp: set <key> <flags> <exptime> <bytes>
set session_id 0 60 5
abc12
# Lấy dữ liệu: get <key>
get session_id
# Kết quả:
# VALUE session_id 0 5
# abc12
# END
Ở ví dụ này, mình lưu session_id có giá trị abc12 trong 60 giây. Mọi thứ diễn ra trong chưa đầy 1 mili giây.
Tại sao Memcached vẫn sống khỏe dù Redis rất mạnh?
Nhiều kỹ sư đặt câu hỏi: “Tại sao phải dùng Memcached khi Redis có nhiều tính năng hơn?”. Câu trả lời nằm ở sự tập trung. Trong khi Redis cố gắng làm mọi thứ, Memcached chỉ tập trung làm một việc duy nhất: Cache dữ liệu với tốc độ bàn thờ.
Memcached là hệ thống lưu trữ key-value phân tán trong bộ nhớ. Nó không quan tâm đến logic phức tạp, chỉ hiểu chuỗi (strings) và các đối tượng đã serialize. Chính sự đơn giản này giúp nó đạt throughput cực cao.
Những điểm mạnh thực tế:
- Kiến trúc đa luồng (Multi-threaded): Đây là vũ khí bí mật. Memcached tận dụng tối đa các CPU nhiều nhân (ví dụ server 32 hay 64 cores). Redis (về cơ bản) vẫn xử lý lệnh đơn luồng, nên trong các bài test throughput thuần túy, Memcached thường dẫn trước.
- Cấp phát bộ nhớ Slab: Cơ chế này giúp server chạy hàng năm trời mà không bị chậm do phân mảnh RAM.
- Tiết kiệm tài nguyên: Nếu bạn chỉ cần lưu session hoặc cache kết quả SQL, Memcached tiêu tốn ít RAM và CPU hơn đáng kể so với Redis.
So sánh thực tế: Memcached vs Redis
Dưới đây là bảng so sánh dựa trên kinh nghiệm triển khai dự án thực tế của mình:
| Đặc điểm | Memcached | Redis |
|---|---|---|
| Dữ liệu | Chỉ String đơn giản | Lists, Hashes, Sets, Geospatial… |
| Xử lý | Đa luồng (Tận dụng tốt đa nhân) | Đơn luồng (Có I/O threads ở bản mới) |
| Lưu trữ bền vững | Không (Mất khi reset) | Có (Ghi xuống đĩa cứng) |
| Giới hạn Key/Value | Value tối đa 1MB | Value lên tới 512MB |
Kinh nghiệm chọn lựa: Hãy chọn Memcached nếu bạn cần một lớp cache thuần túy cho hệ thống có lưu lượng truy cập khổng lồ (ví dụ 100.000 requests/giây). Hãy chọn Redis khi cần các cấu trúc dữ liệu phức tạp hoặc không muốn mất cache khi khởi động lại server.
Cơ chế Slab Allocation: Bí mật của sự ổn định
Phân mảnh bộ nhớ (Memory Fragmentation) là ác mộng của các hệ thống in-memory. Nếu cấp phát RAM bừa bãi, sau một thời gian server sẽ báo hết RAM dù thực tế vẫn còn nhiều khoảng trống nhỏ.
Memcached giải quyết bằng cách chia RAM thành các “Slab Class”. Ví dụ, Class 1 chỉ chứa các ô 64 bytes, Class 2 chứa ô 128 bytes. Khi bạn lưu dữ liệu 100 bytes, nó sẽ đưa vào ô 128 bytes. Việc chấp nhận lãng phí vài bytes giúp hệ thống không bao giờ phải tốn công dọn dẹp (Garbage Collection), giữ cho độ trễ (latency) luôn ổn định ở mức cực thấp.
Sử dụng với Python (Ví dụ thực tế)
Dưới đây là cách mình thường dùng để giảm tải cho Database (giả lập query mất 3 giây):
import time
from pymemcache.client.base import Client
# Kết nối tới Memcached
client = Client(('localhost', 11211))
def get_user_profile(user_id):
# Thử lấy từ cache trước
cache_key = f'user:{user_id}'
data = client.get(cache_key)
if data:
return data.decode('utf-8')
# Nếu hụt cache (Miss), giả lập query DB
time.sleep(3)
result = f"Profile của user {user_id}"
# Lưu lại dùng trong 10 phút
client.set(cache_key, result, expire=600)
return result
# Lần đầu: Chờ 3s
print(get_user_profile(99))
# Lần hai: Phản hồi tức thì
print(get_user_profile(99))
Lưu ý bảo mật “xương máu”
Đừng để sự đơn giản của Memcached đánh lừa bạn. Khi đưa lên production, hãy nhớ kỹ hai điều này:
1. Chặn cổng 11211 ngay lập tức
Memcached mặc định không yêu cầu mật khẩu. Năm 2018, GitHub từng bị tấn công DDoS kỷ lục 1.35 Tbps do hacker lợi dụng các server Memcached mở công khai. Luôn cấu hình -l 127.0.0.1 hoặc dùng Firewall chỉ cho phép IP của App Server truy cập.
2. Nới lỏng giới hạn RAM
Mặc định Memcached chỉ dùng 64MB RAM – con số quá khiêm tốn cho các ứng dụng hiện đại. Hãy tăng lên tùy theo tài nguyên của bạn:
# Sửa trong /etc/memcached.conf
-m 1024 # Tăng lên 1GB RAM
Memcached có thể không hào nhoáng, nhưng nó là một “công nhân” cần mẫn và cực kỳ đáng tin cậy. Nếu bạn cần tốc độ tối đa cho các tác vụ đơn giản, đừng ngần ngại chọn nó.
