Redis là gì? Vì sao bạn nên lựa chọn sử dụng redis?

0
redis là gì
Redis là gì?
Redis là gì? Vì sao bạn nên lựa chọn sử dụng redis?
5 (100%) 1 vote

Redis là gì? Redis mang đến những lợi ích nào? Đây liệu có phải là  giải pháp cho bộ nhớ ngắn hạn và máy chủ linh hoạt hay không? Cùng tìm hiểu về Redis trong bài viết này nhé!

redis là gì
Redis là gì?

Redis là gì?

Redis (viết tắt của Remote Dictionary Server) là một mã nguồn mở được dùng để lưu trữ các dữ liệu có cấu trúc, có thể sử dụng như một bộ nhớ cache, database hay một message broker

  • Redis là cơ sở dữ liệu mang phong cách NoSQL, lưu trữ dữ liệu dưới dạng KEY-VALUE với nhiều tính năng được sử dụng rộng rãi. Nó có thể hỗ trợ nhiều kiểu dữ liệu như: hashes, strings, lists, sets, sorted. Đồng thời có thể cho phép bạn scripting bằng ngôn ngữ Lua.
  • NoSQL là một khái niệm về một lớp các hệ cơ sở dữ liệu không sử dụng mô hình quan hệ (RDBMS). RDBMS vốn dĩ tồn tại khá nhiều nhược điểm như có hiệu năng không tốt khi bạn kết nối dữ liệu nhiều bảng lại hoặc khi dữ liệu trong một bảng là quá lớn.
  • Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ sơ sở dữ liệu mới: phân tán (distributed) + không ràng buộc (non-relational).
redis là gì
Redis – nơi lưu trữ dữ liệu

Sự ra đời của Redis

  • Lý do Redis ra đời là do tác giả của Redis – Salvatore Sanfilippo (nickname: Antirez) đã cố gắng làm những công việc gần như là không thể với SQL Database!
  • Server của Antirez nhận 1 lượng lớn thông tin dữ liệu từ nhiều trang web khác nhau thông qua JavaScript tracker, lưu trữ page view cho từng trang và hiển thị chúng theo thời gian thực cho user, kèm theo đó là lưu trữ cả 1 lượng nhỏ lịch sử hiển thị của trang web. Khi số lượng page view tăng đến hàng ngàn page trên 1 giây, Antirez không thể tìm được cách tiếp cận nào thực sự tối ưu cho việc thiết kế database của mình. Tuy nhiên, anh ta đã nhận ra rằng, việc lưu trữ 1 danh sách bị giới hạn các bản ghi không hề khó khăn. Từ đó, ý tưởng lưu trữ thông tin trên RAM và quản lý những page views dưới dạng native data với thời gian push và pop là hằng số được ra đời. Antirez bắt tay vào việc tạo dựng prototype bằng C, bổ sung tính năng lưu trữ thông tin trên đĩa cứng và từ đó Redis ra đời.

Ưu điểm của Redis là gì?

redis là gì
Vai trò của Redis

Ưu điểm thu hút các lập trình viên lựa chọn Redis là gì? Ứng dụng redis, người dùng sẽ được “tận hưởng” nhiều ưu điểm không thể nào lý tưởng hơn:

  • Redis hỗ trợ người dùng có thể thêm mới hoặc loại bỏ các dữ liệu trong thời gian ngắn.
  • Redis có thể nhận và ghi dữ liệu lên Ram và còn có thể xuất hiện trên Disk tại cùng một thời điểm.
  • Key của Redis là một string nhưng được hỗ trợ sử dụng linh hoạt đa dạng các value như Sorted sets, List, Sets,…
  • Dễ dàng di chuyển các key từ cơ sở dữ liệu này sang cơ sở dữ liệu khác.
  • Redis được trang bị khá nhiều lệnh đặc biệt, vì thế mà Redis rất nhanh trong quá trình lấy và ghi dữ liệu.
  • Tính năng Master – slave thích hợp cho những ai muốn gia tăng sự an toàn cho dữ liệu, mở rộng hoặc thu hẹp không gian lưu trữ Data.
  • Người dùng có thể tìm kiếm dữ liệu một cách nhanh chóng nhất.
  • Redis cho phép người dùng sử dụng rất linh hoạt nhiều kiểu dữ liệu khác nhau.
  • Người dùng có thể để key tự động xóa ở một thời gian nhất định nào đó.

Tuy có rất nhiều ưu điểm nhưng Redis không phải không có những hạn chế. Vậy nhược điểm của Redis là gì? Khi lượng file cache quá lớn thì máy chủ Server sẽ làm thiếu Ram. 

Các ứng dụng của Redis

