转 http://www.cnblogs.com/aigongsi/archive/2012/06/01/2531232.html
缓存使用的一些注意事项
最近在项目中使用了很多缓存技术,包括局部缓存,远程集中式缓存,分布式缓存,在缓存的使用中也发现一些问题,整体总结如下:
1 使用局部缓存要注意内存溢出
一般局部缓存使用Map来实现,很容易无限制的往Map中填入数据,导致内存溢出。最好的方法就是使用SoftReference引用对象,而不是强引用对象
2 在分布式环境下使用局部缓存,如果缓存是同一类数据,比如同一张表的数据库配置,则需要考虑一个同步措施,保证各个集群之间的数据是在一致的。
一般情况下,需要每台集群机器定时刷新缓存,在刷新缓存的时候,注意要对缓存加锁。这种情况下,需要对某一时刻,个台机器之间的缓存状态是不一致的。
3 远程集中缓存需要考虑远程调用开销和缓存对象的序列化和反序列化开销。
远程缓存就需要通过远程调用缓存服务器来实现,远程调用开销比较大,所以缓存对象设置的要合理,避免获取一个完成对象的时候时候多次访问缓存信息。又由于序列化和反序列化的开销,缓存对象要尽可能的小。
4 远程集中式缓存需要考虑单点问题。如果缓存服务器宕机,所有的对缓存访问都失效。需要考虑备份的缓存服务器。
5 分布式缓存需要考虑缓存对象的分配算法,分配算法很重要,需要缓存请求能够平均的分配到各台缓存服务器。尤其当缓存机器增加一台或者减少一台的时候,分配算法需要考虑哈希一致性的问题。
6 分布式缓存也会存在某写缓存服务器宕掉问题,会影响1/N的缓存访问。
相关推荐
在React Native开发中,处理图片缓存是一项关键任务,它涉及到用户体验、性能优化以及网络资源的合理利用。...通过阅读“react_native图片缓存1.pdf”文档,可以获取更多具体的技术细节和实践案例。
1. 读取速度快:本地缓存不需要远程网络请求去操作内存空间,没有额外的性能消耗,所以读取速度快。 2. 适合小规模数据存储:本地缓存适合存储小规模的数据,例如配置信息、用户信息等。 本地缓存缺点 1. 不能进行...
1. 缓存更新:一级缓存的更新由SqlSession的commit或rollback操作触发,二级缓存的更新需要在执行影响数据的SQL(如INSERT、UPDATE、DELETE)后手动调用flushCache方法。 2. 并发问题:在多线程环境下,一级缓存不能...
1. **一级缓存**:一级缓存是默认开启的,无需额外设置。 2. **二级缓存**:在 MyBatis 的配置文件中,设置 `<cache>` 标签开启全局二级缓存: ```xml ``` 在对应的 Mapper 映射文件中,使用 `<cache>` ...
1. **全相联映射**:主存的任何一块数据都可以映射到缓存的任意位置,这提供了较高的命中率,但查找效率较低,且硬件实现复杂。 2. **直接相联映射**:主存的每一块数据只能映射到缓存特定的块,这种方法简单快速,...
1. **动作缓存**:可以缓存整个动作的输出,包括或不包括布局。 2. **局部模板、组件或组件槽缓存**:单独缓存模板的一部分,如某个功能模块或组件。 3. **模板片段缓存**:通过模板内的辅助函数管理,针对模板中的...
1. **缓存注解**:Spring 提供了多种注解来实现缓存管理。其中,`@Cacheable` 用于标记一个方法,当方法被调用时,其返回值会被缓存起来,以便后续相同参数的调用可以直接从缓存中获取结果,减少数据库或远程服务的...
1. 内存缓存:内存缓存(也称为LRU缓存)将图片存储在应用程序的内存中。由于内存读写速度快,图片加载迅速,但内存资源有限,当系统需要更多内存时,可能会清除部分缓存以释放空间。因此,内存缓存适用于短期频繁...
1. 查找缓存:首先,我们需要根据键值(key)检查缓存中是否存在所需的数据。 ```vbscript Dim cachedData If Not IsNull(Application("cacheKey")) Then cachedData = Application("cacheKey") End If ``` 2. ...
1. **Cache Aside 更新模式** 这是最常见且广泛使用的缓存策略。在这个模式中,应用程序首先尝试从缓存获取数据,如果未命中,再从数据库中获取并存入缓存。更新操作则需要先更新数据库,然后再使缓存失效。这种...
1. 页面级缓存:整个页面被缓存,适用于内容几乎不变化或者变化周期长的页面。 2. 部分缓存:通过`<asp:UpdatePanel>`控件或`OutputCache`指令实现部分页面的缓存,允许页面的某些部分动态更新。 3. 基于参数的缓存...
1. **缓存的替换策略**:当一级缓存空间满时,Hibernate会根据LRU(Least Recently Used,最近最少使用)算法淘汰不常使用的对象,为新对象腾出空间。 2. **缓存的隔离**:在多线程环境下,每个线程都有自己独立的...
视频教程"【传智播客.Net培训—asp.net高级】31缓存1.avi"可能涵盖了更深入的缓存实践和技巧,包括如何在实际项目中应用上述概念,以及优化缓存性能的最佳实践。此外,相关链接如“寻找自己的学习方向.txt”和“...
1. 内存缓存:内存作为缓存介质,其读写速度极快,但容量有限且数据易丢失(断电后数据消失)。因此,内存缓存主要用于短期存储热点数据,适用于高并发、低延迟的场景,如数据库系统和高性能计算。 2. 固态硬盘缓存...
1,对于强引用和软引用的使用,我们首先去强引用缓存中去找图片资源,当没有发现时,就去软引用缓存中。当强引用的超额时,将最后使用的资源放入软引用缓存中,使用到软引用的资源时 ,则将资源重新放回强引用缓存...
1. 磁盘缓存:Android提供了HttpUrlConnection和OkHttp等网络库,它们内置了磁盘缓存机制。通过设置缓存大小和路径,网络请求的响应数据会被自动存储到指定目录下,下次请求相同资源时,可以直接从磁盘读取,避免了...
// 缓存1小时 response.setDateHeader("Expires", System.currentTimeMillis() + 3600 * 1000); // 同样缓存1小时 ``` 此外,还可以使用Java的`HttpServletResponse`接口的`setLastModified()`方法来设置页面的...
1. 使用WebView内置的缓存机制:WebView自身提供了缓存机制,包括内存缓存和磁盘缓存。通过设置`WebSettings`的`setCacheMode`方法,可以开启缓存模式。例如,我们可以设置为`LOAD_CACHE_ELSE_NETWORK`,这样在网络...
1. **一级缓存(First-Level Cache)**:每个Session实例都有一个私有的、线程安全的一级缓存,它是默认开启且不可关闭的。当我们在Session中对实体进行CRUD操作时,数据会首先被缓存到一级缓存中,同一Session内的...