Redisson 在存储 java POJO 时创建一个额外的键
Redisson creates an extra key on storing a java POJO
我正在使用带有 spring boot (2.1.5) 的 redisson (3.11.4) 来存储 java 个对象。
我的 POJO 看起来像这样。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@REntity
public class ParentRecord {
@RId
private String id;
private String type;
private String root;
private Map<String, String> children;
}
然后我继续使用 merge
存储我的数据。
liveObjectService.merge(parentRecord);
messageKeyCache.put(parentRecord.getId(), parentRecord.getId(), 60, TimeUnit.SECONDS);
合并后我看到两个键,一个是实际数据。
redisson_live_object:{223334343322}:com.memorystore.schema.ParentRecord:id:java.lang.String
另一个是 redisson_live_object_field:{223334343322}:com.memorystore.schema.ParentRecord:children:org.redisson.RedissonMap
我可以通过 liveObjectService.delete(ParentRecord.class, someId);
删除第一个键
但这不会删除第二个密钥。我删除第一个键时不应该删除它吗?如果没有那么我该如何删除它?
1)添加@RCascade注解:
@RCascade(RCascadeType.ALL)
private Map<String, String> children;
2) 删除对象:
public void deleteByKey(K key) {
T object = findByKey(key);
liveObjectService.delete(object);
}
private T findByKey(K key) {
return liveObjectService.get(type, key);
}
其中类型 - some class(ParentRecord.class).
我正在使用带有 spring boot (2.1.5) 的 redisson (3.11.4) 来存储 java 个对象。
我的 POJO 看起来像这样。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@REntity
public class ParentRecord {
@RId
private String id;
private String type;
private String root;
private Map<String, String> children;
}
然后我继续使用 merge
存储我的数据。
liveObjectService.merge(parentRecord);
messageKeyCache.put(parentRecord.getId(), parentRecord.getId(), 60, TimeUnit.SECONDS);
合并后我看到两个键,一个是实际数据。
redisson_live_object:{223334343322}:com.memorystore.schema.ParentRecord:id:java.lang.String
另一个是 redisson_live_object_field:{223334343322}:com.memorystore.schema.ParentRecord:children:org.redisson.RedissonMap
我可以通过 liveObjectService.delete(ParentRecord.class, someId);
删除第一个键
但这不会删除第二个密钥。我删除第一个键时不应该删除它吗?如果没有那么我该如何删除它?
1)添加@RCascade注解:
@RCascade(RCascadeType.ALL)
private Map<String, String> children;
2) 删除对象:
public void deleteByKey(K key) {
T object = findByKey(key);
liveObjectService.delete(object);
}
private T findByKey(K key) {
return liveObjectService.get(type, key);
}
其中类型 - some class(ParentRecord.class).