Biết được redis là gì rồi thì chúng ta hãy cùng tìm hiểu các ứng dụng của Redis. Ngoài tính năng lưu trữ KEY-VALUE trên RAM thì Redis còn hỗ trợ thêm tính năng sắp xếp, query, backup dữ liệu trên đĩa cứng cho phép bạn có thể khôi phục dữ liệu khi hệ thống gặp sự cố…và có thể nhân bản (Chạy cùng lúc nhiều Server Redis).

  • Caching: Sử dụng làm bộ nhớ đệm. Nhờ tốc độ đọc ghi siêu nhanh mà Redis có thể làm bộ nhớ đệm, là nơi chia sẻ dữ liệu giữa các ứng dụng hoặc làm database tạm thời. Ngoài ra Redis có thể sử dụng như một Full Page Cache cho website. Cũng vì tính nhất quán của Redis, cho nên dù restart Redis thì người dùng cũng không có cảm nhận sự lag hay chậm khi tải trang.
  • Counter: Sử dụng làm bộ đếm. Với thuộc tính tăng giảm thông số cực nhanh trong khi dữ liệu được lưu trên RAM, sets và sorted sets được sử dụng để thực hiện đếm lượt view của một website, ví dụ như các bảng xếp hạng trong game. Redis hỗ trợ thread safe nên do đó, nó có thể đồng bộ dữ liệu giữa các request.
  • Publish/Subscribe (Pub/Sub): Tạo kênh chia sẻ dữ liệu. Redis hỗ trợ tạo các channel có thể trao đổi dữ liệu giữa publisher và subscriber giống như channel trong Socket Cluster hay như topic trong Apache Kafka. Ví dụ: Pub/Sub được sử dụng để theo dõi các kết nối trong mạng xã hội hoặc những hệ thống chat.
  • Queues: Tạo hàng đợi để lần lượt xử lý các request. Redis cho phép người dùng lưu trữ theo list và cung cấp rất nhiều thao tác với các phần tử trong list, vì vậy Redis còn được sử dụng như một message queue.

Persistent redis là gì?

Bên cạnh việc lưu key-value trên bộ nhớ RAM, Redis còn có 2 background threads chuyên làm nhiệm vụ ghi dữ liệu lên đĩa cứng định kỳ.

Có 2 loại file được ghi vào đĩa cứng:

RDB (Redis DataBase file)

  • RDB thực hiện tạo và sao lưu snapshot của DB vào ổ cứng sau những khoảng thời gian nhất định.
Redis DataBase file
RDB (Redis DataBase file)

– Ưu điểm

  • RDB cho phép người dùng lưu trữ các version khác nhau của DB, rất thuận tiện nếu có sự cố xảy ra.
  • Bằng việc lưu trữ data vào 1 file cố định, người dùng có thể dễ dàng di chuyển data đến các data centers hay máy chủ khác nhau.

Khi restart server, dùng RDB làm việc với lượng data lớn sẽ có tốc độ cao hơn là dùng AOF.

– Nhược điểm

RDB sẽ không phải là lựa chọn tốt nhất nếu bạn muốn giảm thiểu tối đa nguy cơ mất mát dữ liệu.

Thông thường người dùng sẽ setup để tạo RDB snapshot 5 phút 1 lần (có thể nhiều hơn). Do vậy, trong trường hợp có sự cố, Redis không thể hoạt động thì dữ liệu trong những phút cuối sẽ bị mất.

RDB cần dùng fork() để tạo tiến trình con phục vụ cho thao tác disk I/O. Trong trường hợp dữ liệu quá lớn, quá trình fork có thể tốn thời gian và server sẽ không thể đáp ứng được request từ client trong khoảng vài millisecond hoặc thậm chí là 1 second tùy thuộc vào lượng data và hiệu năng CPU.

AOF (Append Only File)

AOF lưu lại tất cả các thao tác write mà server nhận được, những thao tác này sẽ được chạy lại khi ta restart server hoặc tái thiết lập dataset ban đầu.

– Ưu điểm

Sử dụng AOF giúp đảm bảo dataset được bền vững hơn khi dùng RDB. Người dùng có thể config để Redis ghi log lại theo từng câu query hoặc mỗi giây 1 lần.

Redis ghi log AOF theo kiểu thêm vào cuối file có sẵn, do đó tiến trình seek trên file có sẵn là không cần thiết. Ngoài ra, kể cả khi chỉ ghi 1 nửa câu lệnh trong file log (có thể do ổ đĩa bị full), Redis vẫn có cơ chế quản lý và sửa chữa lỗi này (redis-check-aof).

Redis cung cấp tiến trình chạy nền, cho khả năng ghi lại file AOF khi dung lượng file quá lớn.

– Nhược điểm

File AOF bao giờ cũng lớn hơn file RDB với cùng 1 dataset.

AOF có thể chậm hơn RDB tùy vào cách thức thiết lập khoảng thời gian cho việc sao lưu dữ liệu vào ổ cứng. Tuy nhiên, nếu bạn thiết lập log 1 giây 1 lần có thể đạt hiệu năng tương đương với RDB.

Developer của Redis đã từng gặp phải bug của AOF (mặc dù là rất hiếm), đó là lỗi AOF không thể tái tạo lại chính xác dataset khi ta restart Redis. Lỗi này rất may chưa gặp phải khi làm việc với RDB bao giờ

>>> Bài viết tham khảo: Mặt tròn để tóc gì? Gợi ý những kiểu tóc nam, nữ cho người mặt tròn

Redis là gì, ưu nhược điểm tồn tại của Redis cũng đã được chúng tôi thông tin tới bạn đọc trong bài viết. Các bạn có thể tham khảo sử dụng Redis để trải nghiệm những tính năng hấp dẫn trên nền tảng này.