当我在App Engine控制台的数据存储查看器中手动更新我的某个实体时,我遇到了这个问题,我无法立即从使用我已更新的数据的Android应用程序中看到更新。我知道有Memcache可以从中检索数据。 因此我的问题是可以删除我更新的实体的memchache,以便我的应用程序获取要显示的新数据吗?如果是这样,有人可以告诉我该怎么做吗?
P.S。我曾尝试通过管理控制台使用“Flush Memcache”,但它没有帮助。我仍然得到'旧'实体
这就是我检索实体的方式。我使用JDO来持久化和查询数据。在我的数据访问器对象中,我有这个方法,它返回所有作业并将其转换为JSONArray。最终,这个JSONArray被传递到我的移动应用程序,遗憾的是“旧”数据。
public JSONArray getAll() {
JSONArray array = new JSONArray();
try {
Query q = pm.newQuery(Job.class);
List<Job> resultSet = (List<Job>) q.execute();
Collections.sort(resultSet);
Iterator i =resultSet.iterator();
while (i.hasNext()){
Job j = (Job) i.next();
if(j.getDateDue().after(new Date())){
JSONObject tempjson;
tempjson = j.toJSONObject();
array.put(tempjson);
}
}
return array;
}
catch (JSONException e) {
e.printStackTrace();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
这是我的Job课程。我已经修剪了它的代码,只显示属性而不占用太多空间。
@PersistenceCapable
public class Job implements Comparable<Job>{
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Key jobId;
@Persistent
private String jobTitle;
@Persistent
private String jobDescription;
@Persistent
private String address;
@Persistent
private String priority;
@Persistent
private double latitude;
@Persistent
private double longitude;
@Persistent
private String employeeId;
@Persistent
private Date dateAdded;
@Persistent
private Date dateDue;
@Persistent
private boolean completed;
对我而言,应用程序可以立即处理新的更新数据,这一点非常重要。我感谢任何帮助
答案 0 :(得分:1)
由于您使用'flush memcache',因此当您部署的软件使用memcache作为缓存时,您可以解决到达memcache以解决更新实体的常见问题。当写入(puts)和后续查询不使用祖先(父)实体时,嫌疑人现在是最终一致性的结果。您需要向我们展示一些代码才能确定。