【发布时间】:2018-09-23 22:20:26
【问题描述】:
我使用 Redis 作为包含 Spring 数据的数据库,没有自定义值或哈希值序列化程序。我假设标准 JdkSerializationRedisSerializer 应该用于对象序列化。 看起来某些对象的瞬态字段已序列化到数据库中。
瞬态字段修饰符、瞬态方法注释、@JsonIgnore 属性——所有这些似乎都不会影响字段的序列化。
我该如何克服这个问题?
【问题讨论】:
标签: java redis spring-data
我使用 Redis 作为包含 Spring 数据的数据库,没有自定义值或哈希值序列化程序。我假设标准 JdkSerializationRedisSerializer 应该用于对象序列化。 看起来某些对象的瞬态字段已序列化到数据库中。
瞬态字段修饰符、瞬态方法注释、@JsonIgnore 属性——所有这些似乎都不会影响字段的序列化。
我该如何克服这个问题?
【问题讨论】:
标签: java redis spring-data
我遇到了这个问题,虽然我最初将该字段标记为瞬态,但我相信这会使它成为瞬态 ;-) 当涉及到 spring data redis 时它没有。
对我有用的是注释字段:
...
import org.springframework.data.annotation.Transient;
...
@Transient
private ReadWriteLock lock = new ReentrantReadWriteLock();
pojo 不必实现 Serializable 并且该字段不必标记为瞬态。我想这样做仍然是很好的 Java 实践,但这不是必需的。
【讨论】:
我知道这对可怜的马特来说已经晚了两年,但我们最近也遇到了这个问题。 似乎起作用的是:
:
public class CachedValues implements Serializable {
private static final long serialVersionUID = -914745617137492359L;
private Long id;
private transient String nonRedisField;
...
}
【讨论】:
我们遇到了同样的问题,我也使用了瞬态(java 关键字)和 org.springframework.data.annotation.Transient 注释,但它不起作用,但使用 com.fasterxml.jackson.annotation.JsonIgnore 成功了。
这实际上取决于下划线redis是如何实现的,以及它使用什么序列化器或反序列化器。
【讨论】: