浏览 1881 次
锁定老帖子 主题:多关键字的缓存
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-10
这时候有两种做法:一是清除相关的页面,二是设置一个时间间隔由缓存系统定期重新生成。 常用的缓存系统一般是设置单一关键字,例如ehcache,相关度必须有程序来控制, 所有与个人信息引用相关的页面需要用程序来控制,对于新增了页面,或者更复杂的清除逻辑就不好管理了, 所以一般常见的做法仅仅强制刷新首页,用户信息页等少数信息,其它页面采用第二种策略定期重新生成, 但是定期的时间过长,容易给用户很不好的感觉,会觉得刚才自己的更改没有生效, 定期时间过短,又起不到很好的缓存的作用。 或者干脆不做页面级别的缓存,仅仅做对象级别的缓存,这样就只需要刷新用户信息对象, 只是不缓存页面,一般不方便对页面设置Last-Modified等HTTP协议信息,每一次请求都会重新生成页面。 基于以上两个情况,考虑实现一个多关键字的缓存模式,在读的时候,要求所有关键字与值都完全匹配, 而清理的时候,只需要指定部分关键字。例如: 1.首页缓存,关键字{URL=/,USER_ID=用户名,BLOG_ID_1=列表中第一篇,BLOG_ID_2=列表中第二篇,BLOG_ID_3=列表中第三篇...} 2.博客文章页缓存,关键字{URL=/****.html,USER_ID=用户名,BLOG_ID=博客ID} 3.同时建立首页博客列表对象缓存,{URL=/,USER_ID=用户名},值是首页博客列表中的全部ID序列 用户访问首页时,根据{URL=/,USER_ID=用户名}读缓存3,得到列表,然后加上{USER_ID=用户名,URL=/}请求缓存1,就能得到一个静态的缓存页面路径。 用户信息变更时,要求清除所有USER_ID=用户名的缓存,这时当前USER_ID下的所有缓存都会被清除。 而当用户修改博客时,需要清除的仅有{BLOG_ID=博客ID}{BLOG_ID_1=博客ID}{BLOG_ID_2=博客ID}{BLOG_ID_3=博客ID}的页面,首页就不一定会被清除 对于大量读少量写,且实时性、用户体验要求高的系统,多关键字缓存,能很好的利用HTTP协议在客户端进行页面内容缓冲,同时,又不会过多增加服务器端的代码耦合 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-10
很有启发性
|
|
返回顶楼 | |