Redis là hệ thống lưu trữ key-value với rất nhiều tính năng và được sử dụng rộng rãi. Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản (hash, list, set, sorted set, string), đồng thời cho phép scripting bằng ngôn ngữ lua.

Bên cạnh lưu trữ key-value trên RAM với hiệu năng cao, redis còn hỗ trợ lưu trữ dữ liệu trên đĩa cứng (persistent redis) cho phép phục hồi dữ liệu khi gặp sự cố. Các chế độ động bộ snapshots hoặc append only. Ngoài tính năng replicatation (sao chép giữa master-client), tính năng cluster (sao lưu master-master) cũng đang được phát triển.

1. Sự khác biệt của Redis

Có hai điểm khác biệt chính nhất so với các kho lưu trữ dữ liệu dạng key-value:

  1. Redis là một nhánh tiến hóa trong cơ sở dữ liệu dạng key-value mà các giá trị có thể chứa các loại dữ liệu phức tạp hơn (cấu trúc dữ liệu). Các kiểu dữ liệu lưu trữ của Redis có liên quan chặt chẽ với các cấu trúc dữ liệu và trả về trực tiếp cho lập trình viên mà không phải vận chuyển qua các tầng lớp trừu tượng nào cả.
  2. Bên cạnh việc lưu key-value trên bộ nhớ RAM, Redis có 2 background threads chuyên làm nhiệm vụ định kỳ ghi dữ liệu lên đĩa cứng: RDB và AOF. Việc lưu dữ liệu xuống ổ đĩa khiến cho Redis trở thành một csdl thực sự, chứ không chỉ là một caching server đơn thuần, không bị mất khi phải restart.

2. Bộ nhớ Redis sử dụng

Theo redis faq, một vài mẫu được thống kê (máy chủ 64 bit) như sau:

  • Mặc định là mất ~ 1MB
  • 1M small keys -> String value sử dụng ~ 100MB
  • 1M Keys -> Hash value, lưu trữ 5 trường dữ liệu, sử dụng ~ 200MB

Hệ thống 64 bit sử dụng bộ nhớ nhiều hơn đáng kể so với các hệ thống 32 bit để lưu trữ cùng bộ dữ liệu, đặc biệt là khi keys và values là nhỏ, bởi vì con trỏ chiếm 8 bytes trên hệ thống 64 bit. Nhưng tất nhiên lợi thế là bạn có rất nhiều bộ nhớ trong hệ thống 64 bit, do đó để chạy các máy chủ Redis lớn thì các yêu cầu về cấu hình có thể nhiều hơn. Nếu có thể hãy sử dụng Redis 32 bit.

Theo bài đánh giá trên myNoSQL, bạn có thể xem dữ liệu tóm tắt ở hình dưới đây. Tham khảo: http://nosql.mypopescu.com/post/1010844204/redis-memory-usage

tumblr_l7qarx5ibg1qappj8

Ngoài ra, Redis cũng cung cấp cơ chế những cơ chế mạnh mẽ khác, chẳng hạn như pub/sub – rất thích hợp cho việc tạo kênh chat.

Redis là một sự lựa chọn tuyệt vời khi ta cần đến một server lưu trữ dữ liệu đòi hỏi tính mở rộng cao (scaleable) và chia sẻ bởi nhiều tiến trình, nhiều ứng dụng và nhiều server khác nhau. Chỉ riêng cơ chế tương tác giữa các tiến trình đã cực kỳ khó nhằn rồi. Do đó việc ta có thể tương tác cross-platform, cross-server, và cross-application đã làm Redis trở thành một lựa chọn đúng đắn cho rất rất nhiều công việc khác nhau. Tốc độ cực cao của Redis cũng có thể được lợi dụng để làm caching layer

Liên kết tham khảo

About The Author

  • Ngô Phước Hướng Thiện

    Cho e hỏi là trong các hệ CSDL NoSQL, thì cái nào phù hợp nhất để xử lý dữ liệu lớn trong thời gian nhanh nhất ạ! Ví dụ như e muốn phân tích một lượng lớn thông tin!

    • Bạn có thể tìm hiểu thêm về các phiên bản NoSQL cụ thể như Cassandra, HBase, MongoDB, Riak. Có vẻ như Riak đang được người dùng đánh giá cao. Nhưng cùng tùy vào định hướng của mỗi người phát triển mà lựa chọn. Có thể chọn HBase do nó có một framework mạnh mẽ là Hadoop. Nếu bạn mới vào lĩnh vực Big Data hãy thử dùng Hadooop xem sao 😀