Redis là gì?

Redis là viết tắt của cụm từ Remote Dictionary Server, là một kho lưu trữ dữ liệu có cấu trúc dạng key-value (hash, set, list, string, sorted). Nó có thể được dùng như một database, message broker, bộ nhớ cache hay một queue.

Kho lưu trữ dữ liệu này có những tính năng chính như:

  • Hoạt động lưu trữ key-value trên RAM cao.
  • Cho phép phục hồi dữ liệu khi gặp sự cố nhờ việc lưu trữ dữ liệu trên đĩa cứng .
  • Có khả năng phản hồi rất nhanh chỉ với vài mili giây để xử lý hàng triệu request mỗi giây.
  • Tính năng sao chép đồng bộ giữa 2 cơ sở dữ liệu với nhau (replication) và tính năng cluster.

Redis có các kiểu dữ liệu nào?

Khác với các kho lưu trữ dữ liệu như MySQL, PostgreSQL thì kho lưu trữ dữ liệu này không lưu trữ trong dữ liệu trong bảng, thay vào đó là lưu trữ dạng key-value. Các cấu trúc dữ liệu trong redis là gì mà có thể cho phép xử lý tốc độ cao với bộ nhớ mạnh mẽ? Chúng bao gồm:

  • String: là một trong những kiểu dữ liệu linh hoạt nhất. String là cấu trúc dữ liệu nhị phân và có thể lưu trữ đa dạng loại dữ liệu như số thập phân, ảnh JPEG, chuỗi,… Redis có thể làm việc với string hoặc từng phần của nó, đồng thời thực hiện tăng hay giảm các giá trị của float, integer.
  • List: là một danh sách của strings, chứa tập hợp các phần tử chuỗi và được sắp xếp theo thứ tự insert. Kho lưu trữ dữ liệu này có thể dễ dàng thêm một phần tử vào cuối hoặc đầu list. Vì việc truy xuất cực nhanh nên list rất phù hợp với các bài toán cần thao tác với nhiều phần tử gần đầu và cuối. Tuy nhiên việc thực hiện truy xuất các phần tử ở giữa list lại diễn ra rất chậm.
  • Set: là tập hợp các string (đều không được sắp xếp). Kho lưu trữ dữ liệu này có khả năng hỗ trợ các thao tác như đọc, thêm, xóa từng phần tử hay truy xuất, kiểm tra một phần tử xuất hiện trong tập hợp. Bên cạnh đó, nó còn hỗ trợ các phép tập hợp như lấy phần hợp, phần giao hay lấy phần khác nhau,…
  • Hash: Việc lưu trữ hash table của các cặp key-value và trong đó các key được sắp xếp ngẫu nhiên, không theo bất kỳ thứ tự nào cả. Redis hỗ trợ các thao tác người dùng như đọc, thêm , xóa từng phần tử hoặc toàn bộ hash.
  • Sorted set: là một danh sách được sắp xếp theo score, trong đó mỗi phần tử như là map của 1 string (member) và 1 floating-point number (score). Tương tự với set, redis cũng có thể thêm, xóa, đọc từng phần tử. Các phần tử của sorted set đều được sắp xếp theo thứ tự từ score nhỏ đến lớn.

Ngoài những kiểu dữ liệu trên thì server này còn hỗ trợ các loại khác như: HyperLogLog, Stream, Bitmap, Bitfield…

Ứng dụng

Caching

Ứng dụng đầu tiên chính là làm bộ nhớ đệm. Nhờ tốc độ ghi nhanh nên Remote Dictionary Server có thể chia sẻ được nhiều dữ liệu giữa các ứng dụng hoặc làm database tạm thời. Ngoài ra còn có thể sử dụng để làm full page cache dành cho website để giảm độ trễ khi truy cập dữ liệu và làm tăng thông lượng. Thêm vào đó, với tính năng phản hồi request chỉ trong vài mili giây nên giúp cho việc tăng tốc độ tải trang cũng như mở rộng quy mô cho người dùng.

Một số ứng dụng phổ biến trong caching phải kể đến như: caching trang website, caching kết quả truy vấn database, caching các đối tượng được sử dụng như ảnh, file,…

Lưu trữ phiên

Việc ứng dụng lưu trữ và quản lý dữ liệu phiên cho các ứng dụng được các developer sử dụng rất phổ biến. Bởi tính năng lưu trữ dữ liệu khả dụng và độ ổn định cao. Redis còn được kết hợp với một số database khác giúp gia tăng tốc độ xử lý. Để gia tăng tốc độ phản hồi thông tin thì các lập trình viên thường sử dụng kho lưu trữ dữ liệu này để quản lý dữ liệu phiên như thông tin đăng nhập, trạng thái phiên, quản lý hồ sơ người dùng,..

Bộ đếm (Counter)

Ứng dụng tiếp theo chính là làm bộ đếm. Nhờ tính năng tăng giảm thông số nhanh chóng các dữ liệu lưu trữ trên RAM, nên set và sorted set được sử dụng để đếm lượt view của trang web hay các bảng xếp hạng trong game. Bên cạnh đó, kho lưu trữ dữ liệu này còn hỗ trợ thread set, do đó mà nó có thể đồng bộ các dữ liệu giữa các request.

Queues

Ứng dụng tiếp theo là để tạo ra hàng đợi để xử lý lần lượt các request. Nó được dùng như một message queue, nó cho phép bạn lưu trữ các danh sách và cung cấp thao tác với các phần tử trong danh sách. Nhờ khả năng xử lý dữ liệu nhanh chóng nên các lập trình viên sử dụng redis trong một số lĩnh vực như tài chính, game, công nghệ quảng cáo,…

Publish/ Subscribe ( Pub/Sub)

Một ứng dụng tiếp theo không thể thiếu là tạo kênh chia sẻ các dữ liệu. Redis hỗ trợ tạo các kênh (channel) yêu cầu hiệu năng cao hay bình luận trong thời gian thực giúp người dùng trao đổi dữ liệu giữa publisher và subscriber. Nó cũng tương tự như topic trong Apache Kafka hay channel trong Socket Cluster. Ví dụ như Pub/Sub thường được sử dụng để theo dõi các hệ thống chat hoặc kết nối bên trong mạng xã hội.

Những lợi ích nổi bật khi sử dụng Remote Dictionary Server

Một số lợi ích nổi bật phải kể đến như sau:

Kho bộ nhớ lưu trữ dữ liệu 

Lợi ích đầu tiên không thể không nhắc tới là kho bộ nhớ lưu trữ dữ liệu. Các dữ liệu được lưu trữ trực tiếp tại ổ đĩa tại máy chủ, giúp cho việc truy cập nhanh hơn với thông lượng cao và thời gian phản hồi dữ liệu cũng nhanh hơn rất nhiều. Đồng thời, nó còn làm tăng hiệu suất làm việc bởi các thao tác đọc và ghi qua ổ đĩa chỉ chưa đến 1 mili giây.

Sử dụng đơn giản và dễ dàng 

Remote Dictionary Server giúp bạn đơn giản hóa các câu lệnh với số dòng mã ít hơn để có thể truy cập, lưu trữ và sử dụng dữ liệu trong các ứng dụng. Những tác vụ dạng Hash không có cấu trúc dữ liệu thì sẽ đòi hỏi nhiều dòng code hơn để chuyển đổi định dạng này sang định dạng khác. Redis có nhiều tùy chọn và cấu trúc dữ liệu riêng để có thể tương tác và điều khiển dữ liệu của người dùng.

Khả năng sao chép và độ bền cao

Sử dụng kiến trúc bản sao-chính nên có thể hỗ trợ cho người dùng sao chép dữ liệu dễ dàng sang nhiều máy chủ bản sao. Điều này đã mang lại hiệu suất đọc cao cũng như khôi phục máy chủ nhanh hơn khi gặp sự cố kỹ thuật. Lợi ích về độ bền thì kho lưu trữ dữ liệu còn hỗ trợ sao lưu tại một thời điểm nào đó chẳng hạn như chép tập dữ liệu redis sang ổ đĩa.

Độ khả dụng cao và quy mô linh hoạt

có kiến trúc bản sao chính liên kết dạng một nút chính hoặc cụm. Kiến trúc này sẽ giúp xây dựng các giải pháp có độ khả dụng cao, độ tin cậy và hiệu suất ổn định tốt. Bạn sẽ có nhiều lựa chọn khác nhau để điều chỉnh kích thước chiều ngang hoặc chiều dọc của cụm. Hơn nữa, nếu bạn muốn phân tích theo thời gian thực thì đây là lựa chọn lý tưởng không thể bỏ qua.

Khả năng mở rộng

Với lợi thế sở hữu cộng đồng đông đảo người dùng nên kho lưu trữ dữ liệu này thường xuyên phát triển và cập nhật các công nghệ mới để hỗ trợ nhiều định dạng dữ liệu. Tuy nhiên, nếu file cache có dung lượng quá lớn sẽ dẫn đến quá tải server bởi nó hoạt động dựa trên bộ nhớ RAM chủ yếu.

(https://aptech.fpt.edu.vn/redis-la-gi.html)

About the Author

Ha Trung Vi

View all author's posts

Bài viết khác

Golang

Golang là gì? Go hay còn gọi là Golang là ngôn ngữ lập trình mã nguồn mở, được thiết kế tại Google bởi Robert Griesemer, Rob Pike, and Ken Thompson. Go có cú pháp giống với C và tất nhiên nó là ngôn ngữ lập trình biên dịch (compiled programming language) Cú pháp của ngôn […]

Elasticsearch

Elasticsearch là gì? Elasticsearch là một search engine (công cụ tìm kiếm) rất mạnh mẽ. Elasticsearch cũng có thể coi là một document oriented database, nó chứa dữ liệu giống như một database và thực hiện tìm kiếm trên những dữ liệu đó. Đại khái là thay vì bạn tìm kiếm trên file, trên các […]

Testing

Testing là gì? Thường thì mọi người hiểu khái niệm test chỉ là chạy test, chạy phần mềm nhưng đó chỉ là một phần không phải tất cả các hoạt động test. Các hoạt động test tồn tại trước và sau khi chạy PM bao gồm: lên kế hoạch và kiểm soát, chọn điều kiện […]

Web Security

Có rất nhiều lý do để học về web security như: Bạn là một người dùng lo lắng về việc thông tin cá nhân bị rò rỉ. Bạn là một web developer muốn làm cho trang web của bạn bảo mật hơn. Bạn là một web developer đang tìm việc, và bạn muốn sẵn sàng […]

Cache

Trong vài năm trở lại đây, công nghệ thông tin đã trở thành bàn đạp cho sự cải thiện mạnh mẽ cho vô số các loại hình kinh doanh. Song song, kiến trúc của các phần mềm cũng ngày càng trở nên phức tạp và số lượng người dùng của chúng đã và đang tăng […]

Docker

Docker là gì? Docker là một nền tảng phần mềm giúp bạn building, deploying và running ứng dụng dễ dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa). Docker ban đầu Docker  được viết bằng PyDockerthon, hiện tại đã chuyển sang Golang. Docker đóng gói phần mềm thành các container tiêu […]