`
allskystar
  • 浏览: 4531 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

多关键字的缓存

阅读更多
一个博客系统,用户更改了自己的个人信息,需要刷新引用了个人信息的页面,
这时候有两种做法:一是清除相关的页面,二是设置一个时间间隔由缓存系统定期重新生成。

常用的缓存系统一般是设置单一关键字,例如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协议在客户端进行页面内容缓冲,同时,又不会过多增加服务器端的代码耦合
分享到:
评论
1 楼 zeeeitch 2009-01-10  
很有启发性

相关推荐

    网络游戏-用于在分布式网络中高效处理多关键字查询的方法和装置.zip

    《网络游戏-用于在分布式网络中高效处理多关键字查询的方法和装置》 网络游戏是现代娱乐产业的重要组成部分,随着技术的发展,游戏中的数据量和复杂性日益增加。为了提供流畅的游戏体验,尤其是在大规模多人在线...

    Html文件关键字搜索

    - **排序与过滤**:如果多个文件包含同一关键字,可以根据关键字出现的频率对结果进行排序;同时,可以设置过滤条件,如只显示含有完整关键字的文件,或排除含有某些关键字的文件。 2. **实现方法**: - **编程...

    sql关键字字典大全

    虽然J系列关键字在提供的内容中未提及,但可以推测**JOIN**关键字的存在,用于连接多个表的数据,是SQL中最复杂的操作之一。 #### K系列关键字 - **KEY**:虽然未具体列出,但通常与索引和外键约束相关联,用于...

    类似百度多关键字任意组合模糊搜索PB例程

    标题中的“类似百度多关键字任意组合模糊搜索PB例程”是指使用PowerBuilder(PB)开发的一个程序示例,该示例旨在实现类似于百度搜索引擎的功能,允许用户输入多个关键词,并进行任意组合的模糊搜索。在实际的搜索...

    richEdit关键字着色

    可以采用分块处理、缓存已处理部分、或者只处理可视区域等策略来提高效率。 6. **扩展性**:为了适应不同的编程语言,系统应具有良好的扩展性,允许添加或修改关键字列表,甚至支持自定义语法高亮规则。 7. **用户...

    分页缓存

    Ehcache本身提供了线程安全的保证,但如果是自定义的缓存实现,需要考虑并发读写的问题,可以使用`synchronized`关键字或`java.util.concurrent`包中的工具类。 7. **异常处理**:在处理缓存和数据库查询时,需要...

    c#缓存机制,提供缓存功能

    2. 创建MemoryCache实例:默认情况下,每个应用程序域都有一个默认的MemoryCache实例,也可以通过new关键字创建自定义实例。 ```csharp var cache = MemoryCache.Default; // 使用默认实例 // 或者 var customCache ...

    非法关键字检测可执行程序

    7. **性能优化**:由于可能需要处理大量数据,程序可能会采用并行处理、缓存技术或哈希表等方法来提高检测速度。 非法关键字检测在实际应用中面临一些挑战,比如误报(正常内容被错误地标记为非法)和漏报(非法...

    Java并发编程:volatile关键字解析

    **缓存一致性问题**是指当多个处理器或线程访问同一份数据时,如何确保它们看到的数据是最新的版本。例如,假设两个线程A和B都需要操作同一个变量`i`,初始值为0。线程A首先读取`i`的值,对其进行修改并更新回缓存;...

    部分关键字过滤,防止用户使用一些不合理的名称注册

    3. **云服务解决方案**:随着云计算技术的发展,越来越多的服务商提供基于云的关键字过滤服务。这种方式的优点在于无需过多关注底层技术细节,只需要按照API调用即可完成功能部署,并且能够轻松应对大规模流量冲击。...

    C++ 的 所有关键字 和他的解释

    `volatile` 关键字告诉编译器,变量的值可能会在编译器未察觉的情况下改变,例如由硬件中断或多线程环境中的其他线程修改。这使得编译器在每次使用该变量时都会重新读取其值,避免使用缓存的副本。在处理硬件寄存器...

    WEB项目中实现屏蔽关键字代码

    5. **性能优化**:考虑到大规模应用可能面临的高并发问题,可以使用缓存技术(如Redis)存储关键字库,减少数据库查询次数。另外,对于大量关键字的匹配,可以考虑使用Trie树等高效数据结构提高查找效率。 6. **...

    Java缓存技术的使用实例

    5. **线程安全**:在多线程环境中,确保缓存操作的正确性,可能使用synchronized关键字或者并发容器如ConcurrentHashMap。 6. **测试用例**:展示如何使用这个缓存实现,通常包括添加、获取和删除数据的场景。 在...

    PHP100视频教程41:PHP站内搜索、多关键字、加亮显示.rar

    1. **关键词提取与匹配**:首先,我们需要从用户输入的搜索字符串中提取关键字,通常通过`explode()`函数来分割多个关键字。然后,这些关键字会被用来查询数据库中的相关记录。 2. **SQL查询优化**:在数据库层面,...

    java shiro实现退出登陆清空缓存

    这里,`logout` 关键字对应的是 `systemLogoutFilter`,这意味着当用户访问 `/b/logout` 路径时,会触发我们的自定义登出过滤器。 接下来,我们需要创建一个名为 `SystemLogoutFilter` 的类,继承 Shiro 的 `...

    优化增强的缓存机制(SimpleCache).zip

    在IT行业中,缓存机制是优化...通过深入研究SimpleCache项目,我们可以掌握更多关于缓存设计和优化的知识,这将对我们的Java编程和系统优化能力大有裨益。同时,源码参考也是提升自身编程技巧和理解复杂系统的好途径。

    分布式缓存系统Memcached

    1.Memcached是什么?  Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问...每一个缓存项都根据它的关键字的哈希值来分配到一个服务器上。 注:相关组词来源于百度文库

    指定数据库关键字过滤

    2. **并行处理**:利用多核CPU的并行计算能力,将数据分割成多个部分并同时进行关键字匹配,能大幅提高搜索效率。 3. **优化的查询算法**:如Aho-Corasick算法或Boyer-Moore算法,可以在字符串匹配过程中减少不必要...

    关键字加亮

    当然,实际应用中还需要考虑更多因素,比如性能优化(使用索引、缓存等)、防止XSS攻击(对关键词进行转义)以及适应不同设备和浏览器的兼容性问题。 在"关键字加亮.php"这个文件中,很可能包含了一个实现上述功能...

    c++关键字详解

    首先,volatile关键字是用于处理多线程环境中的共享变量的。在多线程编程中,当多个线程需要访问并修改同一个变量时,为了确保每个线程都能看到最新值,应该使用volatile声明这个变量。volatile防止编译器优化,强制...

Global site tag (gtag.js) - Google Analytics