使用spring数据redis的多批量长度无效,jedis客户端试图保存redis哈希

7y4bm7vi  于 2021-06-08  发布在  Redis
关注(0)|答案(0)|浏览(996)

我正在使用springboot2.3.3和springdataredis。我用绝地武士做redis的客户。我有一个@repository类扩展了crudrepository。

@Repository
public interface BackedEventRepository extends CrudRepository<BackedEvent, String>{}

我存储的redis散列如下:

@RedisHash("backedEvent")
public class BackedEvent implements Serializable{

private static final long serialVersionUID = 4264000518258689567L;

@Id
private String id;

private byte[] value;
}

测试通过存储库类插入小数据。

@Test
    void whenSavingBackedMessageThenSuccessfullyRetrieveMsg() throws Exception {
    String id = RandomStringUtils.random(10);
    BackedEvent backedMsg = BackedEvent.builder().id(id)
                                    .value("this is a test".getBytes()).build();

    repo.save(backedMsg);

    Optional<BackedEvent> retBackedMsg = repo.findById(id);

    assertThat(retBackedMsg.get().getId()).isEqualTo(backedMsg.getId());
    assertThat(retBackedMsg.get().getValue()).isEqualTo(backedMsg.getValue());
}

我有一个集成测试,它在一个1.8mb的xml文件的inputstream中获取数据,并使用这些字节作为redis散列对象中的值。此测试失败
当它执行backedeventrepository.save(backedevent)时,出现以下错误:

org.springframework.data.redis.RedisConnectionFailureException: ERR Protocol error: invalid multibulk length; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: ERR Protocol error: invalid multibulk length

尽管hmset redis命令已被弃用,但spring data redis似乎正在发出hmset command事件。

org.springframework.data.redis.connection.jedis.JedisHashCommands.hMSet(JedisHashCommands.java:345)

我知道redis的大容量容量是1mb。有没有办法克服这个问题?我希望能够发出一个save命令来保存“大”数据。这样做的目的是在redis中存储大于1mb的大量数据,因为1mb是Kafka主题的大小限制。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题