Redis cơ bản với Python cho người mới

5 min read

Redis là một trong những công cụ mạnh mẽ nhất mà bất kỳ lập trình viên backend nào cũng nên biết. Đây không chỉ là một hệ thống lưu trữ dữ liệu key-value tốc độ cao mà còn là nền tảng cho rất nhiều tính năng nâng cao như cache dữ liệu, hàng đợi, bảng xếp hạng, hay xử lý thời gian thực.

Hôm nay Quân và bạn cùng khám phá Redis chi tiết – nhưng theo cách dễ hiểu, gần gũi và thực tế nhất nhé!


1. Redis là gì?

Redis (viết tắt của Remote Dictionary Server) là một hệ thống cơ sở dữ liệu key-value hoạt động chủ yếu trong bộ nhớ RAM. Nhờ đặc điểm này, Redis có tốc độ truy xuất dữ liệu nhanh hơn hàng trăm lần so với các hệ quản trị cơ sở dữ liệu truyền thống như MySQL hay PostgreSQL.

Không chỉ dừng lại ở việc lưu trữ key-value, Redis còn hỗ trợ rất nhiều tính năng hữu ích như:

  • Lưu trữ dữ liệu trong bộ nhớ để truy cập nhanh
  • Hỗ trợ nhiều cấu trúc dữ liệu: string, hash, list, set, sorted set, stream
  • Cho phép đặt thời gian sống (TTL) cho dữ liệu
  • Cung cấp cơ chế Pub/Sub để giao tiếp giữa các dịch vụ
  • Hỗ trợ nhân bản (replication), cluster và scripting

Nhờ những tính năng này, Redis được ứng dụng rộng rãi trong việc cache dữ liệu, lưu session người dùng, thống kê thời gian thực hay xây dựng hệ thống message queue.


2. Cài đặt Redis và thư viện Python

Trước khi bắt đầu sử dụng Redis với Python, bạn cần cài đặt Redis trên hệ thống và cài thư viện Python hỗ trợ kết nối.

Cài Redis trên Ubuntu

sudo apt update
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server

Kiểm tra Redis hoạt động bằng lệnh:

redis-cli ping
# Kết quả: PONG

Cài đặt thư viện Python

pip install redis

3. Kết nối Redis từ Python

Sau khi cài đặt xong, bạn có thể kết nối với Redis thông qua thư viện redis trong Python như sau:

import redis

# Tạo kết nối đến Redis
client = redis.Redis(
    host='localhost', 
    port=6379, 
    db=0, 
    decode_responses=True
)

# Kiểm tra kết nối
print(client.ping())  # Kết quả: True

Tham số decode_responses=True giúp tự động chuyển đổi dữ liệu từ bytes sang chuỗi khi lấy dữ liệu từ Redis.


4. Các kiểu dữ liệu cơ bản trong Redis

Redis không chỉ lưu trữ chuỗi đơn giản mà còn hỗ trợ nhiều kiểu dữ liệu khác nhau. Dưới đây là các kiểu phổ biến nhất mà bạn cần biết khi làm việc với Redis trong Python.

4.1. String – Kiểu dữ liệu cơ bản

client.set("username", "quandev")
print(client.get("username"))  # Kết quả: quandev

client.set("views", 100)
client.incr("views")  # 101
client.decr("views")  # 100

Ứng dụng: lưu cache, lưu token, đếm lượt truy cập hoặc lưu các giá trị đơn giản.


4.2. Hash – Dạng dictionary trong Redis

client.hset("user:1", mapping={
    "name": "Quan",
    "age": 25,
    "email": "quan@example.com"
})

print(client.hget("user:1", "name"))  # Quan
print(client.hgetall("user:1"))

Ứng dụng: lưu thông tin người dùng, cấu hình hệ thống, dữ liệu cấu trúc dạng đối tượng.


4.3. List – Danh sách có thứ tự

client.rpush("tasks", "task1", "task2")
client.lpush("tasks", "task0")

print(client.lrange("tasks", 0, -1))  # ['task0', 'task1', 'task2']
print(client.lpop("tasks"))           # 'task0'

Ứng dụng: xây dựng hàng đợi công việc, danh sách log, lịch sử tác vụ.


