就我目前做的项目而言,需要为性能做缓存的地方不外乎两个方面:
1:将经常需要查询的数据库的结果集(这个结果集涉及的记录最好是不需要经常更新或删除的)放到一个集合里,这样可以节省对数据库的访问和查询数据的所消耗的时间,一般而言,这对性能调优是很有帮助的。
2:将经常需要获取XML,PROPERTIES文件中节点信息放到一个集合里(同样我们希望这个文件是不需要经常更新或删除某些信息的)
下面就是讲解实例了假设现在有这样一个需求:我们做的是一个互动答题的项目,用户在一轮答题的过程中答的题目不可以重复,而我们系统每道下发题是从题库中随机抽取的。很明显我们需要记录下每个答题的用户在那轮答过的题的题号,这样我们从数据库中随机抽取一个题目的题号,遍历查询那轮用户答的题目,重复则系统继续随机抽取,否则下发题目。问题的难点便是如何记录下每个答题的用户在那轮答过题的题号。
具体说来我想到两个方案:
1:在数据库中创建一个临时表user_answer(userid,questionid),用户答题的时候我们便将用户的某唯一标识和题目的唯一标识插入这张表中,从题库随机生成题目后查询这张表,结果集有值则生成的题目用户答过,重新随机生成,直到结果集为空,下发用户答题。用户该轮答完题目后要清空该用户的记录,以防数据冗余。写入文件与该方法相似就不举例了。
2:写一个单例类AnswerRecord,属性map(String userid,String questionids),从题库随机生成题目后将题号例8888用map.get(userid)获取questionids,为空则该用户本轮第一次答题,题目可以直接下发,否则questionids.indexof("-8888-")得到的结果是-1则该题目该用户本轮没有答过,可以下发,否则要继续从题库中继续随机生成题目按上面的步骤来一遍直到可以下发为止,下发题目的同时需要更新map将questionids+=“-8888-”;将获得的新的questionids用map.put(userid, questionids)更新缓存。