最近阅读了一些有关缓存的资料,主要是两个ehcache和memcached.由于都没有使用过,所以在此只是对收集的资料进行一些总结.
1.性能比较
ehcache和memcached的性能都很强.有些资料显示ehcache的性能数百倍于memcached.由于自己没有使用过,所以没有具体感受.不过memcached被很多大型网站使用,可见其性能已经相当强劲.
2.持久化
memcached是纯内存型缓存,但是可以使用第三方模块进行磁盘或者数据库的缓存持久化.
ehcache则原生支持将缓存持久化到磁盘,在缓存服务器重启的时候会自动将磁盘的内容读入内存.当内存使用超过设置值时会自动将缓存持久化到磁盘.
3.对集群的支持
memcached服务器之间并不通信,所有的分布式算法都在客户端实现.由于服务器之间也不拷贝数据,所以容灾主要靠客户端算法完成.
ehcache使用RMI在服务器之间做异步数据同步,以保证服务器之间的数据一致性.所以原生容灾支持,不需要客户端的特别算法.
4.缓存的过期移除策略
memcached可以设置缓存过期时间,但是并不设置异步监控线程清理过期的缓存,而是在客户端请求缓存时检查是否过期.当内存空间不足的时候,会使用LRU(最近最少使用)算法释放内存空间.
ehcache使用JVM的内存空间,同样使用LRU算法,同时也支持FIFO,LFU等算法.推荐(也是默认)使用LRU.
5.API客户端
memcached支持使用socket通信的任何编程语言客户端,现在Python,Java,PHP,Ruby,Perl等等几乎所有语言都有相应的客户端.
ehcache主要服务于Java,本身也由Java开发.是Hibernate默认使用的外部缓存.所以只有Java访问API.但服务器也可以使用.但是也可以建立使用RESTful或者Webservice的服务器,这样其它语言也可以使用HTTP协议使用ehcache缓存服务.
memcached只支持C/S的访问结构.服务器本身的cpu负载极低,在分布式应用中性能主要瓶颈在于网络通信.
ehcache现在的版本也支持memcached的C/S方式,同时也支持在JAVA应用内部集成.
分享到:
相关推荐
缓存是一种存储技术,它将频繁使用或近期可能需要的数据临时存储在...对于IT专业人士而言,理解缓存的工作原理,熟悉不同缓存算法的适用场景,以及掌握相关缓存框架的使用和配置,对于设计和优化高性能系统至关重要。
总结来说,OpenCV4.5.1的相关缓存文件对于在无CUDA支持的环境下编译OpenCV4.5.1+contrib4.5.1是非常有用的,它能帮助开发者快速配置和构建项目,避免重复的工作。理解如何正确使用和管理这些缓存文件是优化开发流程...
- **缓存失效**:在某些情况下,如数据库数据被其他应用更改时,需要显式地清除相关缓存,以防止数据不一致的问题。 - **缓存刷新**:当使用读写或非严格读写策略时,需要确保在事务结束前调用`session.close()`方法...
在面试中,对于缓存相关的知识点,面试官可能会考察你对缓存雪崩、缓存穿透、缓存预热、缓存更新以及缓存降级的理解和处理策略。以下是这些概念的详细解释: 1. **缓存雪崩** 缓存雪崩是指大量缓存在同一时刻过期...
4. **缓存事件**:Nutz提供了一些缓存事件监听器,例如在数据更新或删除时,可以触发清除相关缓存的操作,保持缓存与数据库的一致性。 5. **自定义缓存实现**:如果默认的缓存实现不能满足需求,开发者可以通过实现...
- **处理Shared Preferences缓存**:如果应用使用Shared Preferences存储数据,也要清除相关缓存。 - **清理网络缓存**:如OkHttp、Volley等网络库也有自己的缓存机制,需要按照库的API进行清理。 2. **`...
总的来说,熟练掌握缓存查看工具可以帮助我们更好地理解和调试与缓存相关的Web应用问题,优化网页性能,减少加载时间,并提升用户的浏览体验。无论是对个人开发者还是专业团队,这些都是不可或缺的技能。通过深入...
例如,如果选择EhCache作为缓存管理器,需要添加对应的bean定义,并配置相关的属性,如缓存的名称、大小限制等。 3. **使用缓存注解**: - `@Cacheable`:此注解用于标记那些结果可以被缓存的方法。当方法被调用时...
内存缓存主要用于存储对象,如数据库查询结果或计算结果,这些数据可以是全局的,也可以是特定用户相关的。输出缓存则主要针对HTTP响应,它可以缓存整个页面或页面的部分内容,这样当相同的请求再次到来时,就可以...
不过,查询缓存需要注意的问题更多,例如,当查询条件发生变化时,需要正确清理相关缓存条目,以防止返回错误的结果。 总之,SSH框架中的Hibernate二级缓存是提高系统性能的有效手段,但使用时需考虑其与数据一致性...
- `Cache::tags()`:使用标签功能,可以一起清除一组相关缓存项。 ### 源码分析 `Cache` Facade 实际上是对 `CacheManager` 类的代理。`CacheManager` 是一个缓存工厂,负责创建并管理不同类型的缓存仓库(`...
文件名称“RedisCache-master”可能是一个包含Redis缓存相关项目的源代码仓库,里面可能包括了如何配置、使用Redis作为缓存的示例代码,以及如何与本地缓存结合的实践。 总结来说,本地缓存和Redis缓存各有优势,...
4. **错误修复**:当应用出现异常,可能与缓存有关,清理缓存是一种有效的排查手段。 使用"RunTimeCleaner"这个工具,开发者可以轻松地批量删除RUNTIME目录下的缓存文件,提高开发效率,确保应用的正常运行。需要...
-- Redis相关配置 --> ``` 4. 定义Mapper缓存:在每个Mapper接口或XML配置文件中,启用二级缓存并指定对应的缓存namespace,这是区分不同Mapper的缓存key。 ```xml <!-- 其他查询和更新语句 --> ``` 5....
一级缓存的生命周期与SqlSession紧密相关。当SqlSession关闭或提交事务时,一级缓存会被清空。如果在同一个SqlSession中进行了更新、插入或删除操作,即使没有关闭SqlSession,一级缓存也会被清空,以防止返回过时的...
例如,当数据库中的数据发生变化时,可以触发一个事件,调用`Cache.Remove`来清除相关的缓存项。 在实际开发中,为了提高缓存的效率和可维护性,可以采用缓存策略设计,如Least Recently Used (LRU)、First In ...
然而,在某些情况下,如遇到DNS解析错误或需要测试新的域名解析配置时,就需要清空本地DNS缓存来解决相关问题。 #### 方法一:使用命令行工具 大多数现代操作系统都提供了命令行工具来帮助用户管理和维护DNS缓存。...
这通常需要在更新数据库时同步清除或更新相关的缓存项。 2. **缓存穿透**:防止无效请求穿透到数据库,可以设置布隆过滤器来过滤掉不可能存在的数据请求。 3. **缓存雪崩**:多个缓存同时过期可能导致大量请求涌向...
1. **缓存的作用**:缓存的主要目的是优化性能,当用户首次打开一个应用或访问一个网页时,相关数据会被保存在本地,下次访问时可直接从缓存读取,减少加载时间。 2. **缓存的类型**:Android应用中的缓存通常分为...
在使用Nginx作为缓存服务器时,相关缓存文件通常保存在proxy_temp_path指令指定的目录下。可以通过删除这个目录下的文件来手动清理缓存,或者使用定时任务定期删除过期缓存文件。需要说明的是,这些操作并不需要重启...