最近在做的一个网站,首页需要分块加载数据,每一块都需要使用一个很耗时的查询方法。最后想到了一个首页缓存的方法。
即在后台java服务器脚本中维护一个application的变量(setAttribute("","")),该对象将每一块数据都作为一个对象参数保存,在服务器启动的时候就加载一次,再写一个timer计时器每天晚上定时更新一下就行了。参见代码:
维护的对象对应的首页类(获取的每一块数据都作为一个单独的属性):
- public class IndexItems {
- private ResultContent AllSubject;// 所有学科
- private ResultContent Physical;// 物理
- private ResultContent Chemistry;// 化学
- private ResultContent LifeScience;// 生命科学
- private ResultContent EnginMat;// 工程材料
- private ResultContent EarthScience;// 地球科学
- private ResultContent InformaScience;// 信息科学
- private ResultContent Manager;// 管理
- private ResultContent Medicine;// 医学
- public synchronized ResultContent getAllSubject() {
- return AllSubject;
- }
- public synchronized ResultContent getPhysical() {
- return Physical;
- }
- public synchronized ResultContent getChemistry() {
- return Chemistry;
- }
- public synchronized ResultContent getLifeScience() {
- return LifeScience;
- }
- public synchronized ResultContent getEnginMat() {
- return EnginMat;
- }
- public synchronized ResultContent getEarthScience() {
- return EarthScience;
- }
- public synchronized ResultContent getInformaScience() {
- return InformaScience;
- }
- public synchronized ResultContent getManager() {
- return Manager;
- }
- public synchronized ResultContent getMedicine() {
- return Medicine;
- }
- // 获取一个首页对象,并解析成json字符串,将它保存在application里面以供调用
- public void SetApplication() {
- try {
- String limit = "5";
- String offset = "0";
- AllSubject = StaticFunc.getItemBySubject("[[]]", limit, offset);// 获取全部前几项
- MetadataEntry meta = new MetadataEntry();
- meta.key = "dc.subject";
- meta.value = "数理科学部";
- meta.language = null;
- // 转换为json
- ObjectMapper mapper = new ObjectMapper();
- String jsonStr = "[[]]";
- jsonStr = "[[" + mapper.writeValueAsString(meta) +