Skip to main content

Redis overview

Redis là gì?

Redis là tên viết tắt của Remote Dictionary Server (Máy chủ từ điển từ xa), là một phần mềm mã nguồn mở được dùng để lưu trữ một cách tạm thời trên bộ nhớ (hay còn gọi là cache data) và giúp truy xuất dữ liệu một cách nhanh chóng. Do tốc độ truy xuất dữ liệu vượt trội, Redis thường được chọn sử dụng cho hoạt động lưu trữ bộ nhớ đệm Caching, quản lý phiên, trò chơi, bảng xếp hạng, phân tích theo thời gian thực, dữ liệu không gian địa lý, ứng dụng đặt xe, trò chuyện/nhắn tin, phát trực tiếp nội dung phương tiện và pub/sub.

redis.png

Lợi ích của Redis

1. Lưu trữ dữ liệu trên RAM

Toàn bộ dữ liệu Redis nằm trong bộ nhớ chính của máy chủ, trái với cơ sở dữ liệu, chẳng hạn như PostgreSQL, Cassandra, MongoDB... thường lưu phần lớn dữ liệu trên ổ đĩa hoặc ổ SSD. So với cơ sở dữ liệu trên ổ đĩa truyền thống trong đó phần lớn các tác vụ đều yêu cầu truy cập qua lại tới ổ đĩa, kho dữ liệu trong bộ nhớ chẳng hạn như Redis không phải chịu hình phạt này. Do đó kho dữ liệu kiểu này có thể hỗ trợ thêm được khá nhiều tác vụ và có thời gian phản hồi nhanh hơn. Kết quả là – hiệu suất nhanh thấy rõ với các tác vụ đọc hoặc ghi thông thường mất chưa đầy một mili giây và hỗ trợ hàng triệu tác vụ mỗi giây.

2. Cấu trúc dữ liệu linh hoạt

Khác với những kho dữ liệu khóa-giá trị đơn giản có cấu trúc dữ liệu giới hạn, Redis có nhiều cấu trúc dữ liệu khác nhau nên đáp ứng được nhu cầu ứng dụng của bạn. Kiểu dữ liệu Redis gồm có:

  • Chuỗi – văn bản hoặc dữ liệu nhị phân có kích thước lên tới 512MB
  • Danh sách – một tập hợp các Chuỗi được sắp xếp theo thứ tự như khi được thêm vào
  • Tập – một tập hợp chưa được sắp xếp các chuỗi, có khả năng giao cắt, liên kết và khác với các kiểu Tập khác
  • Tập được sắp xếp – Tập được sắp xếp theo giá trị
  • Mã hash – một cấu trúc dữ liệu dùng để lưu trữ danh sách các trường và giá trị
  • Bitmap – một kiểu dữ liệu cho phép thực hiện các tác vụ quy mô bit
  • HyperLogLogs – một cấu trúc dữ liệu xác suất để ước tính các thành phần duy nhất trong một tập dữ liệu

3. Đơn giản và dễ sử dụng

Redis đơn giản hóa mã bằng cách cho phép bạn viết ít dòng lệnh hơn để lưu trữ, truy cập và sử dụng dữ liệu trên ứng dụng của bạn. Ví dụ: nếu ứng dụng của bạn có dữ liệu được lưu trên một bảng băm và bạn muốn lưu dữ liệu đó trên kho dữ liệu – bạn chỉ cần sử dụng cấu trúc dữ liệu mã hash của Redis để lưu dữ liệu đó. Tác vụ tương tự trên kho dữ liệu không có cấu trúc dữ liệu mã hash sẽ cần nhiều dòng mã để chuyển đổi từ định dạng này sang định dạng khác. Redis được trang bị cấu trúc dữ liệu riêng và nhiều tùy chọn để điều khiển và tương tác với dữ liệu của bạn. Trên một trăm máy khách mã nguồn mở được cung cấp cho nhà phát triển Redis. Các ngôn ngữ được hỗ trợ gồm có Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go và nhiều ngôn ngữ khác.

