2013-05-22 30 views
6

Tôi lưu trữ các đối tượng bằng cách sử dụng băm trên Redis và tôi muốn tính toán độ dài của các Hashes này từ quan điểm Redis.Làm thế nào để nhận được Redis Hash Length?

Bạn có thể thực hiện việc này dễ dàng đối với các chuỗi sử dụng STRLEN.

Nhưng tôi không thể tìm thấy lệnh phù hợp cho loại dữ liệu băm trong số documentation. Nó có vẻ là điều tương tự cho danh sách hoặc bộ.

Về cơ bản, giải pháp duy nhất tôi tìm được là lấy toàn bộ hàm băm với HGETALL và để tính toán độ dài trên kích thước của máy khách.

Có phải thứ gì đó hoàn toàn nằm ngoài hộp không?

Nếu tôi sai, xin vui lòng không ngần ngại để giải thích cho tôi lý do tại sao hoặc cho tôi liên kết có liên quan/bài viết/SO câu hỏi.

Sửa:

HLEN không phải là một giải pháp vì nó "Trả về số lĩnh vực chứa trong băm". Tôi muốn tính toán kích thước này cho việc lập kế hoạch dung lượng & Giám sát hoạt động trên cơ sở dữ liệu Redis.

+0

Bạn có thể giải thích lý do bạn muốn điều này không?Là nó để ước tính sử dụng bộ nhớ trên redis? Hay bạn cần phải thực hiện một tính năng cụ thể? Có nhiều cách để tìm ra 'chiều dài của băm từ điểm 'redis', nhưng nó có thể hoặc có thể không hữu ích tùy thuộc vào trường hợp sử dụng của bạn. –

Trả lời

7

Đối với độ dài là không gian đĩa bạn có thể sử dụng DEBUG OBJECT vì nó trả về một số mục thông tin cho mỗi khóa.

redis 127.0.0.1:50001> hset myhash field1 'hello' 
(integer) 1 
redis 127.0.0.1:50001> hset myhash field2 'world' 
(integer) 1 
redis 127.0.0.1:50001> DEBUG OBJECT myhash 
Value at:0x7fb8de4ad590 refcount:1 encoding:zipmap serializedlength:31 lru:696871 lru_seconds_idle:0 

Hy vọng nó giúp

+1

Vậy đối tượng đó mất bao nhiêu byte? Tôi không hiểu 'chiều dài tuần tự' 31? –

4

Phụ thuộc vào những gì bạn muốn làm với độ dài của hàm băm.

Nếu bạn muốn độ dài thực hiện một số chẩn đoán hoặc giám sát, như tìm bộ nhớ được tiêu thụ, thì tôi khuyên bạn nên làm điều đó ngoại tuyến bằng công cụ như redis-rdb-tools. Tệp kết xuất csv sẽ giúp bạn có được số liệu thống kê về mỗi khóa - bao gồm tổng kích thước, tổng dung lượng bộ nhớ được sử dụng và vân vân.

Nhưng nếu bạn muốn kích thước để triển khai một số tính năng của ứng dụng thì không có giải pháp readymade. HGETALL cộng với tính toán kích thước khách hàng của chiều dài là con đường để đi. Bạn có thể tối ưu hóa bằng cách viết một kịch bản lệnh lua để tính toán độ dài xảy ra trên chính máy chủ redis.

+0

Downvoter - bạn có thể vui lòng để lại một bình luận tại sao điều này đã được downvoted? Tôi không nhớ downvote, nhưng rất thích biết những gì tôi bị mất hoặc tuyên bố không chính xác :) –

+0

Tôi đã không downvoted bạn nhưng upvoted cho công cụ tuyệt vời của bạn redis-rdb-công cụ. – Cybermaxs

+0

@SripathiKrishnan Tôi downvoted bởi vì câu trả lời rõ ràng cho "làm thế nào để có được chiều dài băm redis" là HLEN, nhưng rõ ràng OP có nghĩa là một cái gì đó khác với "chiều dài" của băm trong câu hỏi của mình, vì vậy câu trả lời của bạn là thực sự tốt. Tôi muốn loại bỏ các downvote, nhưng SO sẽ không cho tôi nữa trừ khi bạn chỉnh sửa câu trả lời của bạn bằng cách nào đó. Nếu bạn làm thế, tôi rất sẵn lòng xóa nó :). – Eli

23

Chỉ cần sử dụng HLEN.

redis> HSET myhash field1 "Hello" 
(integer) 1 
redis> HSET myhash field2 "World" 
(integer) 1 
redis> HLEN myhash 
(integer) 2 

EDIT: Câu hỏi đã được làm sáng tỏ được rằng OP muốn kích thước trên đĩa của một hash để theo dõi hoạt động. Trong trường hợp đó, tôi chắc chắn sẽ đi với một kịch bản Lua tính toán kích thước của một băm trên máy chủ của bạn và trả về giá trị lại cho bạn. Không sử dụng HGETALL nếu bạn đang mong đợi băm lớn, bởi vì bạn sẽ cần phải chuyển toàn bộ băm từ máy chủ của bạn đến máy tính khách của bạn, và điều đó sẽ trở thành nút cổ chai của bạn thực sự nhanh chóng. Chỉ cần thực hiện tính toán này trên máy chủ Redis với Lua có nghĩa là bạn chỉ cần truyền một số lượng byte của mạng của bạn thay vì có thể là mb dữ liệu cho toàn bộ băm của bạn.

+0

Như tôi đã nói trước đây, HLEN chỉ trả lại số trường cho Hash – Cybermaxs

+2

@ Cybermaxs-Betclic bạn chưa bao giờ đề cập đến HLEN ở bất cứ đâu trong bài đăng của bạn. Và độ dài của băm là số trường (khóa). Bạn đề cập đến chiều dài nào nếu không phải vậy? Trong bất kỳ ngôn ngữ nào khác, khi bạn làm một cái gì đó giống như len (băm), đó là những gì bạn mong đợi đã trở lại. – Eli

+0

Ồ, đó là sự thật. HLEN "Trả về số lượng các trường chứa trong băm được lưu trữ ở khóa"; không phải là chiều dài hoặc nếu bạn thích kích thước của toàn bộ băm. – Cybermaxs

0

vẻ đặt cược tốt nhất của bạn sẽ được sử dụng HSCAN khi bạn gặp một băm để có được những cánh đồng và tổng hợp HSTRLEN cho mỗi người trong số họ.

Các vấn đề liên quan