Redis là gì?
Có rất nhiều các bài viết học thuật trên web nhưng thật khó để tìm một tài nguyên tốt giải thích công nghệ là gì hoặc làm gì. Redis là một trong số đó. Mục tiêu của mình trong bài viết này là giải thihs redis là gì một cách đơn giản nhất.
Sau khi đọc bài này, bạn sẽ có những hiểu biết cơ bản về Redis là gì, nó hoạt động như thế nào và khi nào thì sử dụng nó. Đối với những người quan tâm đến việc tìm hiểu sâu hơn, tôi sẽ có một số bài viết cụ thể ứng dụng của redis trong hệ thống production. Hãy chú ý theo dõi website toiyeuit.com nhé.
Hãy bắt đầu với những điều cơ bản.
Định nghĩa
Redis là phần mềm mã nguồn mở có khả năng lưu trữ dữ liệu có cấu trúc. Dữ liệu lưu trong redis dạng KEY-VALUE và lưu trong RAM
Vậy dùng redis có ý nghĩa gì?
REDIS cho phép bạn lưu trữ các cặp key-value trên RAM của mình. Vì truy cập RAM nhanh hơn 150.000 lần so với truy cập đĩa HDD và nhanh hơn 500 lần so với truy cập SSD, điều đó có nghĩ là gì? – TỐC ĐỘ CAO
Tại sao lại dùng ram? Lấy đâu ra ram để chạy các ứng dụng khác?
Bình thường khi ta sử dụng cơ sở dữ liệu (SQL chẳng hạn) ta vẫn lưu trử trên ổ đĩa cứng. Hãy tưởng tượng truy cập một cơ sở dữ liệu để đọc 10.000 bản ghi. Nếu dữ liệu được lưu trữ trên đĩa, nó sẽ mất trung bình 30 giây, trong khi mất khoảng 0,0002 giây để đọc từ RAM. Redis thường được tạp trên một máy chủ riêng hoặc set giới hạn bộ nhớ nhất định được sử dụng trên máy chủ dùng chung.
Đọc/ghi trên ram thì nhanh thật, nhưng mất điện thì sao?
Để ngăn chặn việc mất dữ liệu xảy ra, có một mô-đun được tích hợp sẵn để ghi trạng thái trong bộ nhớ vào file trên đĩa trong những trường hợp nhất định. Các file này được tải lại khi khởi động lại redis. Vì vậy, không mất dữ liệu.
Ngoài ra, để tăng tính sẵn sàng và khả năng chịu lỗi của hệ thống. Redis có thể cấu hình theo dạng Cluster với kỹ thuật Master-Slave giúp hệ thống redis luôn sẵn sàng đáp ứng. Các bạn có thể theo dõi thêm tại Bài Viết Này.
Redis là từ viết tắt của RE mote DI ctionary S erver.
Nói cách khác, đó là một công cụ cho phép bạn có một cơ sở dữ liệu được lưu trữ trên RAM của mình.
Sử dụng Redis ở đâu và khi nào?
Vì Redis nhanh như chớp nên nó chủ yếu được sử dụng cho mục đích lưu vào bộ nhớ đệm. Đây là thế mạnh lớn nhất của Redis vì nó cung cấp nhiều loại dữ liệu khác nhau với cấu trúc từ điên (key-value) của nó.
Điều đó có nghĩa là, chúng ta có thể sử dụng Redis để lưu vào bộ đệm đầy đủ các trang có lưu lượng truy cập cao và nội dung tĩnh. Nếu bản thân trang có xu hướng thay đổi hoặc nội dung được tạo động, thì nó không nên được lưu vào bộ nhớ cache trong mọi trường hợp bất kể đó là Redis hay Memcached. Nếu trang chủ yếu chứa nội dung tĩnh hoặc nội dung được làm mới sau mỗi x khoảng thời gian, thì chúng ta có thể lưu vào bộ nhớ cache của trang đó và nó sẽ được phục vụ ngay lập tức!
>>> Một trong cá ứng dụng của redis là Full Page Cache (FPC).
Ngoài cache file tĩnh, Redis còn có thể dùng để lưu session (phiên đăng nhập). Không giống như Memcached không có tính bền bỉ (Persistence ), Redis có cho phép lưu trữ phiên. Xử lý các phiên bằng Redis giúp tăng trải nghiệm người dùng khi tương tác với trang web.
Tính năng Persistence rất quan trọng để lưu trữ các phiên, để tránh mất dữ liệu trong các phần quan trọng của tương tác với người dùng. Ví dụ: xử lý thanh toán, thêm một mặt hàng vào giỏ hàng hoặc yêu cầu bất kỳ hành động nào với tư cách là người dùng đã xác thực.
>>>Vì vậy, vị trí thứ hai thuộc về Session Cache.
Nâng cao
Bây giờ chúng ta đã biết Redis là gì, vì sao nên sử dụng nó. Tiếp theo hãy tìm hiểu sâu hơn một chút nhé!
Redis chạy như một chương trình (Process) trên win hay linux. Nó cũng giống như cách chạy của MySQL, PHP, Apache và tất cả các dịch vụ khác. Redis dùng nhiều RAM và nếu server hay Tiến trình bị crash thì làm sao để xử lý?. Để giảm lỗi và mất mát dữ liệu, các kỹ sư thiết kế ra mô hình Master-Slave cho Redis.
Kiến trúc Master-Slave trên redis:
Master Node: Tiến trình chính, chạy và xử lý các kết nối với client.
Slave Node: Tiến chình phụ, Chạy cùng tiến trình chính và giám sát tiến trình chính. Tiến trình phụ cũng thực hiện việc ghi (dump) dữ liệu định kỳ vào ổ cứng để backup.
Khi tiến trình chính bị treo hay thoát, một trong các tiến trình phụ (Slave Node) trở thành Chính và xử lý tất cả các yêu cầu trong khi Master Nodeđang được khởi động lại. Khi Master Process hoạt động trở lại, nó sẽ lấy tệp kết xuất từ Master tạm thời và sử dụng nó làm cơ sở. Quá trình chính được khởi tạo lại dưới dạng Master, trong khi Master Node tạm thời quay trở lại làm Slave Node.
Nhưng làm thế nào để biết khi nào Master Node bị lỗi? Và làm sao chúng ta biết Slave Nodenào nên trở thành Master Node?
Việc này được đam nhiệm bở Sentinels. Sentinel là các quy trình có nhiệm vụ cụ thể là kiểm tra xem các phiên bản của Redis có hoạt động hay không. Nó Thực hiện nhiệm vụ:
Phát hiện xem Master Process có bị lỗi không;
Lựa chọn chủ nhân tạm thời nên là ai;
Giám sát khi Master Process quay lại và cho nó biết tệp kết xuất nào cần tải.
- Sentinels, cái tên đã nói lên tất cả. (nghĩa Lính gác – nếu dịch sang tiếng Việt)
Một thiết lập chung thường sử dụng 1 Master, 2 Slaves và 3 Sentinel. Có thể cài riêng biệt trên các server độc lập khác nhau (nên sử dụng như vậy)
TỔNG KẾT
Redis có cộng đồng sử dụng và phát triển lớn. Nếu cần bạn hãy lên github hoặc trang chủ redis.io để tham gia và cập nhật tin mới.
Bắt đầu với Redis phụ thuộc vào công nghệ bạn đang sử dụng. Các ngôn ngữ khác nhau có những cách khác nhau để tương tác với redis. Tài liệu trên redis.io có tất cả thông tin bạn cần. Bạn có thể tìm thấy danh sách đầy đủ tài liệu sử dụng của Redis tại đây và thậm chí gửi danh sách của riêng bạn.
Trong các bài đăng blog tiếp theo, tôi sẽ đào sâu hơn về cách thiết lập Redis với WordPress.
>> Tìm hiểu thêm: Hướng dẫn cài redis trên centos 7 theo 3 cách khác nhau