问题描述
要做一个本地缓存,需求如下:需要缓存一个list,每次http请求的时候读取的都是list里面的值,缓存定时(每天晚上10点)去查询数据库,更新这个list。如何实现?最好有详细代码参考。同这个贴http://topic.csdn.net/u/20110517/18/53f9585c-4df7-4d1c-b86c-d6d85da7beca.htmlps:我需要缓存整个list,list排好序,使用get(index)取值。别说缓存框架,需求不多,不值得引入框架增加复杂度。 问题补充:redstarofsleep 写道
解决方案
引用假如有两个servlet,一个是你说的这个CacheServlet,实现了缓存,一个是DisplayServlet,用来展现缓存里面的东西,那我再DisplayServlet里面如何得到这个list?总不能new CacheServlet().get()吧。不用,static的一直在的。get方法也是static的,直接用类名引用就可以,不用new
解决方案二:
现在好多比较简单的缓存 就是放在static里实现的,也就是常驻内存
解决方案三:
在你程序停止 时就自动跟JVM一块卸载了
解决方案四:
static的东西得你自己手动置空等 操作
解决方案五:
static是不会被 GC掉的
解决方案六:
引用那我如何用这个servlet和其他的进行通信?不能用cookie,session,application不用通信啊,这个static的List是一直存在的。别的地方只要通过下面public的get方法就能拿到了。
解决方案七:
你说的类不被卸载是什么概念,明人只有读的功能,定时器才负责写
解决方案八:
配一个Servlet定义Listprivate static List<T>然后在这个Servlet的init方法中初始化这个List给List同步的set方法,为保证性能get方法不需同步public static List<t> getXxList()public static synchronized void serXxList(List<T> list)
解决方案九:
定义一个全局的静态变量list,(全局的静态变量就相当于把对像入到了内存且不进行释放,也就是缓存了)然后官写个定时器,定时读取数据库的内容,并把内容按照想要的格式放入list以后读的时候就读这个list变量了最后要注意的是记得考虑并发(也就是当定时器在写内容到list时,不能有读的操作),给list在写操作时控制一下同步