有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java支持多个反应式Redis存储和跨存储的事务

我正在学习RedisforJava,我认为我真的缺少RedisAPI
假设我们有以下创建连接的代码:

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

这为键类型字符串和值类型字符串定义了客户端
现在,当我需要处理多个Redis对象时,我该怎么做,不仅是字符串/字符串,而且是多个不同类型的集合
我是否应该为每个节点创建不同的连接
我曾尝试使用被动模板,但遇到了相同的问题,即我将创建具有不同类型的多个实例

在处理事务时,我不知道如何跨单个模板使用事务
例如,我想在Redis存储中插入一篇序列化文章,如:

Key postId | Value <post> 

但在一个事务中,我还想将posted添加到表示提要的集合中:

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

我发现的所有示例都在同一个模板上执行事务,但我不知道如何继续
欢迎指点


共 (1) 个答案

  1. # 1 楼答案

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

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

    预定义的StringCodecRedisClient用来在java客户机和Redis之间传输数据

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

    为了解决你的问题。如果键和值都是String类型,那么仍然应该能够不同类型的操作使用相同的连接。对于Object类型的键和值,应该序列化它们并将序列化结果传递给上述连接

    下面是一个示例片段(未运行/测试)

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

    希望这有帮助