4. Sao chép và độ bền

Redis sử dụng kiến trúc bản sao-chính và hỗ trợ sao chép không đồng bộ trong đó có thể sao chép dữ liệu sang nhiều máy chủ bản sao. Việc này mang lại hiệu suất đọc cao hơn (vì có thể chia tách các yêu cầu giữa các máy chủ) và tốc độ khôi phục nhanh hơn khi máy chủ chính gặp sự cố. Về độ bền, Redis hỗ trợ sao lưu tại một thời điểm nào đó (chép tập dữ liệu Redis sang ổ đĩa).

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

Redis có kiến trúc bản sao-chính theo cấu trúc liên kết dạng một nút chính hoặc cụm. Kiến trúc này cho phép bạn xây dựng những giải pháp có độ khả dụng cao, đảm bảo hiệu suất ổn định và tin cậy. Khi cần điều chỉnh kích thước cụm, bạn có nhiều tùy chọn khác nhau để thay đổi quy mô theo chiều dọc và thay đổi quy mô theo chiều ngang. Việc này cho phép tăng cụm theo nhu cầu của bạn.

6. Khả năng mở rộng

Redis là dự án mã nguồn mở được một cộng đồng đông đảo ủng hộ. Không có giới hạn về nhà cung cấp hoặc công nghệ vì Redis được có tính tiêu chuẩn mở, hỗ trợ các định dạng dữ liệu mở và có tập hợp máy khách phong phú.

Trường hợp sử dụng phổ biến của Redis

1. Lưu trữ bộ nhớ đệm

Redis là lựa chọn tuyệt vời để triển khai một bộ nhớ đệm trong bộ nhớ có độ khả dụng cao để giảm độ trễ truy cập dữ liệu, tăng năng suất và giảm tải cho cơ sở dữ liệu quan hệ hoặc NoSQL và ứng dụng của bạn. Redis có thể phục vụ những mục dữ liệu thường xuyên được yêu cầu với thời gian phản hồi chưa đến một mili giây và cho phép bạn dễ dàng thay đổi quy mô nhằm đáp ứng mức tải cao hơn mà không cần gia tăng phần backend có chi phí tốn kém hơn. Một số ví dụ phổ biến về nhớ đệm khi sử dụng Redis bao gồm nhớ đệm kết quả truy vấn cơ sở dữ liệu, nhớ đệm phiên lâu bền, nhớ đệm trang web và nhớ đệm các đối tượng thường xuyên được sử dụng như ảnh, tập tin và siêu dữ liệu.

2. Trò chuyện, nhắn tin và danh sách tác vụ chờ xử lý

Redis hỗ trợ Pub/Sub (cấu trúc gửi nhận tin nhắn trong đó người gửi và người nhận không biết nhau) với tính năng khớp cấu trúc và nhiều cấu trúc dữ liệu như danh sách, tập được sắp xếp và mã hash. Việc này cho phép Redis hỗ trợ các phòng trò chuyện hiệu suất cao, luồng bình luận theo thời gian thực, nguồn cấp mạng xã hội và giao tiếp giữa các máy chủ. Cấu trúc dữ liệu Danh sách của Redis giúp dễ dàng triển khai một danh sách tác vụ chờ xử lý có tải trọng nhẹ. Danh sách cung cấp các hoạt động nguyên tử cũng như tính năng chặn, giúp cho chúng phù hợp với nhiều ứng dụng yêu cầu phải có trình chuyển tiếp tin nhắn tin cậy hoặc danh sách liên kết vòng.

3. Bảng xếp hạng game

