Giới thiệu về Redis

Django, Redis logos

1. Mở đầu

Nếu như ta nói rằng Redis là một database, điều đó đồng nghĩa với việc ta chỉ nói đúng một phần. Redis là một “non-relational database“, dữ liệu của redis được luuw theo kiểu key-value, và hỗ trợ 5 kiểu dữ liệu cho các value đó. Redis hỗ trợ việc kết nối và lưu dữ liệu trên disk, tạo các bản sao để tối ưu tốc độ đọc, phân vùng dữ liệu phía client để tăng hiệu suất ghi. Nhưng rất tiếc, ta sẽ không đề cập chi tiết những phần đó  trong blog này.

2. So sánh Redis với phần còn lại

  • Nếu như chúng ta đã quá quen thuộc với “relational database“, ta sẽ thấy quen thuộc với việc viết các câu Query để kết nối dữ liệu giữa các bảng. Nhưng Redis lại là một kiểu non-relational database. Đối với Redis, không hề có khái niệm table, không có luôn định nghĩa database, không có bất cứ ràng buộc nào về dữ liệu giữa các table.
  • Đôi khi ta thấy khá phổ biến khi nghe thấy Redis được so sánh với Memcached, khi redis được sử dụng như một Cache Server. Giống như memcached, Redis mang lại hiệu suất ngang với memcached với việc ánh xạ key-value, ngoài ra nó còn hỗ trợ việc ghi dữ liệu ra disk tự động theo hai cách khác nhau., thêm vào đó redis cũng hỗ trợ việc lưu với 4 kiểu cấu trúc dữ liệu khác nhau ngoài kiểu text đơn thuần giống với memcached. Những điểm linh hoạt này giúp cho Redis hoạt động và giải quyết rất nhiều những vấn đề khác nhau, và tuỳ thuộc mục đích Redis hoàn toàn có thể được dùng làm database chính hoặc database phụ trợ cho các database khác.

Có thể nói rằng, ta thường dùng Redis với vai trò lưu trữ dữ liệu khi ta thấy các tính năng và hiệu suất của Redis là cần thiết, mà những relational và non-relational database khác không đáp ứng được, hoặc hiệu suất quá chậm, dữ liệu quá lớn cho việc lưu vào cache. Trên thực tế, ta thường phải phán đoán liệu rằng ta sẽ muốn lưu dữ liệu vào đâu ? ( dùng Redis như là database chính hoặc database chính ở nơi khác và sao lưu vào Redis). Làm sao để dữ liệu đồng nhất và toàn vẹn ( sao lưu, bền bỉ, …). Ta nên xem xét Redis với các database, phần mềm khác.

2. Tại sao ta nên dùng Redis

So sánh với memcached, Redis có một vài ưu thế hơn hẳn, ngoài ra nó còn giúp phần source code có phần ngắn gọn hơn, dễ để hiểu, dễ bảo trì và nó hoàn toàn nhanh hơn ( bời vì ta không cần read and update dữ liệu). Ngoài ra trong một vài trường hợp ta có thể rõ ràng thấy được Redis thực sự hiệu quả và dễ dàng hơn so với với các relational database ( thú thật là tôi thích dùng từ này hơn là từ “cơ sở dữ liệu quan hệ” ). Ngoài ra do tránh được việc ghi dữ liệu ra bộ nhớ tạm thời nên việc scan toàn bộ dữ liệu hoặc xoá dữ liệu khiến cho hiệu suất của Redis cũng thật đáng kể so với relational database. Nhưng tất nhiên việc lựa chọn vẫn là của chính bản, chủ yếu là lựa chọn nào sẽ giải quyết được vấn đề của bản thân.

3. Kết luận

Hầu hết việc chúng ta tiếp cận một công nghệ, khi nhìn qua những giới thiệu, những lời mở đầu, việc mô tả các feature, ưu diểm, các tính chất của công nghệ đó ta đều sẽ thấy mơ hồ, chưa thể có cái nhìn chính xác, chúng ta thiếu các thực nghiệm, thiếu các trải nghiệm thực tế. Blog này dựa trên việc tác giả ( it’s me ) đọc trên một ebook được download trên mạng và một vài blog, vài tutorial nào đó. Nó thực sự chưa đủ để viết hết các ưu điểm hoặc nhược điểm của một công nghệ trong 1 blog ngắn, và theo ngu kiến của bản thân tôi, khi nào viết được một blog để so sánh các công nghệ tương đồng hoặc nhược điểm của một công nghê nào đó thì thực sự tôi đã hiểu phần nào công nghệ đó.

Chốt lại, phần blog này đã mô tả qua những điều thú vị của Redis, ( có những phần khác thú vị hơn, nhưng … chưa hiểu lắm, nên không viết vào, xin dành thời gian nghiên cứu sâu hơn và cho blog sau ). Link đính kèm và những blog tôi tham khảo sẽ đính kèm ở phần 4 của blog. Chúc các bạn một ngày mới tốt lành.

4. Link tham khảo

https://github.com/AllenCoder/Ebook-1/blob/master/Redis%20in%20Action.pdf

https://realpython.com/caching-in-django-with-redis/

https://stackabuse.com/working-with-redis-in-python-with-django/

https://github.com/jazzband/django-redis

Add a Comment