Đây là phiên bản viết của video youtube mới của tôi ✍️ 🙂
Trong hướng dẫn Redis này, bạn sẽ tìm hiểu về Redis và cách Redis có thể được sử dụng làm cơ sở dữ liệu chính cho các ứng dụng phức tạp cần lưu trữ dữ liệu ở nhiều định dạng.
Tổng quan 📝
- Redis là gì và cách sử dụng của nó cũng như tại sao nó phù hợp với các ứng dụng microservice phức tạp hiện đại?
- Cách Redis hỗ trợ lưu trữ nhiều định dạng dữ liệu cho các mục đích khác nhau thông qua các mô-đun của nó ?
- Cách Redis với tư cách là cơ sở dữ liệu trong bộ nhớ có thể duy trì dữ liệu và khôi phục sau khi mất dữ liệu ?
- Cách mở rộng quy mô và nhân rộng Redis ?
- Cuối cùng vì một trong những nền tảng phổ biến nhất để chạy microservices là Kubernetes và vì việc chạy các ứng dụng trạng thái trong Kubernetes có một chút thách thức, chúng tôi sẽ xem cách bạn có thể dễ dàng chạy Redis trong Kubernetes
Redis là gì?
Redis là viết tắt của re vi trần dic ti tĩnh s erver
Redis là một cơ sở dữ liệu trong bộ nhớ . Vì vậy, nhiều người đã sử dụng nó làm bộ nhớ cache trên các cơ sở dữ liệu khác để cải thiện hiệu suất ứng dụng. 🤓
Tuy nhiên, điều mà nhiều người không biết là Redis là một cơ sở dữ liệu chính hoàn chỉnh có thể được sử dụng để lưu trữ và duy trì nhiều định dạng dữ liệu cho các ứng dụng phức tạp. 😎
Vì vậy, hãy xem các trường hợp sử dụng cho điều đó.
Tại sao lại sử dụng Cơ sở dữ liệu đa mô hình?
Hãy xem cách thiết lập chung cho một ứng dụng microservices.
Giả sử chúng ta có một ứng dụng truyền thông xã hội phức tạp với hàng triệu người dùng. Đối với điều này, chúng tôi có thể cần lưu trữ các định dạng dữ liệu khác nhau trong các cơ sở dữ liệu khác nhau:
- Cơ sở dữ liệu quan hệ , như Mysql, để lưu trữ dữ liệu của chúng tôi
- Tìm kiếm đàn hồi để tìm kiếm và lọc nhanh
- Cơ sở dữ liệu biểu đồ đại diện cho các kết nối của người dùng
- Cơ sở dữ liệu tài liệu , như MongoDB để lưu trữ nội dung đa phương tiện được người dùng của chúng tôi chia sẻ hàng ngày
- Dịch vụ bộ nhớ đệm để có hiệu suất tốt hơn cho ứng dụng
Rõ ràng đây là một thiết lập khá phức tạp.
Những thách thức khi có nhiều dịch vụ dữ liệu
- ❌ Mỗi dịch vụ dữ liệu cần được triển khai và duy trì
- ❌ Kiến thức cần thiết cho mỗi dịch vụ dữ liệu
- ❌ Các yêu cầu về quy mô và cơ sở hạ tầng khác nhau
- ❌ Mã ứng dụng phức tạp hơn để tương tác với tất cả các DB khác nhau này
- ❌ Độ trễ cao hơn (Chậm hơn), do mạng nhảy nhiều hơn
Có cơ sở dữ liệu đa mô hình
So với cơ sở dữ liệu đa mô hình, bạn giải quyết được hầu hết những thách thức này. Trước hết, bạn chỉ chạy và duy trì 1 dịch vụ dữ liệu . Vì vậy, ứng dụng của bạn cũng cần nói chuyện với một kho dữ liệu duy nhất và điều đó chỉ yêu cầu một giao diện lập trình cho dịch vụ dữ liệu đó.
Ngoài ra, độ trễ sẽ được giảm bớt bằng cách chuyển đến một điểm cuối dữ liệu duy nhất và loại bỏ một số trung tâm mạng nội bộ.
Vì vậy, có một cơ sở dữ liệu, như Redis, cho phép bạn lưu trữ các loại dữ liệu khác nhau hoặc về cơ bản cho phép bạn có nhiều loại cơ sở dữ liệu trong một cơ sở dữ liệu cũng như hoạt động như một bộ nhớ cache giải quyết những thách thức như vậy.
- ✅ Chỉ chạy và duy trì 1 cơ sở dữ liệu
- ✅ Đơn giản hơn
- ✅ Độ trễ giảm (Nhanh hơn)
Redis hoạt động như thế nào?
Mô-đun Redis 📦
Cách thức hoạt động là bạn có Redis Core, là nơi lưu trữ giá trị quan trọng đã hỗ trợ lưu trữ nhiều loại dữ liệu và sau đó bạn có thể mở rộng lõi đó với cái được gọi là mô-đun cho các loại dữ liệu khác nhau , mà ứng dụng của bạn cần cho các mục đích khác nhau. Vì vậy, ví dụ như RediSearch cho chức năng tìm kiếm như ElasticSearch hoặc Redis Graph để lưu trữ dữ liệu biểu đồ, v.v.
Và một điều tuyệt vời về điều này là nó mô-đun . Vì vậy, các loại chức năng cơ sở dữ liệu khác nhau này không được tích hợp chặt chẽ vào một cơ sở dữ liệu, mà thay vào đó, bạn có thể chọn và chọn chính xác chức năng dịch vụ dữ liệu nào bạn cần cho ứng dụng của mình và sau đó về cơ bản thêm mô-đun đó.
Bộ nhớ đệm ngoài hộp ⚡️
Tất nhiên khi sử dụng Redis làm cơ sở dữ liệu chính, bạn không cần thêm bộ nhớ đệm, vì bạn có điều đó tự động ra khỏi hộp với Redis. Điều đó có nghĩa là ứng dụng của bạn sẽ ít phức tạp hơn, vì bạn không cần phải triển khai logic để quản lý việc điền và làm mất hiệu lực bộ nhớ cache.
Redis rất nhanh 🚀
Là cơ sở dữ liệu trong bộ nhớ (dữ liệu được lưu trữ trong RAM), Redis siêu nhanh và hiệu quả, điều này tất nhiên làm cho ứng dụng tự nó nhanh hơn.
Nhưng tại thời điểm này, bạn có thể tự hỏi:
Làm cách nào để cơ sở dữ liệu trong bộ nhớ duy trì dữ liệu? 🤔
Làm cách nào Redis có thể duy trì dữ liệu và khôi phục sau khi mất dữ liệu? 🧐
Nếu quá trình Redis hoặc máy chủ mà Redis đang chạy không thành công, tất cả dữ liệu trong bộ nhớ sẽ biến mất đúng không? Vì vậy, làm thế nào để dữ liệu được tồn tại và về cơ bản làm thế nào để tôi có thể tự tin rằng dữ liệu của mình là an toàn? 👀
Sao chép Redis?
Chà, cách đơn giản nhất để sao lưu dữ liệu là sao chép Redis . Vì vậy, nếu cá thể chính của Redis gặp sự cố, các bản sao sẽ vẫn chạy và có tất cả dữ liệu. Vì vậy, nếu bạn có một Redis được sao chép, các bản sao sẽ có dữ liệu.
Nhưng tất nhiên nếu tất cả các phiên bản Redis bị hỏng, bạn sẽ mất dữ liệu, vì sẽ không còn bản sao nào. 🤯Vì vậy chúng ta cần sự kiên trì thực sự .
Chụp nhanh &AOF
Redis có nhiều cơ chế để duy trì dữ liệu và giữ cho dữ liệu an toàn.
Ảnh chụp nhanh
Đầu tiên:ảnh chụp nhanh, bạn có thể định cấu hình dựa trên thời gian, số lượng yêu cầu, v.v. Vì vậy, ảnh chụp nhanh dữ liệu của bạn sẽ được lưu trữ trên đĩa , mà bạn có thể sử dụng để khôi phục dữ liệu của mình nếu toàn bộ cơ sở dữ liệu Redis đã biến mất.
Nhưng lưu ý rằng bạn sẽ mất những phút cuối cùng của dữ liệu , vì bạn thường chụp nhanh năm phút hoặc một giờ một lần tùy thuộc vào nhu cầu của bạn. 😐
AOF
Vì vậy, để thay thế, Redis sử dụng một thứ gọi là AOF , viết tắt của A ppend O nly F ile.
Trong trường hợp này, mọi thay đổi được lưu vào đĩa để duy trì liên tục . Và khi khởi động lại Redis hoặc sau khi ngừng hoạt động, Redis sẽ phát lại các bản ghi Append Only File để xây dựng lại trạng thái.
Vì vậy, AOF bền hơn , nhưng có thể chậm hơn chụp nhanh.
Lựa chọn tốt nhất 💡:Sử dụng kết hợp cả AOF và ảnh chụp nhanh, trong đó AOF lưu trữ dữ liệu từ bộ nhớ sang đĩa liên tục cộng với việc bạn có các ảnh chụp nhanh thường xuyên ở giữa để lưu trạng thái dữ liệu trong trường hợp bạn cần khôi phục nó:
Làm cách nào để chia tỷ lệ cơ sở dữ liệu Redis?
Giả sử phiên bản Redis 1 của tôi hết bộ nhớ, vì vậy dữ liệu trở nên quá lớn để chứa trong bộ nhớ hoặc Redis trở thành nút cổ chai và không thể xử lý thêm bất kỳ yêu cầu nào. Trong trường hợp đó, làm cách nào để tăng dung lượng và kích thước bộ nhớ cho cơ sở dữ liệu Redis của tôi? 🤔
Chúng tôi có một số tùy chọn cho điều đó:
1. Phân cụm
Trước hết, Redis hỗ trợ phân cụm . Điều này có nghĩa là bạn có thể có phiên bản Redis chính hoặc chính, có thể được sử dụng để đọc và ghi dữ liệu và bạn có thể có nhiều bản sao của phiên bản chính đó để đọc dữ liệu :
Bằng cách này, bạn có thể mở rộng quy mô Redis để xử lý nhiều yêu cầu hơn và ngoài ra tăng tính khả dụng cao của cơ sở dữ liệu của bạn, vì nếu bản chính bị lỗi, một trong các bản sao có thể tiếp quản và cơ sở dữ liệu Redis của bạn về cơ bản có thể tiếp tục hoạt động mà không gặp bất kỳ sự cố nào.
2. Làm sắc nét
Chà, điều đó có vẻ đủ tốt, nhưng điều gì sẽ xảy ra nếu
- tập dữ liệu của bạn quá lớn để vừa với bộ nhớ trên một máy chủ .
- Ngoài ra, chúng tôi đã chia tỷ lệ số lần đọc trong cơ sở dữ liệu, vì vậy tất cả các yêu cầu về cơ bản chỉ truy vấn dữ liệu. Nhưng phiên bản chính của chúng tôi vẫn ở một mình và vẫn phải xử lý tất cả các lần ghi .
Vậy giải pháp ở đây là gì? 🤔
Vì vậy, chúng tôi sử dụng khái niệm sharding , là một khái niệm chung trong cơ sở dữ liệu và Redis cũng hỗ trợ.
Vì vậy, sharding về cơ bản có nghĩa là bạn lấy tập dữ liệu hoàn chỉnh của mình và chia nó thành các phần nhỏ hoặc tập dữ liệu con , trong đó mỗi phân đoạn chịu trách nhiệm về tập hợp con dữ liệu của chính nó.
Vì vậy, điều đó có nghĩa là thay vì có một cá thể chính xử lý tất cả các lần ghi vào tập dữ liệu hoàn chỉnh, bạn có thể chia nó thành 4 phân đoạn, mỗi phân đoạn chịu trách nhiệm đọc và ghi vào một tập hợp con của dữ liệu . 💡
Và mỗi phân đoạn cũng cần ít dung lượng bộ nhớ hơn , bởi vì họ chỉ có một phần tư dữ liệu. Điều này có nghĩa là bạn có thể phân phối và chạy các phân đoạn trên các nút nhỏ hơn và về cơ bản chia tỷ lệ cụm của bạn theo chiều ngang:
Vì vậy, có nhiều nút , chạy nhiều bản sao của Redis tất cả đều được chia nhỏ cung cấp cho bạn một cơ sở dữ liệu Redis có sẵn rất hiệu quả, có thể xử lý nhiều yêu cầu hơn mà không tạo ra bất kỳ tắc nghẽn nào 👍
Các chủ đề khác ...
Xem video của tôi bên dưới để biết 2 chủ đề và tình huống cuối cùng:
- Các ứng dụng cần tính khả dụng và hiệu suất cao hơn nữa trên nhiều vị trí địa lý
- Tiêu chuẩn mới để chạy các dịch vụ nhỏ là nền tảng Kubernetes, vì vậy hãy chạy Redis trong Kubernetes là một trường hợp sử dụng rất thú vị và phổ biến
Video đầy đủ có tại đây:🤓
Hy vọng điều này hữu ích và thú vị cho một số bạn! 😊
Thích, chia sẻ và theo dõi tôi 😍 để biết thêm nội dung:
- Instagram - Đăng nhiều nội dung hậu trường
- Nhóm FB riêng