Redis将列表存储在哈希表中

33

我需要将一些机器的详细信息存储在redis中。由于有很多不同的机器,我计划使用以下结构:

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

我需要在键CPU下存储多个值。此外,我需要仅在与CPU相关的值列表中维护最后10个值。

1)如何在哈希内对键存储一个列表?

2)我了解了ltrim。但它接受一个键。如何对服务器1中的CPU键执行ltrim?

我正在使用jedis。


4
4年过去了,现在你可以使用redis-protobuf模块将嵌套的数据结构保存到Redis中。 免责声明:我是此模块的作者。 - for_stack
@for_stack 这很好。我们如何在RedisLabs部署中进行此定制化呢? - daparic
@eigenfield 抱歉,我不熟悉redislabs的部署,但我认为你可以简单地构建模块,并使用“loadmodule”配置进行配置。此外,你可以向@Itamar Haber寻求帮助。我相信他的建议会非常有帮助 :) - for_stack
3个回答

37

Redis的数据结构不能嵌套在其他数据结构中,因此无法在哈希中存储列表。相反,使用不同的键来存储服务器的CPU值(例如server1:cpu)。


1
Redis的数据结构不能被嵌套在其他数据结构中,所以无法将列表存储在哈希表中。我希望文档能够更加准确地表述这一点。 - Mark

7

使用Redisson框架可以实现此操作。它允许通过由Redisson处理的特殊引用对象,在另一个Redis对象中存储对Redis对象的引用。

因此,您可以使用Map内的List来解决您的任务:

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");

或者在Map内部使用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");

免责声明:我是 Redisson 的开发者


那我必须创建单独的RLists,并给它们命名?然后当我从RMap中删除一个条目时,我还必须清理或删除RList?我必须管理它吗?RMap可能是临时的,污染肯定会增加。然后在添加到RList之前必须为其命名,因此键必须作为名称提供给RList。看起来像一个很大的混乱。考虑坚持使用SQL。似乎不可能管理这些东西。 - mjs
这个回答需要一个免责声明,即Nikita Koksharov是Redisson的创始人和首席开发者。 - Mark

5

在推送数据时,您可以进行编码/序列化,而在获取数据时,您可以进行解码/解析。

编码 -> 解码

序列化 -> 解析


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接