RoboSpice 在忽略缓存时不会覆盖缓存的对象
RoboSpice won't overwrite cached object when disregarding cache
每次当我启动 activity 时,我都会使用 spicemanager.execute 和一周的参数 UserCacheKey 和 CacheTime 从服务器获取用户对象。
当我拉动刷新时,我通过使用 spicemanager.execute 而不提供 UserCacheKey 和 CacheTime 参数来忽略当前缓存的用户对象缓存。
现在我从服务器获得了一个新用户对象,我想用这个新用户对象覆盖缓存中的现有用户对象。所以我所做的是使用 spicemanager.putInCache 并提供参数 User.class、UserCacheKey 和 newUserObject。我觉得奇怪的是我无法提供 CacheTime。无论如何,现在我认为旧的 User 对象被我的新对象覆盖了,因为我使用相同的 UserCacheKey 来存储该对象。
但是当我调用从服务器(使用缓存)获取用户时,我得到了返回的旧用户对象,我认为它会被我的新用户对象覆盖。
抱歉,文字有点多,但我不知道我是否正确实施。
当 RoboSpice 从网络加载数据时,它被放置在由缓存键和对象类型和时间戳索引的缓存中。此时过期是没有意义的。当数据已经在缓存中时,它仅用于后续请求。
对于正常负载,我建议使用 execute(..., DurationInMillis.ONE_WEEK, ...)
。这意味着如果在缓存中找到数据,它将检查它是否在一周内有效。
然后在手动刷新时使用execute(..., DurationInMillis.ALWAYS_EXPIRED, ...)
以便跳过缓存并从网络加载数据。加载的数据仍然存储在缓存中,因此下一个 'normal' 请求可以检索它。
每次当我启动 activity 时,我都会使用 spicemanager.execute 和一周的参数 UserCacheKey 和 CacheTime 从服务器获取用户对象。
当我拉动刷新时,我通过使用 spicemanager.execute 而不提供 UserCacheKey 和 CacheTime 参数来忽略当前缓存的用户对象缓存。
现在我从服务器获得了一个新用户对象,我想用这个新用户对象覆盖缓存中的现有用户对象。所以我所做的是使用 spicemanager.putInCache 并提供参数 User.class、UserCacheKey 和 newUserObject。我觉得奇怪的是我无法提供 CacheTime。无论如何,现在我认为旧的 User 对象被我的新对象覆盖了,因为我使用相同的 UserCacheKey 来存储该对象。
但是当我调用从服务器(使用缓存)获取用户时,我得到了返回的旧用户对象,我认为它会被我的新用户对象覆盖。
抱歉,文字有点多,但我不知道我是否正确实施。
当 RoboSpice 从网络加载数据时,它被放置在由缓存键和对象类型和时间戳索引的缓存中。此时过期是没有意义的。当数据已经在缓存中时,它仅用于后续请求。
对于正常负载,我建议使用 execute(..., DurationInMillis.ONE_WEEK, ...)
。这意味着如果在缓存中找到数据,它将检查它是否在一周内有效。
然后在手动刷新时使用execute(..., DurationInMillis.ALWAYS_EXPIRED, ...)
以便跳过缓存并从网络加载数据。加载的数据仍然存储在缓存中,因此下一个 'normal' 请求可以检索它。