Redis là gì? Vì sao nên chọn Redis?

Như em được biết Redis là chương trình lưu trữ dữ liệu được sử dụng rất phổ biến hiện nay. Tuy nhiên, em không rõ Redis là gì mà được lựa chọn sử dụng nhiều như thế? Redis có ưu điểm hay nhược điểm như thế nào để người dùng có thể cân nhắc trước khi sử dụng cho phù hợp không?
Nhờ các anh chị có chuyên môn giúp em giải đáp với ạ.

Redis là gì? Vì sao nên chọn Redis?

Logo Redis
 

Redis là gì?

Redis là chương trình hỗ trợ lưu trữ dữ liệu dạng key hay value, hệ thống lưu trữ key/value này rất mạnh và phổ biến hiện nay.
Redis hỗ trợ các kiểu dữ liệu chủ yếu như String, List, Set, Zsets,.....
Ngoài việc lưu trữ key-value trên RAM giúp tối ưu performance, redis còn giúp sao lưu dữ liệu trên đĩa cứng và phục hồi dữ liệu khi gặp sự cố.
Redis là một phần mềm mã nguồn mở có chức năng lưu trữ dữ liệu trên bộ nhớ - cache data, giúp truy xuất dữ liệu nhanh chóng. Do tốc độ truy xuất dữ liệu nhanh chóng và vượt trội hơn cơ sở dữ liệu thông thường như MySQL nên redis được lựa chọn sử dụng rất nhiều trong kỹ thuật. 
Redis là một cơ sở dữ liệu nhóm NoSQL, được phát hành bởi Salvatore Sanfilippo vào 10/04/2009.
Vì Redis lưu trên RAM nên Redis theo tác nhanh vì không phải chờ ổ cứng truyền thống. Redis cho phép tạo cấu trúc dữ liệu phù hợp với nhu cầu của bạn. Redis có thể đếm lượng khách truy cập, biết thông tin lưu trữ thông tin người dùng. Khi bạn cần nhanh, redis sẽ rất hữu dụng.

redis là gì

Vì sao nên chọn Redis?

Redis giúp thêm mới, cập nhật và loại bỏ dữ liệu nhanh chóng

Redis có đặc điểm giống như Memcached như: 

  + Lưu trữ dạng key /value. 
  + Tất cả data được lưu trên RAM
  + Key có thể hết hạn hoặc không 
  + Nhanh, nhẹ nhàng

Redis có thêm nhiều đặc điểm, chức năng khác mang lại lợi ích khi sử dụng và triển khai:

 + Persistence (hỗ trợ dữ liệu trên đĩa cứng)
 + Hỗ trợ nhiều Databases
 + Truy vấn dữ liệu theo Key
 + Hỗ trợ counters dữ liệu kiểu integer
 + Có cấu trúc dữ liệu cấp cao
 + Thao tác dữ liệu chuyên biệt
 + Tự động phân trang danh sách
 + Nhân rộng master-slave
Redis lấy dữ liệu và nạp dữ liệu trên RAM, nhưng một thời điểm dữ liệu có thể được lưu trữ trên disk
Việc cài đặt redis với kích thước như thế nào là tùy thuộc vào bạn. Redis không sử dụng nhiều hơn nó cần, nên redis sẽ trả lại cho người dùng bộ nhớ mà nó không sử dụng.
Redis được xây dựng với mục đích là làm việc với dữ liệu không gian địa lý real-time. Người dùng có thể thực hiện các thao tác tìm khoảng cách giữa hai yếu tố và tìm các yếu tố trong một khoảng cách nhất định của 1 điểm.
Redis cho phép người dùng tạo ra nhiều bản sao của nó, giúp người dùng mở rộng quy mô đọc cơ sở dữ liệu và có tính khả dụng cao.
Điểm khác biệt dễ nhận thấy của Redis là: Key là một string nhưng value thì không giới hạn ở một string mà có thể là List, Sets, Sorted sets, ....
Redis hỗ trợ việc remove key từ một database tới database khác.
Mặc định thì DB 0 sẽ được lựa chọn cho mỗi lần kết nối, nhưng khi sử dụng lệnh SELECT redis có thể select/create một database khác. Thao tác MOVE có thể chuyển một item từ một database tới database khác một cách tự động.
Redis lấy và nạp dữ liệu rất nhanh do redis hỗ trợ nhiều lệnh mang tính chất chuyên biệt.
Redis hỗ trợ mở rộng master-slave nếu chúng ta muốn sự an toàn hoặc mở rộng, co giãn trong việc lưu trữ data

