Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Mười mẹo nhanh dành cho Redis

“Được xuất bản lần đầu vào tháng 3 năm 2015 tại ObjectRocket.com/blog”

Redis® là một công cụ tuyệt vời và cộng đồng công nghệ yêu thích nó! Còn một chặng đường dài nữa mới có thể trở thành một dự án cá nhân nhỏ từ Antirezto trở thành một bộ lưu trữ dữ liệu trong bộ nhớ theo tiêu chuẩn công nghiệp. Cùng với đó là một loạt các phương pháp hay nhất để sử dụng Redis đúng cách. Trong bài viết này, chúng tôi khám phá mười mẹo nhanh để sử dụng Redis đúng cách.

Mười mẹo nhanh dành cho Redis

1. Ngừng sử dụng khóa

Được rồi, vì vậy có thể quát tháo bạn không phải là cách tuyệt vời để bắt đầu bài viết này. Nhưng đó có thể là điểm quan trọng nhất. Thường xuyên, tôi nhìn vào Redis ví dụ, kéo lên một commandstats nhanh và nhìn thấy KEYS rõ ràng nhìn chằm chằm ngay vào tôi. Công bằng mà nói, xuất phát từ quan điểm lập trình, sẽ rất hợp lý nếu có mã giả tương tự như sau:

for key in 'keys *':
  doAllTheThings()

Nhưng khi bạn có, chẳng hạn như 13 triệu chìa khóa, mọi thứ sẽ chậm lại. Kể từ KEYS O (n) đâu n là số lượng khóa được trả lại, độ phức tạp của bạn bị ràng buộc bởi kích thước cơ sở dữ liệu. Ngoài ra, trong toàn bộ hoạt động này, bạn không thể chạy bất cứ điều gì khác chống lại bạn.

Để thay thế, hãy xem SCAN, cho phép bạn quét qua cơ sở dữ liệu của mình theo từng bước. Điều này hoạt động trên một trình lặp nên bạn có thể dừng và tiếp tục khi bạn thấy phù hợp.

2. Tìm hiểu điều gì đang làm chậm Redis

Vì Redis không có nhật ký chi tiết nhất, nên thường khó theo dõi chính xác những gì đang diễn ra bên trong phiên bản của bạn. May mắn thay, Redis cung cấp cho bạn commandstat tiện ích để hiển thị cho bạn thông tin chi tiết tương tự như ví dụ sau:

127.0.0.1:6379> INFO commandstats
# Commandstats
cmdstat_get:calls=78,usec=608,usec_per_call=7.79
cmdstat_setex:calls=5,usec=71,usec_per_call=14.20
cmdstat_keys:calls=2,usec=42,usec_per_call=21.00
cmdstat_info:calls=10,usec=1931,usec_per_call=193.10

Điều này cung cấp cho bạn bảng phân tích về tất cả các lệnh, số lần bạn đã chạy chúng và số micro giây nó cần để thực thi (tổng số và trung bình trên mỗi cuộc gọi). Để đặt lại, hãy chạy CONFIG RESETSTAT và bạn đã có một phương tiện chặn hoàn toàn mới.

3. Sử dụng Redis-Benchmark làm cơ sở, không phải chân lý phúc âm

Salvatore, người tạo ra Redis, nhấn mạnh rằng:“Để kiểm tra Redis thực hiện GET / SET giống như lái thử một chiếc Ferrari để xem khả năng lau gương khi trời mưa tốt như thế nào. " Rất nhiều lần, mọi người đến với tôi thắc mắc tại sao kết quả Redis-Benchmark của họ lại tối ưu nhất. Nhưng chúng ta phải tính đến nhiều yếu tố khác nhau, chẳng hạn như:

  • Giới hạn phía máy khách
  • Sự khác biệt trong lập phiên bản
  • Thử nghiệm đang diễn ra

Redis-Benchmark cung cấp một đường cơ sở tuyệt vời để đảm bảo redis-server của bạn đang hoạt động bình thường, nhưng nó sẽ không bao giờ được coi là kiểm tra tải đúng . Kiểm tra tải cần phản ánh cách ứng dụng của bạn hoạt động trong một môi trường gần với quá trình sản xuất nhất có thể.

4. Hashes là bạn tốt nhất của bạn

Mời băm vào bữa tối. Rượu và bữa ăn tối băm. Bạn sẽ ngạc nhiên về những gì họ có thể mang lại hạnh phúc nếu bạn chỉ cho họ một cơ hội. Tôi đã thấy quá nhiều cấu trúc chính như sau:

foo:first_name
foo:last_name
foo:address

Trong ví dụ đó, foo có thể là tên người dùng cho người dùng và mỗi một trong những dòng đó là một khóa riêng biệt. Điều này tạo thêm chỗ cho các lỗi và thêm các phím không cần thiết vào màn hình gập. Thay vào đó, hãy xem xét một hàm băm. Đột nhiên, bạn chỉ có một khóa:

