Redis cache vs sử dụng bộ nhớ trực tiếp


141

Tôi chưa sử dụng Redis, nhưng tôi đã nghe về nó và dự định dùng thử dưới dạng lưu trữ bộ đệm.

Tôi đã nghe Redis sử dụng bộ nhớ làm cơ sở dữ liệu lưu trữ bộ đệm, vậy có gì khác biệt nếu tôi sử dụng một biến làm kiểu dữ liệu đối tượng hoặc từ điển để lưu trữ dữ liệu? giống:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Redis có lợi thế gì?

Câu trả lời:


221

Redis là một máy chủ cấu trúc dữ liệu từ xa . Nó chắc chắn chậm hơn so với việc chỉ lưu trữ dữ liệu trong bộ nhớ cục bộ (vì nó liên quan đến các vòng tròn ổ cắm để tìm nạp / lưu trữ dữ liệu). Tuy nhiên, nó cũng mang lại một số tính chất thú vị:

  • Redis có thể được truy cập bởi tất cả các quy trình của ứng dụng của bạn, có thể chạy trên một số nút (điều mà bộ nhớ cục bộ không thể đạt được).

  • Lưu trữ bộ nhớ Redis khá hiệu quả và được thực hiện trong một quy trình riêng biệt. Nếu ứng dụng chạy trên nền tảng có bộ nhớ là rác được thu thập (node.js, java, v.v.), thì nó cho phép xử lý bộ nhớ / lưu trữ bộ nhớ lớn hơn nhiều. Trong thực tế, các đống rất lớn không hoạt động tốt với các ngôn ngữ được thu gom rác.

  • Redis có thể duy trì dữ liệu trên đĩa nếu cần.

  • Redis nhiều hơn một chút so với bộ đệm đơn giản: nó cung cấp các cấu trúc dữ liệu khác nhau, các chính sách trục xuất vật phẩm khác nhau, chặn hàng đợi, pub / sub, nguyên tử, kịch bản lệnh Lua, v.v ...

  • Redis có thể sao chép hoạt động của nó với cơ chế chủ / nô lệ để thực hiện tính sẵn sàng cao.

Về cơ bản, nếu bạn cần ứng dụng của mình mở rộng trên một số nút chia sẻ cùng một dữ liệu, thì một cái gì đó như Redis (hoặc bất kỳ kho lưu trữ khóa / giá trị từ xa nào khác) sẽ được yêu cầu.


5
Điểm cuối cùng của bạn đặc biệt làm cho có vẻ như những thứ như Rlite hơi vô nghĩa - một cửa hàng từ điển sẽ phù hợp trong hầu hết các trường hợp sử dụng khi bạn có một quy trình duy nhất. Có đúng không?
ness101

1
Đúng. IMO sự quan tâm của Rlite khá hạn chế.
Didier Spezia

cảm ơn vì những gợi ý này, vì vậy Redis rất tuyệt vời để mở rộng quy mô nhưng tôi giả sử trong trường hợp trò chuyện đơn giản với trung bình 300 - 500 đối tượng để truy xuất trong bộ nhớ, cấu trúc dữ liệu trong bộ nhớ sẽ thực hiện công việc rất tốt nếu không nhanh hơn kể từ khi là số ít?
Nữ web

2
@DidierSpezia very large heaps do not perform well with garbage collected languagesbạn có thể giải thích tại sao?
roottraveller

1
@roottraveller, tôi tin rằng điều này là do quá trình thu gom rác nói chung phải làm gián đoạn quá trình thực thi ứng dụng của bạn ("stop-the-world") để giải phóng bộ nhớ heap, và heap càng lớn, sự gián đoạn này càng kéo dài.
Regorsmitz

3

Hiện tại chúng tôi bị thu hút nhiều hơn trong kiến ​​trúc máy chủ, trong đó mỗi yêu cầu có thể chuyển đến vùng chứa khác nhau. Trong trường hợp này, redis có thể đóng vai trò rất quan trọng.

Chúng tôi không thể sử dụng bộ đệm đơn giản trong máy chủ vì chúng tôi không thể chắc chắn rằng yêu cầu của chúng tôi được phục vụ tại cùng một nơi chứa bộ nhớ cache đơn giản của chúng tôi.

Trong trường hợp này, chúng tôi phải sử dụng redis vì nó lưu trữ bộ đệm ở vị trí từ xa & chúng tôi có thể truy cập vào đó thậm chí thay đổi vùng chứa trong máy chủ ít kiến ​​trúc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.