Lettuce 多个响应式 Redis 存储和跨存储交易

Lettuce multiple reactive Redis stores and transactions across stores

我正在学习 Redis 是为了 Java 我认为我真的缺少关于 Redis api 的东西。
假设我们有以下用于创建连接的代码:

RedisClient redisClient = RedisClient
  .create("redis://password@localhost:6379/");
StatefulRedisConnection<String, String> connection
 = redisClient.connect();

这为键类型 String 和值类型 String 定义了一个客户端。
现在,当我需要处理多个 Redis 对象时,我该怎么做,不仅是 String/String,还包括不同类型的多个集合?
我应该为每个创建不同的连接吗?
我曾尝试使用反应式模板,但遇到了同样的问题,我会创建多个不同类型的实例。

在处理交易时,我不明白如何跨单个模板使用交易。
例如,我想将序列化的 post 插入到 Redis 存储中,例如:

Key postId | Value <post> 

但在一次交易中,我还想在表示提要的集合中添加 postId:

Key topic | Value <set with post Id's>

我找到的所有示例都在同一模板上执行事务,但我不知道如何继续这个。
指针表示赞赏。

定义StatefulRedisConnection时的String, String部分仅适用于正在使用的编解码器。当你定义:

StatefulRedisConnection<String, String> connection = redisClient.connect();

RedisClient 使用预定义的 StringCodec 在 java 客户端和 Redis 之间传输数据。

如果您想在 Redis 和客户端之间来回传输数据时更改键和值的编码和解码方式,则可以在此处使用您的自定义编解码器。有关 RedisCodec 的更多详细信息 here.

针对你的问题。您仍然应该能够不同类型的操作使用相同的连接,提供键和值(s)都是Strings。对于 Object 类型的键和值,您应该将它们序列化并将序列化结果传递给上述连接。

这是一个示例片段(不是 run/test 这个)。

RedisClient redisClient = RedisClient.create("redis://password@localhost:6379/0");
StatefulRedisConnection<String, String> connection = redisClient.connect();
RedisCommands<String, String> syncCommands = connection.sync();
syncCommands.multi();
syncCommands.sadd("topics", "value1", "value2", "value3"); // Puts topics in the set
syncCommands.set("posts", "serialized post"); // Puts serialized post
syncCommands.exec();

希望这对您有所帮助。