4.4. Set – Tập hợp không trùng lặp

client.sadd("tags", "python", "redis", "backend")
print(client.smembers("tags"))  # {'python', 'redis', 'backend'}

Ứng dụng: lưu danh sách unique như danh sách follower, nhóm quyền hoặc danh sách gắn thẻ.


4.5. Sorted Set – Tập hợp có điểm số

client.zadd("leaderboard", {"Alice": 100, "Bob": 200, "Charlie": 150})
print(client.zrevrange("leaderboard", 0, -1, withscores=True))

Ứng dụng: xây dựng bảng xếp hạng, hệ thống điểm, hoặc tính năng đánh giá.


5. TTL – Giải pháp cache hiệu quả trong Redis

Một trong những tính năng nổi bật nhất của Redis là khả năng tự động xóa dữ liệu sau một khoảng thời gian nhất định nhờ TTL (Time-To-Live).

client.setex("token:123", 60, "xyz")
print(client.ttl("token:123"))

TTL đặc biệt hữu ích khi xây dựng hệ thống cache, lưu phiên đăng nhập hoặc dữ liệu tạm thời.


6. Cách sử dụng Redis để cache dữ liệu API

Ví dụ dưới đây mô tả cách sử dụng Redis để cache dữ liệu trả về từ cơ sở dữ liệu, giúp cải thiện hiệu suất API:

import json, time

def get_products_from_db():
    time.sleep(2)  # Giả lập truy vấn chậm
    return [{"id": 1, "name": "Iphone"}, {"id": 2, "name": "Macbook"}]

def get_products():
    cache_key = "products"

    if cached := client.get(cache_key):
        print("Lấy dữ liệu từ Redis cache")
        return json.loads(cached)

    print("Truy vấn cơ sở dữ liệu...")
    data = get_products_from_db()
    client.setex(cache_key, 60, json.dumps(data))
    return data

print(get_products())  
print(get_products())  # Lần 2 trả về nhanh hơn rất nhiều

7. Giao tiếp thời gian thực với Pub/Sub trong Redis

Redis hỗ trợ cơ chế Pub/Sub (publish/subscribe), cho phép các dịch vụ giao tiếp với nhau trong thời gian thực.

# Gửi thông điệp
client.publish("chat", "Hello world!")

# Nhận thông điệp
sub = client.pubsub()
sub.subscribe("chat")
for message in sub.listen():
    print(message)

Ứng dụng: xây dựng hệ thống chat, thông báo sự kiện, hay truyền dữ liệu giữa các dịch vụ.


8. Một số lệnh Redis thường dùng

LệnhChức năng
DEL keyXóa key
EXPIRE key secondsĐặt thời gian sống cho key
TTL keyKiểm tra thời gian sống còn lại
KEYS *Liệt kê tất cả các key
FLUSHALLXóa toàn bộ dữ liệu trong Redis

9. Mẹo và thực hành tốt khi dùng Redis

  • Luôn đặt TTL cho cache để tránh tiêu tốn quá nhiều bộ nhớ.
  • Sử dụng tiền tố cho key để dễ quản lý và tránh trùng lặp.
  • Theo dõi hiệu suất Redis bằng lệnh INFO hoặc công cụ giám sát.
  • Dùng pipeline để gửi nhiều lệnh trong một lần, giảm độ trễ.
  • Với hệ thống lớn, hãy cân nhắc sử dụng Redis Cluster hoặc Redis Sentinel.

Kết luận

Redis là công cụ không thể thiếu khi xây dựng các hệ thống backend hiệu năng cao. Với khả năng xử lý dữ liệu trong bộ nhớ, hỗ trợ nhiều kiểu dữ liệu, cùng các tính năng như TTL, Pub/Sub hay caching, Redis giúp tối ưu tốc độ và khả năng mở rộng của ứng dụng.

Kết hợp Redis với Python không chỉ đơn giản mà còn rất mạnh mẽ. Khi đã làm chủ các kiến thức cơ bản, bạn có thể tiếp tục nghiên cứu các tính năng nâng cao như pipeline, transaction, stream hay cluster để áp dụng Redis vào các dự án thực tế phức tạp hơn.

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *