一、问题
这几天写webservice提供接口时
问题:当前台通过条件调用接口查询数据时,查询的数据量太大。
为了减小前台的压力,又要减少后台对数据库的多次访问(个人理解),可以使用缓存类来解决该问题。
二、主要的设计逻辑如下图:
三、具体流程:
将原来单纯的通过参数传入返回所有数据的逻辑方法改为(两个方法+缓存类)的方式
(1) 缓存类:以Map形式存储,key(此处称为OutKey)为对应的时间字符串,value也是一个map
(该map的key称为inKey,将inKey设计为是对应的页码), 该map目的是将所有记录按
照指定的条数分段,将来用户获取时,可传入Outerkey和inKey,首先找到指定条件
查询出来的记录,再根据页码inkey找到对应的第几页的数据,然后给用户返回。
存入的细节具体如下图:
(2)方法一:根据条件获取查询记录总条数和缓存类对应数据的key值(该key为存入缓存Map时
的时间字符串)
(3)方法二:根据key和页码(页码与内map里的key对应),这样即可找到某个条件查询数据下的第几页数 据。
四、缓存Map的定时清除
如果不同的条件多次访问服务器,每次都将数据存入缓存Map,这样缓存Map就会越来越大,这样就需要定
时删除功能,定时删除必须知道开始时间,前边存入缓存Map时的key即为对应开始时间,这样就简单多了
具体如下:
五、犯的小问题
(1)将如下方法的时间写成了获取当前时间值,哈哈,这样导致该TimerTask方法运行时是在两千年后.。。。。。。
(2)注意缓存Map是随服务器关闭而内容消失的,而我,非要在调取第一个方法的时候,拿到key,然后关闭main 方法,再掉第二个方法,一直没有拿到值,而且还自我肯定了半天是TimerTask写错了。。