【问题标题】:Spring Data for Redis: when dealing with values, does it only works with StringRedisTemplate?Spring Data for Redis:处理值时,是否仅适用于 StringRedisTemplate?
【发布时间】:2013-02-25 23:45:02
【问题描述】:

在使用 Spring Data for Redis 处理字符串时,我注意到以下行为:

给定下面的代码:

template.opsForValue().set("person", "value");

它仅在我使用 StringRedisTemplate 实例时有效,而在我使用 RedisTemplate 实例时无效。它不应该与 RedisTemplate 一起使用,因为它聚合了所有 Redis 数据类型的所有操作?

【问题讨论】:

    标签: spring redis spring-data spring-data-redis


    【解决方案1】:

    StringRedisTemplate 只是 RedisTemplate 的一个特化,所以你应该可以直接使用 RedisTemplate,如果你喜欢的话,只要你在 StringRedisTemplate 的构造函数中设置所有的键/值序列化器。

    也许您可以提供有关您的配置以及遇到什么错误的更多信息?另外,为什么 StringRedisTemplate 不是您的用例的理想选择?

    【讨论】:

    • 我在 RedisTemplate 实例上更改的唯一配置是 ConnectionFactory 的注入,就像在文档中一样,它根本不起作用。我需要向这个类添加更多依赖项吗?
    • 您可能需要将 key/value 和 hashkey/hashvalue 序列化程序设置为 StringRedisSerializer 的实例,尽管默认序列化程序似乎适用于简单字符串。你得到什么错误?您使用的是哪个 ConnectionFactory?
    • 我没有收到任何错误。它根本不会将数据持久化到 Redis 服务器上。
    • 尝试将序列化程序设置为我上面提到的 StringRedisSerializer 的实例。默认情况下,RedisTemplate 对键使用 Java 序列化,因此它们不会以纯字符串形式出现在 Redis 中(尽管如果你执行 template.opsForValue().get("person") 你应该得到一个结果,因为相同序列化发生在 get 上的键上)。例如,如果我在执行您的代码后通过 redis-cli 执行“keys *”,则“person”键实际上列为“\xac\xed\x00\x05t\x00\x06person”。
    猜你喜欢
    • 2016-02-12
    • 2016-07-02
    • 2018-06-20
    • 2014-07-11
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2021-09-13
    • 2019-01-21
    相关资源
    最近更新 更多