Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Nếu redis đã là một phần của ngăn xếp, tại sao Memcached vẫn được sử dụng cùng với Redis?

Lý do chính mà tôi thấy hôm nay là một trường hợp sử dụng cho memcached trên Redis là hiệu quả bộ nhớ vượt trội mà bạn có thể có được với trơn Bộ nhớ đệm các đoạn HTML (hoặc các ứng dụng tương tự). Nếu bạn cần lưu trữ các trường khác nhau của các đối tượng trong các khóa memcached khác nhau, thì hàm băm Redis sẽ tiết kiệm bộ nhớ hơn, nhưng khi bạn có một số lượng lớn các cặp key -> simple_string, memcached sẽ có thể cung cấp cho bạn nhiều mục hơn mỗi megabyte.

Những điều khác là điểm tốt về memcached:

  • Đây là một đoạn mã rất đơn giản, vì vậy nếu bạn chỉ cần chức năng mà nó cung cấp, thì tôi đoán nó là một giải pháp thay thế hợp lý, nhưng tôi chưa bao giờ sử dụng nó trong quá trình sản xuất.
  • Nó là đa luồng, vì vậy nếu bạn cần mở rộng quy mô trong thiết lập một hộp, đó là một điều tốt và bạn chỉ cần nói chuyện với một phiên bản.

Tôi tin rằng Redis với tư cách là một bộ nhớ cache ngày càng có ý nghĩa hơn khi mọi người hướng tới bộ nhớ đệm thông minh hoặc khi họ cố gắng duy trì cấu trúc của dữ liệu được lưu trong bộ nhớ cache thông qua cấu trúc dữ liệu Redis.

So sánh giữa Redis LRU và LRU ghi nhớ.

Cả memcached và Redis đều không thực hiện các thao tác đuổi LRU thực, mà chỉ là sự ước lượng của điều đó.

Loại bỏ Memcache là lớp theo kích thước và phụ thuộc vào chi tiết triển khai của trình cấp phát phiến của nó. Ví dụ:nếu bạn muốn thêm một mục phù hợp với một lớp kích thước nhất định, memcached sẽ cố gắng xóa các mục đã hết hạn / không được sử dụng gần đây trong lớp đó, thay vào đó, cố gắng toàn cục để hiểu đối tượng là gì, bất kể nó là gì kích thước, là ứng cử viên tốt nhất.

Thay vào đó, Redis cố gắng chọn một đối tượng tốt làm ứng cử viên cho việc trục xuất khi maxmemory đã đạt đến giới hạn, xem xét tất cả các đối tượng, bất kể loại kích thước, nhưng chỉ có thể cung cấp một đối tượng gần đúng, không phải là đối tượng tốt nhất với thời gian nhàn rỗi lớn hơn.

Cách Redis thực hiện điều này là lấy mẫu một vài đối tượng, chọn đối tượng không hoạt động (không được truy cập) trong thời gian dài nhất. Kể từ khi Redis 3.0 (hiện đang trong giai đoạn thử nghiệm), thuật toán đã được cải thiện và cũng có nhiều ứng cử viên tốt trong các lần trục xuất, do đó, ước tính gần đúng đã được cải thiện. Trong tài liệu Redis, bạn có thể tìm thấy mô tả và biểu đồ với chi tiết về cách hoạt động của nó.

Tại sao memcached có dung lượng bộ nhớ tốt hơn Redis đối với bản đồ chuỗi đơn giản ->.

Redis là một phần mềm phức tạp hơn, vì vậy các giá trị trong Redis được lưu trữ theo cách tương tự hơn với các đối tượng trong ngôn ngữ lập trình cấp cao:chúng có kiểu liên kết, mã hóa, đếm tham chiếu để quản lý bộ nhớ. Điều này làm cho cấu trúc bên trong của Redis tốt và dễ quản lý, nhưng có chi phí cao hơn so với memcached chỉ xử lý các chuỗi.

Khi Redis bắt đầu tiết kiệm bộ nhớ hơn

Redis có thể lưu trữ các kiểu dữ liệu tổng hợp nhỏ theo cách tiết kiệm bộ nhớ đặc biệt. Ví dụ:một Redis Hash nhỏ đại diện cho một đối tượng, được lưu trữ bên trong không phải với một bảng băm, mà là một đốm màu duy nhất nhị phân. Vì vậy, việc đặt nhiều trường cho mỗi đối tượng thành một hàm băm sẽ hiệu quả hơn việc lưu trữ N khóa riêng biệt vào bộ nhớ đệm.

Trên thực tế, bạn có thể lưu trữ một đối tượng vào memcached dưới dạng một khối JSON (hoặc được mã hóa nhị phân), nhưng trái với Redis, điều này sẽ không cho phép bạn tìm nạp hoặc cập nhật các trường độc lập.

Lợi thế của Redis trong bối cảnh bộ nhớ đệm thông minh.

Do cấu trúc dữ liệu Redis, mẫu thông thường được sử dụng với memcached để hủy các đối tượng khi bộ đệm bị vô hiệu, để tạo lại nó từ DB sau này, là một cách nguyên thủy để sử dụng Redis.

Ví dụ:hãy tưởng tượng bạn cần lưu vào bộ đệm N tin tức mới nhất được đăng vào Tin tức Hacker để đưa vào phần "Mới nhất" của trang web. Những gì bạn làm với Redis là lấy một danh sách (giới hạn ở M mục) với những tin tức mới nhất được chèn vào. Nếu bạn sử dụng một cửa hàng lưu trữ khác cho dữ liệu của mình và Redis làm bộ nhớ đệm, việc bạn làm là điền cả hai lượt xem (Redis và DB) khi một mục mới được đăng. Không có sự vô hiệu hóa bộ nhớ cache.

Tuy nhiên, ứng dụng luôn có thể có logic để nếu danh sách Redis được tìm thấy là trống, ví dụ sau khi khởi động, chế độ xem ban đầu có thể được tạo lại từ DB.

Bằng cách sử dụng bộ nhớ đệm thông minh, có thể thực hiện bộ nhớ đệm với Redis theo cách hiệu quả hơn so với bộ nhớ đệm, nhưng không phải tất cả các vấn đề đều phù hợp với mẫu này. Ví dụ:bộ nhớ đệm các đoạn HTML có thể không được hưởng lợi từ kỹ thuật này.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để cài đặt Predis trên cửa sổ XAMPP?

  2. Lưu trữ các khóa có tiền tố hết hạn trong redis

  3. Lưu trữ được quản lý hoàn toàn ScaleGrid cho Redis ™ Hiện đã có trên Azure

  4. Lợi ích của việc phân cụm Redis trên các máy chủ khác nhau là gì?

  5. Redis TimeSeries có phải là công cụ phù hợp để nắm bắt các cây nến trong giá cổ phiếu không