【问题标题】:Spring Data and Redis - serializing transient fieldsSpring Data 和 Redis - 序列化瞬态字段
【发布时间】:2018-09-23 22:20:26
【问题描述】:

我使用 Redis 作为包含 Spring 数据的数据库,没有自定义值或哈希值序列化程序。我假设标准 JdkSerializationRedisSerializer 应该用于对象序列化。 看起来某些对象的瞬态字段已序列化到数据库中。

瞬态字段修饰符、瞬态方法注释、@JsonIgnore 属性——所有这些似乎都不会影响字段的序列化。

我该如何克服这个问题?

【问题讨论】:

    标签: java redis spring-data


    【解决方案1】:

    我遇到了这个问题,虽然我最初将该字段标记为瞬态,但我相信这会使它成为瞬态 ;-) 当涉及到 spring data redis 时它没有。

    对我有用的是注释字段:

        ...
        import org.springframework.data.annotation.Transient;
        ...
        @Transient
        private ReadWriteLock lock = new ReentrantReadWriteLock();
    

    pojo 不必实现 Serializable 并且该字段不必标记为瞬态。我想这样做仍然是很好的 Java 实践,但这不是必需的。

    【讨论】:

    【解决方案2】:

    我知道这对可怜的马特来说已经晚了两年,但我们最近也遇到了这个问题。 似乎起作用的是:

    1. 在 Java 类上设置序列化 ID。 Eclipse 和 IntelliJ 都会为您生成一个。 -1 似乎不起作用。
    2. 使用瞬态 Java 修饰符,而不是 Spring @Transient 标记。

    public class CachedValues implements Serializable {
        private static final long serialVersionUID = -914745617137492359L;
        private Long id;
        private transient String nonRedisField;
        ...
    }
    

    【讨论】:

      【解决方案3】:

      我们遇到了同样的问题,我也使用了瞬态(java 关键字)和 org.springframework.data.annotation.Transient 注释,但它不起作用,但使用 com.fasterxml.jackson.annotation.JsonIgnore 成功了。

      这实际上取决于下划线redis是如何实现的,以及它使用什么序列化器或反序列化器。

      【讨论】:

        猜你喜欢
        • 2017-07-21
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-22
        • 2012-03-30
        • 2016-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多