【发布时间】:2020-12-07 13:38:29
【问题描述】:
我正在使用 Java 的 redisson 库来维护用于存储嵌套对象的 RLO(redisson 活动对象)。我使用 delete 从 redis 中删除了这些嵌套对象,但是从 redis-cli 我看到实际上该对象已被部分删除。我错过了什么?
【问题讨论】:
-
请添加一些代码以显示您实际尝试过的内容,以便我们检查您缺少什么
我正在使用 Java 的 redisson 库来维护用于存储嵌套对象的 RLO(redisson 活动对象)。我使用 delete 从 redis 中删除了这些嵌套对象,但是从 redis-cli 我看到实际上该对象已被部分删除。我错过了什么?
【问题讨论】:
我也遇到过不完全删除的问题,但我认为这是由于有两种不同的 delete 方法,它们的行为不同。
/**
* Deletes attached object including all nested objects.
*
* @param <T> Entity type
* @param attachedObject - proxied object
*/
<T> void delete(T attachedObject);
/**
* Deletes object by class and ids including all nested objects.
*
* @param <T> Entity type
* @param entityClass - object class
* @param ids - object ids
*
* @return amount of deleted objects
*/
<T> long delete(Class<T> entityClass, Object... ids);
虽然他们都说他们会删除所有嵌套对象,但只有其中一个会执行此操作。第一种方法实际上会调用私有方法
private <T> void delete(T attachedObject, Set<String> deleted)
它将执行嵌套对象的删除,快速检查后可以看到:
for (Entry<String, Object> obj : getMap(attachedObject).entrySet())
我不知道这是否是一个错误。
暂时还是用其他方法吧。如果您有实体 ID,那么在返回的活动对象上运行 get 和 delete 会很容易。
【讨论】: