Computer >> Máy Tính >  >> Lập trình >> Redis

Redis Namespace và các chìa khóa khác để phát triển với Redis

Redis Namespace và các chìa khóa khác để phát triển với Redis

Phát triển ứng dụng với Redis rất thú vị, nhưng cũng như bất kỳ công nghệ nào, có một số điểm bạn cần lưu ý khi thiết kế ứng dụng không gian tên Redis hoặc Redis. Có thể bạn đã quen với việc phát triển cơ sở dữ liệu quan hệ, nhưng trong khi nhiều phương pháp tương tự được áp dụng, hãy nhớ rằng Redis là một cơ sở dữ liệu trong bộ nhớ và nó (chủ yếu) là một luồng. Đọc tiếp để khám phá các phương pháp hay nhất về khóa Redis.

Do đó, có một số đặc điểm bạn cần chú ý khi sử dụng Redis:

1. Theo dõi các khóa của bạn với không gian tên Redis

Cơ sở dữ liệu lưu trữ dữ liệu, nhưng bất kỳ nhà phát triển nào cũng có thể mất dấu một số dữ liệu mà bạn đang đưa vào Redis. Điều này là tự nhiên, do các yêu cầu của ứng dụng của bạn thay đổi hoặc bạn thay đổi cách bạn lưu trữ dữ liệu. Có lẽ bạn đã bỏ qua HẾT một số khóa hoặc có thể một mô-đun của ứng dụng đã bị gỡ bỏ.

Dù thế nào đi nữa, rất có thể một số dữ liệu trong cơ sở dữ liệu Redis của bạn không còn được sử dụng và chiếm dung lượng không có mục đích. Bản chất không có lược đồ của Redis khiến cho việc hiểu nội dung của tập dữ liệu của bạn trở nên cực kỳ khó khăn trừ khi bạn sử dụng một danh pháp vững chắc cho các khóa của mình. Sử dụng phương pháp đặt tên phù hợp với không gian tên Redis cho các khóa của bạn có thể giúp việc quản lý cơ sở dữ liệu của bạn dễ dàng hơn nhiều. Khi bạn đặt không gian tên cho các khóa của mình theo ứng dụng hoặc dịch vụ - quy ước là sử dụng ký tự dấu hai chấm (‘:’) để phân tách các phần của tên của khóa - phương pháp hay nhất của không gian tên Redis. Bằng cách này, bạn sẽ có thể dễ dàng xác định chúng trong quá trình di chuyển, chuyển đổi, xóa hoặc di chuyển dữ liệu. Redis namespace &Redis namespace key giúp nhận dạng này.

Ngoài không gian tên Redis, một trường hợp sử dụng phổ biến khác của Redis là như một kho lưu trữ dữ liệu thứ cấp cho các mục dữ liệu “nóng”, trong khi hầu hết dữ liệu được giữ trong một cơ sở dữ liệu khác (ví dụ:PostgreSQL, MongoDB). Trong những trường hợp như vậy, các nhà phát triển thường quên xóa dữ liệu khỏi Redis khi nó được chuyển từ kho dữ liệu chính. Loại phụ thuộc nhiều kho dữ liệu này yêu cầu xóa theo tầng, có thể được thực hiện bằng cách giữ tất cả các số nhận dạng cho một mục dữ liệu nhất định trong một tập hợp Redis. Điều này đảm bảo rằng quy trình dọn dẹp được gọi sau khi xóa khỏi kho dữ liệu chính chỉ cần lặp lại nội dung của tập hợp đó để xóa tất cả các bản sao có liên quan và các mẩu tin liên quan (bao gồm cả chính tập hợp đó khi hoàn thành).

2. Theo dõi độ dài của các tên khóa của bạn

Điều này có vẻ mâu thuẫn với điều trên về không gian tên Redis, nhưng vì các tên khóa cũng chiếm bộ nhớ, bạn nên cố gắng giữ chúng ngắn gọn. Rõ ràng, điều này trở thành một vấn đề với tập dữ liệu bao gồm hàng triệu hoặc hàng tỷ khóa, nhưng thực tế là các khóa dài có giá bằng bất kỳ bảng băm nào.

Ví dụ:hãy xem xét việc lưu trữ 1.000.000 khóa với không gian tên Redis, mỗi bộ có giá trị 32 ký tự, sẽ tiêu tốn khoảng 96 MB khi sử dụng tên khóa 6 ký tự và 111 MB với tên 12 ký tự (trên máy chủ Redis 32 bit). Chi phí hơn 15% này trở nên khá đáng kể khi số lượng chìa khóa của bạn tăng lên. Với Redis, việc xóa các khóa có tiền tố cũng là một khả năng.

3. Sử dụng đúng cấu trúc dữ liệu