127.0.0.1:6379> HSET foo first_name "Joe"
(integer) 1
127.0.0.1:6379> HSET foo last_name "Engel"
(integer) 1
127.0.0.1:6379> HSET foo address "1 Fanatical Pl"
(integer) 1
127.0.0.1:6379> HGETALL foo
1) "first_name"
2) "Joe"
3) "last_name"
4) "Engel"
5) "address"
6) "1 Fanatical Pl"
127.0.0.1:6379> HGET foo first_name
"Joe"

5. Đặt TTL (Thời gian tồn tại)!

Bất cứ khi nào có thể, hãy tận dụng các khóa hết hạn. Một ví dụ hoàn hảo là lưu trữ một cái gì đó như khóa xác thực tạm thời. Khi bạn truy xuất khóa xác thực, sử dụng OAUTH như một ví dụ, bạn thường nhận được thời gian hết hạn. Khi bạn đặt khóa, hãy đặt nó với thời hạn sử dụng cùng tên, và Redis sẽ dọn dẹp cho bạn! Không cần thêm KEYS để lặp lại tất cả các khóa đó.

6. Chọn chính sách trục xuất phù hợp

Trong khi chúng ta đang nói về chủ đề dọn dẹp chìa khóa, hãy cùng đề cập đến vấn đề trục xuất. Khi phiên bản Redis của bạn đầy, Redis sẽ cố gắng loại bỏ các khóa. —Tiếp tục bạn có các khóa sắp hết hạn. Nếu bạn chạy một cái gì đó như acache và không có thời hạn sử dụng, bạn có thể xem xét allkeys-lru . Chúng tôi khuyên bạn nên xem các tùy chọn có sẵn tại đây.

7. Nếu Dữ liệu của bạn quan trọng, hãy thử / ngoại trừ

Nếu dữ liệu được đưa vào phiên bản Redis của bạn là cực kỳ quan trọng, tôi thực sự khuyên bạn nên đặt thử / ngoại trừ . Bởi vì hầu hết mọi người đều định cấu hình ứng dụng khách Redis để kích hoạt và quên , bạn nên luôn lên kế hoạch cho thời điểm một khóa không thực sự xuất hiện trong cơ sở dữ liệu. Sự phức tạp mà điều này thêm vào lệnh gọi Redis của bạn không có gì đáng kể trong trường hợp này và bạn có thể đảm bảo dữ liệu quan trọng của mình được đưa vào đúng vị trí cần thiết.

8. Đừng làm ngập một trường hợp

Bất cứ khi nào có thể, hãy chia nhỏ khối lượng công việc giữa nhiều phiên bản Redis. Cụm Redis có sẵn kể từ phiên bản 3.0.0. Redis Cluster cho phép bạn phân tách các khóa giữa các tập hợp các thư mục chính và phụ đã cho dựa trên các phạm vi khóa. Bạn có thể tìm hiểu đầy đủ về ma thuật đằng sau Redis Cluster tại đây. Và nếu bạn đang tìm kiếm một hướng dẫn, thì không cần tìm đâu xa. Bạn có thể tìm thấy nó ở đây. Nếu phân cụm không phải là một tùy chọn, hãy cân nhắc đặt tên và phân phối khóa của bạn giữa nhiều trường hợp. Bạn có thể tìm thấy một bài viết tuyệt vời về cách phân vùng dữ liệu của mình trên trang web theredis.io.

9. Nhiều lõi hơn =hiệu suất tốt hơn, đúng không ?!

Sai. Redis là một quy trình đơn luồng và tối đa sẽ tiêu thụ hai lõi nếu bạn đã bật tính năng bền bỉ. Trừ khi bạn lập kế hoạch chạy nhiều phiên bản trên cùng một máy chủ — hy vọng chỉ để thử nghiệm nhà phát triển, trong trường hợp đó — bạn sẽ không cần thêm hai lõi cho một phiên bản Redis.

10. HA tất cả mọi thứ!

Redis Sentinel hiện đã được thử nghiệm rất tốt và nhiều người dùng đã chạy nó trong phiên bản sản xuất (bao gồm Rackspace ObjectRocket). Nếu bạn tin tưởng vào Redis cho đơn đăng ký của mình, thì bạn cần xem xét một giải pháp có tính khả dụng cao (HA) để giúp bạn luôn trực tuyến. Tất nhiên, nếu bạn không muốn tự mình quản lý tất cả những điều đó, Rackspace ObjectRocket cung cấp nền tảng HA của chúng tôi với hỗ trợ 24 × 7. Hãy thử.

Tìm hiểu thêm về Dịch vụ Rackspace DBA.

Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào. Bạn cũng có thể nhấp vào Trò chuyện bán hàng để trò chuyện ngay bây giờ và bắt đầu cuộc trò chuyện.

Nhấp vào đây để xem Điều khoản dịch vụ của Rackspace Cloud.