redis là gì

Persistent redis - hỗ trợ ghi dữ liệu trên đĩa cứng

Bên cạnh việc lưu key-value trên RAM, redis còn định kỳ ghi dữ liệu trên đĩa cứng
Có 2 loại file được ghi trên đĩa cứng là: RDB (Redis DataBase file) và AOF (Append Only File). Trong đó:
RDB tạo và sao lưu snapshot của database vào ổ cứng sau một khoảng thời gian nhất định và lặp lại.
Ưu điểm của RDB là cho phép người dùng lưu các version khác nhau của database, điều này rất thuận tiện khi bất ngờ có sự cố xảy ra. Lưu trữ data vào file cố định giúp người dùng có thể di chuyển data đến các máy chủ, trung tâm dữ liệu khác nhau.
RDB tối ưu hóa hiệu năng của Redis bằng việc hỗ trợ thao tác trên disk I/O. Redis chỉ làm các thao tác trên RAM như thêm/xoá/đọc dữ liệu.
Khi khởi động lại server, RDB sẽ có tốc độ cao hơn là dùng AOF khi làm việc với lượng data lớn.
Nhược điểm của RDB là khi người dụng tạo snapshot 5 phút 1 lần redis không hoạt động, dữ liệu sẽ mất trong những phút cuối.

AOF có chức năng lưu lại tất cả các thao tác write mà hệ thống nhận được, sau đó các thao tác này sẽ được chạy lại khi khởi động lại hoặc tái thiết lập dataset ban đầu.

Ưu điểm khi sử dụng AOF là đảm bảo dataset bền vững hơn so với RDB. AOF có cơ chế quản lý và sửa chữa lỗi. Redis cung cấp tiến trình chạy nền và ghi lại file AOF khi dung lượng file quá lớn. Khi có file mới được ghi xong, Redis thực hiện thao tác ghi log trên file mới trong khi server vẫn thực hiện các thao tác trên file cũ.
Nhược điểm của AOF là file AOF lớn hơn file RDB khi cùng 1 dataset. Đôi khi AOF chậm hơn RDB. Đôi khi, AOF không thể tái tạo chính xác dataset khi restart lại redis.

Data model

Redis không có table, Redis chỉ thực hiện lưu trữ data dưới dạng key-value.
Memcache cũng làm tương tự, nhưng các kiểu dữ liệu của memcache bị hạn chế chứ không được đa dạng như Redis nên không hỗ trợ được nhiều thao tác cho người dùng.
Dưới đây là một số kiểu dữ liệu mà Redis dùng để lưu value là: STRING, LIST, SET, HASH, ZSET.

Redis và Memcached

Redis và Memcached đều nhanh và mạnh, đều lưu trữ dữ liệu trong bộ nhớ RAM và rất hữu ích.
Cả redis và memcached đều lưu trữ các kết quả dữ liệu giúp tăng tốc ứng dụng cho người dùng.
Memcached lưu tất cả dữ liệu trên RAM, chỉ có dữ liệu dạng key/value. Memcached là tầng cache nên không có tính persistent, rất khó backup dữ liệu, vì thế dữ liệu rất dễ mất. Khi xảy ra tình trạng mất dữ liệu, memcached sẽ đẩy những key cũ hoặc ít dùng ra trước.
Memcached đa luồng nên memcached có khả năng sử dụng nhiều lõi xử lý, có nghĩa là người dùng có thể xử lý nhiều hoạt động hơn bằng việc gia tăng công suất tính toán.
Có thể thấy, redis phần nào có những ưu điểm như memcached nhưng có sự cải tiến và tăng khả năng lưu trữ, xử lý khi xảy ra sự cố.
Trên đây là những chia sẻ về Redis là gì, vì sao redis được sử dụng phổ biến hiện nay và những kiểu dữ liệu mà redis hỗ trợ người dùng thao tác nhanh.
Hy vọng những chia sẻ trên đây hữu ích với bạn trong quá trình tìm hiểu về Redis.