Có thể do sử dụng bộ nhớ hoặc hiệu suất, đôi khi một cấu trúc dữ liệu phù hợp hơn với tập dữ liệu của bạn so với cấu trúc khác. Dưới đây là một số phương pháp hay nhất cần ghi nhớ:

  • Thay vì lưu trữ dữ liệu của bạn trong hàng nghìn (hoặc hàng triệu) giá trị chuỗi độc lập, hãy xem xét nhóm dữ liệu có liên quan với cấu trúc dữ liệu băm. Hàm băm rất hiệu quả và có thể làm giảm mức sử dụng bộ nhớ của bạn (ngoài ra chúng còn cung cấp giá trị bổ sung của việc trừu tượng hóa một số chi tiết và làm cho mã của bạn dễ đọc hơn). Để biết thêm thông tin về điều đó, hãy xem bài viết này.

  • Khi có thể, hãy sử dụng danh sách thay vì tập hợp. Nếu bạn không cần các thuộc tính của nhóm để đảm bảo tính duy nhất hoặc kiểm tra tư cách thành viên, danh sách sẽ tiêu tốn ít bộ nhớ hơn và thực hiện chèn nhanh hơn.

  • Các tập hợp đã sắp xếp là cấu trúc dữ liệu đắt tiền nhất, cả về mức tiêu thụ bộ nhớ và độ phức tạp của các hoạt động cơ bản (ví dụ:ZADDing một thành viên mới). Nếu bạn chỉ yêu cầu một cách để tra cứu điểm số và thứ tự không quan trọng, hãy cân nhắc sử dụng hàm băm.

  • Một tính năng thường bị bỏ qua trong Redis là ảnh bitmap, hoặc bộ bit (có sẵn kể từ v2.2). Bitsets cho phép bạn thực hiện một số hoạt động cấp bit trên các giá trị Redis, có nghĩa là lưu trữ lượng lớn dữ liệu một cách hiệu quả. Ví dụ:điều này có thể được sử dụng cho một số phân tích nhẹ.

4. Sử dụng QUÉT, không bao giờ sử dụng KEYS

Lệnh SCAN có sẵn bắt đầu với Redis v2.8 và cho phép bạn truy xuất các phím trong vùng phím bằng cách sử dụng con trỏ. Hành vi này không giống như lệnh KEYS (rít), trả về tất cả các phần tử phù hợp cùng một lúc, nhưng được coi là rủi ro trong quá trình sản xuất vì nó có thể chặn máy chủ Redis của bạn và thậm chí làm cạn kiệt tài nguyên RAM của nó. Mặt khác, SCAN giúp bạn có thể kiểm tra dữ liệu mà không có nguy cơ chặn máy chủ của bạn hoặc phải dựa vào nô lệ.

Lưu ý rằng SCAN yêu cầu bạn đọc một giá trị con trỏ được chuyển cho lần gọi SCAN tiếp theo. SCAN cũng chấp nhận một mẫu tên khóa và một đối số đếm tùy chọn. Một điểm khác biệt giữa SCAN và KEYS là có thể lấy cùng một tên khóa nhiều lần với SCAN.

SCAN đi kèm với SSCAN, HSCAN và ZSCAN, cho phép bạn lặp lại nội dung của các bộ, hàm băm và các bộ đã sắp xếp (tương ứng).

5. Sử dụng tập lệnh Lua phía máy chủ

Là một nhà phát triển, bạn sẽ điều hướng đến nền tảng quen thuộc sau khi nắm bắt được khả năng chạy các tập lệnh Lua của Redis. Một trong những ngôn ngữ dễ học nhất, Lua cung cấp cho bạn khả năng thể hiện sự sáng tạo của mình bằng mã chạy bên trong chính máy chủ Redis. Khi được áp dụng đúng cách, các tập lệnh Lua có thể tạo ra một thế giới khác biệt về hiệu suất và mức tiêu thụ tài nguyên. Thay vì đưa dữ liệu đến CPU (của ứng dụng), các tập lệnh cho phép bạn thực thi logic gần dữ liệu, điều này làm giảm độ trễ của mạng và truyền dữ liệu dự phòng.

Một ví dụ cổ điển về tác động mạnh mẽ của Lua xảy ra khi bạn chỉ tìm nạp nhiều dữ liệu từ Redis để lọc hoặc tổng hợp trong ứng dụng của mình. Bằng cách gói gọn quy trình xử lý trong một tập lệnh, bạn chỉ cần gọi nó để nhận được câu trả lời nhỏ hơn đáng kể trong một khoảng thời gian và tài nguyên.

Mẹo chuyên nghiệp: Lua là tuyệt vời, nhưng khi bạn di chuyển quy trình công việc sang nó, bạn có thể thấy rằng việc báo cáo và xử lý lỗi khó hơn (dù gì thì bạn cũng đang chạy bên trong máy chủ Redis). Một cách thông minh để giải quyết vấn đề đó là sử dụng Redis ’Pub / Sub và yêu cầu các tập lệnh của bạn xuất bản thông báo“ nhật ký ”của chúng lên một kênh chuyên dụng. Sau đó, thiết lập quy trình đăng ký để nhận những tin nhắn này và xử lý chúng cho phù hợp.

Có thể có nhiều mẹo quan trọng khác mà bạn sẽ nhận được trong các cuộc vượt ngục của Redis, nhưng danh sách này sẽ giúp bạn bắt đầu với một số mẹo quan trọng nhất. Nếu bạn có các đề xuất khác mà bạn muốn chia sẻ, phản hồi hoặc câu hỏi - vui lòng nói với tôi, tôi rất sẵn lòng 🙂