Việc quản lý keys và thời gian sống (TTL) là kỹ năng quan trọng khi làm việc với Redis. Bài viết này giúp bạn thành thạo các lệnh quản lý keys và expiration.
Quản lý Keys
Tìm kiếm Keys
# Tìm keys theo pattern
KEYS user:* # Tất cả keys bắt đầu bằng "user:"
KEYS *:1001 # Tất cả keys chứa ":1001"
KEYS session:* # Tất cả session keys
# ⚠️ CẢNH BÁO: KEYS quét TẤT CẢ keys trong RAM
# Không dùng trong production! Dùng SCAN thay thế.
SCAN: Tìm kiếm an toàn
SCAN tìm kiếm keys theo từng batch, không block server:
# SCAN cursor MATCH pattern COUNT batch_size
SCAN 0 MATCH user:* COUNT 100
# 1) "17" → cursor cho lần tiếp theo
# 2) 1) "user:1001"
# 2) "user:1002"
# ...
# Tiếp tục quét cho đến khi cursor = 0
cursor = 0
while True:
cursor, keys = SCAN cursor MATCH "user:*" COUNT 100
process(keys)
if cursor == 0:
break
Kiểm tra và xóa Keys
# Kiểm tra key tồn tại
EXISTS user:1001
# (integer) 1 nếu tồn tại
# (integer) 0 nếu không
# Kiểm tra kiểu dữ liệu
TYPE user:1001
# "string" hoặc "hash" hoặc "list" ...
# Xóa key
DEL user:1001
# (integer) 1 nếu xóa thành công
# Xóa nhiều keys
DEL user:1001 user:1002 user:1003
# Đổi tên key
RENAME user:1001 user:profile:1001
# Đổi tên chỉ nếu key mới chưa tồn tại
RENAMENX user:1001 user:profile:1001
Expiration (TTL)
Redis cho phép đặt thời gian sống cho keys. Sau khi hết hạn, key sẽ tự động bị xóa.
Đặt Expiration
# Cách 1: Đặt khi SET
SET session:abc "data" EX 3600 # Hết hạn sau 3600 giây (1 giờ)
SET session:abc "data" PX 3600000 # Hết hạn sau 3600000 ms (1 giờ)
SET session:abc "data" EXAT 1735689600 # Hết hạn tại timestamp cụ thể
SET cache:result "data" EX 300 # Cache 5 phút
# Cách 2: Đặt sau khi tạo
SET otp:123456 "847291"
EXPIRE otp:123456 300 # Hết hạn sau 5 phút
PEXPIRE key 60000 # Hết hạn sau 60000ms (60 giây)
EXPIREAT key 1735689600 # Hết hạn tại timestamp
PEXPIREAT key 1735689600000 # Hết hạn tại timestamp (ms)
Kiểm tra Expiration
# Xem TTL còn lại (giây)
TTL session:abc
# (integer) 3542 → còn 3542 giây
# (integer) -1 → không có expiration
# (integer) -2 → key không tồn tại
# Xem TTL còn lại (mili giây)
PTTL session:abc
# (integer) 3542000
Xóa Expiration
# Xóa expiration (key sống mãi)
PERSIST session:abc
# (integer) 1 nếu thành công
TTL session:abc
# (integer) -1 → không có expiration
Use Cases thực tế
1. Cache với TTL
# Cache kết quả query trong 10 phút
SET cache:users:active "[{...}]" EX 600
# Cache API response trong 1 phút
SET cache:api:weather:hanoi "{\"temp\": 28}" EX 60
# Cache static content trong 1 giờ
SET cache:config:site "{...}" EX 3600
2. Session Management
# Tạo session, hết hạn sau 24 giờ
HSET session:abc123 user_id "1001" role "admin"
EXPIRE session:abc123 86400
# Gia hạn session khi user hoạt động
EXPIRE session:abc123 86400
# Session tự động bị xóa sau 24 giờ không hoạt động
3. OTP / Verification Code
# Tạo OTP, hết hạn sau 5 phút
SET otp:+84901234567 "847291" EX 300
# Kiểm tra OTP
otp = GET otp:+84901234567
if otp is None:
print("OTP đã hết hạn")
elif otp == "847291":
print("Xác thực thành công!")
DEL otp:+84901234567
else:
print("OTP sai")
4. Rate Limiting
# Giới hạn 100 request/phút
key = "rate:user:1001"
count = INCR key
if count == 1:
EXPIRE key 60 # Đặt TTL khi request đầu tiên
if count > 100:
print("Rate limit exceeded!")
Eviction Policies
Khi Redis hết memory, nó cần xóa bớt keys. maxmemory-policy quyết định xóa keys nào:
| Policy | Mô tả | Use case |
|---|---|---|
noeviction |
Không xóa, trả lỗi khi hết RAM | Dữ liệu quan trọng |
allkeys-lru |
Xóa key ít dùng nhất | Cache chung |
volatile-lru |
Xóa key có TTL, ít dùng nhất | Cache + persistent data |
allkeys-random |
Xóa ngẫu nhiên | Khi mọi key đều equal |
volatile-ttl |
Xóa key sắp hết hạn nhất | Ưu tiên giữ key sống lâu |
# Cấu hình trong redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru
Best Practices
- Đặt prefix rõ ràng —
user:1001,cache:api:weather - Luôn đặt TTL cho cache — Tránh memory leak
- Dùng SCAN thay KEYS — Trong production
- Giới hạn maxmemory — Tránh Redis chiếm hết RAM
- Chọn eviction policy phù hợp — Tùy use case

Bước tiếp theo
Bạn đã nắm vững cách quản lý keys và expiration! Tiếp theo, chúng ta sẽ tìm hiểu về Pub/Sub — cơ chế giao tiếp real-time giữa các services.