2015-03-23 18 views
10

Tôi phải lưu trữ một số chi tiết máy bằng redis. Vì có nhiều máy khác nhau nên tôi đang lập kế hoạch sử dụng cấu trúc bên dướiRedis lưu trữ danh sách bên trong băm

server1 => {name => s1, cpu=>80} 
server2 => {name => s2, cpu=>40} 

Tôi cần lưu nhiều hơn một giá trị so với CPU chính. Ngoài ra tôi cần phải duy trì chỉ 10 giá trị cuối cùng trong danh sách các giá trị chống lại cpu

1) Làm cách nào để lưu trữ danh sách vào khóa bên trong mã băm?

2) Tôi đã đọc về ltrim. Nhưng nó chấp nhận một chìa khóa. Làm thế nào tôi có thể làm một ltrim cho cpu chính bên trong server1?

Tôi đang sử dụng jedis.

Trả lời

12

Cấu trúc dữ liệu của Redis không thể được lồng trong các cấu trúc dữ liệu khác, do đó không thể lưu trữ Danh sách bên trong Hash. Thay vào đó, hãy sử dụng các khóa khác nhau cho giá trị CPU của máy chủ của bạn (ví dụ: server1:cpu).

2

Có thể thực hiện việc này với khung Redisson. Nó cho phép lưu trữ một tham chiếu đến đối tượng Redis trong đối tượng Redis khác mặc dù các đối tượng tham chiếu đặc biệt được xử lý bởi Redisson.

Vì vậy, nhiệm vụ của bạn có thể được giải quyết bằng Danh sách bên Map:

RMap<String, RList<Option>> settings = redisson.getMap("settings"); 

RList<Option> options1 = redisson.getList("settings_server1_option"); 
options1.add(new Option("name", "s1")); 
options1.add(new Option("cpu", "80")); 
settings.put("server1", options1); 

RList<Option> options2 = redisson.getList("settings_server2_option"); 
options2.add(new Option("name", "s2")); 
options2.add(new Option("cpu", "40")); 
settings.put("server2", options2); 

// read it 
RList<Option> options2Value = settings.get("server2"); 

Hoặc sử dụng Bản đồ trong Map:

RMap<String, RMap<String, String>> settings = redisson.getMap("settings"); 

RMap<String, String> options1 = redisson.getMap("settings_server1_option"); 
options1.put("name", "s1"); 
options1.put("cpu", "80"); 
settings.put("server1", options1); 

RMap<String, String> options2 = redisson.getMap("settings_server2_option"); 
options2.put("name", "s2"); 
options2.put("cpu", "40"); 
settings.put("server2", options1); 

// read it 
RMap<String, String> options2Value = settings.get("server2"); 
Các vấn đề liên quan