使用Memcached。需求是这样的:系统需要把大量的关键常用数据(十万条以上,在不断增长中)放到缓存中,为提高程序执行效率。那么这些数据在缓存中的存储方式是怎样的时候,效率最高?站在目前的缓存工具角度来想,假设要缓存的数据为手机的订阅关系,可以有下面两种做法:
一,在缓存中建一个Cache,键为subsription,值则是一个大哈希表,哈希表存放所有的数据,以唯一的手机做Key,相关订阅信息做Value。
如此要查询一个手机的订阅数据,要先从Cached里拿到到key为subscription的缓存,这是个大哈希表,然后再从哈希表里按手机拿出订阅信息:
Map datas = memcached.get("subscription");
Subsciption s = datas.get(mobile);
这样的缺点就是查询客户端会从Memcached的Server拿到一个巨大的Map。不仅网络开销大,并且客户端也要开辟大块内存来存放这个临时的Map。
二,每一个订阅关系作为一个缓存实体放到Memcached中。那就意味着查询极为方便:
Subscription sub = memcached.get(mobile);
但是在Memcached里就会有几十万个缓存实体了,不知道是否会给查询带来速度上的影响。另一个不便的地方就是从缓存里拿不到订阅关系的总数(当然这个需求显得很鸡肋)。
下面是我自己的一些幻想。假如我按照做法一来存放数据。查询能这样就好了:
Subscription sub = memcached.get(“subscription#” + mobile);
不需要担心服务器端给客户端返回一个大Map,又占用客户端巨大的内存资源。所有的嵌套查找工作交给服务器去做,最后返回我想要的订阅关系即可。当然,我依然可以使用get("subscription")拿回一个大Map。
不过看起来我这样的想法应该是有点不实际。更多的是我想请教下大家,在大数量缓存的情况下,大家会使用什么样的缓存策略?
分享到:
相关推荐
通过以上的解析,我们可以看到PHP与Memcached结合的强大之处,特别是在处理大量数据、高并发请求的场景下,合理利用缓存可以极大地提升应用的性能和用户体验。然而,值得注意的是,缓存策略的设计应当考虑到数据的...
- 使用一致性哈希:在分布式环境中,一致性哈希能确保数据在节点之间均匀分布,避免因添加或移除节点导致大量数据迁移。 - 监控与维护:定期检查Memcached的性能,确保内存使用合理,防止内存溢出,同时监控缓存命中...
总的来说,结合Hibernate的二级缓存机制和Memcached的分布式缓存能力,可以在项目中实现高效的数据缓存,提升系统的响应速度。同时,了解并掌握Memcached的基本原理和配置方法,对于提升系统架构的优化能力大有裨益...
Memcached 的主要特点包括简单的键值对存储、内存优化的数据结构以及基于内存的缓存机制,适用于处理大量临时数据。 **Redis** 相比之下,Redis 是一个更全面的、支持更多数据结构的键值存储系统。除了基本的键值对...
标题提到的"memcached各种序列化策略之session共享",意味着本文将探讨如何在Memcached中使用不同的序列化方法来共享Web应用中的session数据。Memcached是一个高性能、分布式内存对象缓存系统,常用于减轻数据库负载...
本文主要探讨了Memcached的分布式实现,以及它如何通过简单的策略来达到高效的数据分布。 首先,让我们了解缓存的基本概念。在冯·诺依曼计算机体系结构中,存储层次理论是核心,从高速缓存到主存,再到硬盘,存储...
在这个主题中,我们将深入探讨ASP.NET数据缓存的原理、使用方法以及优化策略。 1. 缓存的基本概念 缓存是一种存储技术,用于暂时存储经常访问的数据,以便快速获取。在ASP.NET中,数据缓存分为两种主要类型:页面...
数据缓存技术是一种重要的优化策略,特别是在处理大量频繁查询但对数据实时性要求不高的情况下。在IT领域,数据缓存被广泛应用于减轻数据库压力,提高系统响应速度,提升用户体验。这里我们将深入探讨mybatis二级...
总之,针对phpExcel在导出大量数据时出现的内存溢出问题,我们可以通过采用不同的缓存策略和数据处理方法来有效解决。理解并灵活运用这些方法,可以在保证程序运行稳定的同时,提升处理效率和用户体验。在实际开发中...
- Redis 与 Memcached 在缓存淘汰策略上的差异 6. 应用实例: - 使用 Redis 实现计数器服务 - 使用 Memcached 缓存数据库查询结果 - 利用 Redis 的有序集合实现排行榜功能 - 通过 Redis 的发布订阅功能实现...
本文将深入探讨 OpenResty 的缓存策略,包括缓存的原理、实现方式以及优化技巧。 首先,我们需要理解缓存的基本概念。缓存是一种存储机制,用于临时存储经常访问的数据,以便后续请求能更快地获取数据,减少了网络...
通过以上步骤,你可以在Java项目中成功集成并使用Memcached,实现高效的数据缓存。这不仅有助于提升应用性能,还能降低数据库的压力。在实际开发中,可以根据项目需求调整缓存策略,优化缓存效果。
通过理解和熟练运用C#中的缓存机制,结合适当的数据缓存策略,可以显著提高应用程序的响应速度,为用户提供更流畅的体验。在实际开发中,根据项目需求选择合适的缓存技术和策略,同时注意缓存的维护和优化,是每个...
- **缓存击穿和雪崩问题**:设计合理的缓存更新策略,避免大量请求同时导致数据库压力剧增。 6. **实际应用** Memcached工具类在实际项目中通常用于缓存常见的API响应、用户会话、热点数据等,以减少数据库的读写...
这种设计使得Memcached在处理大量小数据块时表现出色,特别适合于存储session、网页片段等临时性数据。 二、Memcached的安装与配置 1. 解压文件:首先,我们需要对"memcached-1.5.11.tar.gz"进行解压,这通常可以...
本文将深入探讨.NET框架中的数据缓存机制,以及`DataCache`类的使用。 数据缓存的目标是减少不必要的数据库交互,从而降低服务器负载,提升响应速度。在.NET框架中,微软提供了多种缓存解决方案,包括ASP.NET缓存、...
本文将深入探讨如何使用C#实现一个数据缓存控制帮助类,以及其背后的原理和最佳实践。 首先,我们需要理解缓存的基本概念。缓存是一种存储系统,它保存最近或最常用的数据以便快速访问。在C#中,我们可以利用.NET...
- **压力测试**: 连续大量地设置和获取数据,观察Memcached的响应时间和稳定性,检查是否存在性能瓶颈。 - **内存占用监测**: 监控Memcached内存使用情况,确保不会超出预设的内存限制。 3. **命中率测试**: - ...
- 使用适当的缓存策略,如LRU(最近最少使用)或LFU(最不常用)来控制缓存淘汰。 - 分布式环境下的多节点配置和负载均衡需要额外的考虑,如一致性哈希。 总之,Java与Memcached的结合使用可以极大地提升应用程序...
4. **缓存策略** - **LRU(Least Recently Used)**: 当内存空间不足时,Memcached会使用LRU策略删除最近最少使用的Item,以腾出空间给新数据。 - **Hash表**: 使用哈希表存储键值对,快速查找和删除Item。 5. **...