Redis là giải pháp hay được các nhà phát triển game dùng để xây dựng bảng xếp hạng theo thời gian thực. Chỉ cần sử dụng cấu trúc dữ liệu Tập được sắp xếp của Redis, cấu trúc dữ liệu này đảm bảo tính duy nhất của các thành phần trong khi vẫn duy trì danh sách được sắp xếp theo điểm số của người dùng. Tạo danh sách xếp hạng theo thời gian thực dễ thực hiện như khi cập nhật điểm số của người dùng mỗi khi có thay đổi. Bạn cũng có thể sử dụng Tập được sắp xếp để xử lý dữ liệu chuỗi thời gian bằng cách dùng dấu thời gian làm điểm số.

4. Kho lưu trữ phiên

Redis là kho dữ liệu trong bộ nhớ có độ khả dụng và độ bền cao, thường được các nhà phát triển ứng dụng sử dụng để lưu trữ và quản lý dữ liệu phiên cho các ứng dụng quy mô internet. Redis có độ trễ chưa đến một mili giây, có quy mô và độ đàn hồi cần thiết để quản lý dữ liệu phiên chẳng hạn như hồ sơ người dùng, thông tin xác thực đăng nhập, trạng thái phiên và tùy chỉnh theo ý muốn người dùng.

5. Phát nội dung giàu dữ liệu

Redis cung cấp kho dữ liệu trong bộ nhớ, có tốc độ truy cập nhanh để đáp ứng các trường hợp sử dụng phát trực tiếp. Có thể sử dụng Redis để lưu trữ siêu dữ liệu về hồ sơ người dùng và xem lịch sử, thông tin/mã thông báo xác thực cho hàng triệu người dùng và hiển thị tập tin để cho phép các Mạng truyền tải nội dung (CDN) phát video cho hàng triệu người dùng di động và máy tính để bàn cùng một lúc.

6. Dữ liệu không gian địa lý

Redis cung cấp cấu trúc dữ liệu trong bộ nhớ, được tích hợp sẵn cho mục đích cụ thể và các toán tử để quản lý dữ liệu không gian địa lý theo thời gian thực ở quy mô và tốc độ mong muốn. Các lệnh như GEOADD, GEODIST, GEORADIUS và GEORADIUSBYMEMBER để lưu trữ, xử lý và phân tích dữ liệu không gian địa lý theo thời gian thực giúp cho dữ liệu không gian địa lý trở nên dễ dàng và nhanh chóng khi sử dụng Redis. Bạn có thể sử dụng Redis để thêm các tính năng dựa trên địa điểm như thời gian lái xe, quãng đường lái xe và các điểm quan tâm cho ứng dụng của bạn.

7. Machine Learning

Các ứng dụng kiểu mới, chịu sự chi phối của dữ liệu yêu cầu machine learning phải có khả năng nhanh chóng xử lý được dữ liệu theo khối lượng lớn, đa dạng, tốc độ cao và tự động hóa quá trình ra quyết định. Đối với các trường hợp sử dụng như phát hiện lỗi trong các dịch vụ game và tài chính, đấu thầu theo thời gian thực trong công nghệ quảng cáo và mai mối trong hẹn hò và đi chung xe, khả năng xử lý dữ liệu trực tiếp và ra quyết định trong vòng vài chục mili giây có ý nghĩa hết sức quan trọng. Redis cung cấp cho bạn kho dữ liệu trong bộ nhớ, có tốc độ truy cập nhanh để xây dựng, đào tạo và triển khai mô hình machine learning một cách nhanh chóng.

8. Phân tích theo thời gian thực

Có thể dùng Redis kết hợp với các giải pháp phát trực tuyến như Apache Kafka và Amazon Kinesis làm kho dữ liệu trong bộ nhớ để tiêu thụ, xử lý và phân tích dữ liệu thời gian thực với độ trễ chưa đến một mili giây. Redis là lựa chọn lý tưởng cho các trường hợp sử dụng phân tích theo thời gian thực chẳng hạn như phân tích mạng xã hội, nhắm mục tiêu quảng cáo, cá nhân hóa và IoT.