首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java缓存功能?

用Java缓存功能?
EN

Stack Overflow用户
提问于 2018-04-17 00:59:36
回答 1查看 3.5K关注 0票数 1

我有一个Spring/Java项目,我正在考虑缓存一些访问数据库和其他rest服务的函数。我不知道该在哪一点缓存某个流。例如,如果我具有以下功能:

代码语言:javascript
复制
public List<String> getSchools()
{
     //call db to get names
}

public List<String> getCourses(String school)
{
    //rest call to get courses for a school
}

public List<String> getTeachers(String course)
{
    //call db to get teacher names for a course
}

/*Uses above three functions together*/
public List<String> getAllTeachers()
{
      List<String> schools = getSchools();
      List<String> courses = new ArrayList<String>();
      List<String> teachers = new ArrayList<String>();

      for(String s : schools)
          courses.addAll( getCourses( s ) );
      for(String c : courses)
         teachers.addAll( getTeachers( s ) );

     return teachers;
}

在这里,我应该缓存哪些方法?我是应该缓存调用其他3个资源密集型函数的函数,还是应该单独缓存这三个函数?一般认为什么是好做法?

EN

回答 1

Stack Overflow用户

发布于 2018-04-17 05:52:42

关于,这个例子,,我永远不会考虑缓存,因为数据不会经常变化。

但是,我要做的是:当我第一次启动程序时,它应该检索它所需的任何内容,并在数据库中添加一些名为(changed)的变量,并将其赋值为0。在服务器端,每当我插入、更新或删除某个内容时,我都会将这个changed值更改为1。下一次当我启动应用程序时,它将检索changed值,如果它是1,那么它将从DB检索‘新’信息,然后返回值0。如果changed值已经为0,它将只使用缓存结果。

注意你的问题很棘手。因为如果你只把老师、学校和课程加载到记忆中,并且想要得到刚从课程中掉下来的学生的名单(这只是一个例子),那么就由你来决定是将学生加载到内存中,还是将其保存在数据库中。

记住一件简单的事情,当数据库中的某些内容发生变化时,将值更改为1,然后当您从程序内部查询时,将该值更改为zero

最后:为了避免争用条件,您可能需要考虑从select查询中将值更新回零。不要等到完成您的工作,因为您想考虑其他用户使用应用程序。确保changed值在表中而不是在文件中,并将InnoDB作为存储引擎,因为InnoDB按行而不是按表锁定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49868279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档