在高并发的分布式系统中,加入缓存机制可以很大的提高性能。最近做的XX省的电信BSS项目中就用到了Memcached,系统中将查询到的结果缓存到Memcached 中(下面称MC好了)。对于配置类的规格数据,是不经常改变的。在MC中的命中率高达90%以上。
试想如果取消缓存机制,每秒几万、几十万的数据访问都会请求数据库。会造成数据库连接不够用的情况,系统性能会大大降低。服务器的压力会瞬间上升。
具体场景是:系统正在运行时,由于某种原因,需要修改某项配置数据,并且要求立即生效。
MC给我们带来了方便,但是对于一个庞大的MC集群,可能多达几十个memcached节点,总容量达上百GB。如果快速更新缓存中的旧数据呢。
MC本身提供了遍历下面的item的功能,但在这里显然不适用,因为我们的数据太多了。
原来系统的做法是:将每一个Key保存起来,当系统发出更新指令的时候,将保存起来的key对应的Item从MC中逐个删除。显然这不是一个好方法。因为MC保存的对象不能太大(最大是1MB),如果保存key的集合太大、就会存不进MC,连之前保存的也一起丢失了。最后只能将整个MC集群flushAll掉。
flushAll可能不是我们希望的,比如我们同事在MC集群中保存了A地区的配置数据、B地区的、C地区的数据。而我们现在只想更新A地区的数据,这个时候就不能使用flushAll了。
我的做法是通过一套异步的 发布-订阅 方式,利用公共容器MC或者数据库来实现MC数据更新。
图示如下:
通过WebService将更新指令送入MC,分布式的各个应用程序中的守护线程会定期扫描MC,获取最新的指令,和上一个版本比对,如果发现不一样就将当前的缓存版本号更新成最新的——McVersion={newVersion}。
应用程序中从缓存查取数据,会先生成一个key。
key = 参数信息 + 地区信息 +McVersion;
此时,McVersion已经被更新了,所以生成的key也就和之前的不一样了。
这样就能达到更新缓存的目的了。
这种方法最大的优点是高效,而且可以将各地区的数据在逻辑上分离。因为key中加入了地区信息。
如: 北京地区的某个配置信息可能是 key = offerSpec_123_010_version0.1
上海地区的对应的配置信息就是 key = offerSpec_123_021_version0.1
如果此时应用中缓存版本发生变化,从version0.1 变成 version0.2
那么北京和上海地区的 原来对应的key就会变成:
offerSpec_123_010_version0.2
offerSpec_123_025_version0.2
你不必担心原来的旧数据会留在MC中,挥之不去。其实不然,你只需要在存数据到缓存的时候,加上一个失效时间久可以了。MC会到期将一些无用的或者过期的数据清除掉。
希望能给你带来帮助,同时也希望大家能相互交流。QQ:1773240270
分享到:
相关推荐
这个“php memcached缓存操作类”旨在简化开发者对Memcached的使用,提供一个方便、高效的接口来处理数据缓存。本文将详细讲解PHP与Memcached结合的原理、使用方法以及该操作类的特性。 1. PHP与Memcached的连接: ...
标题 "使用Spring AOP对Web应用数据进行Memcached缓存" 涉及到的关键技术是Spring AOP(面向切面编程)和Memcached,这是一种常见的高性能、分布式内存对象缓存系统。在Web应用程序中,使用缓存可以显著提高数据访问...
**Memcached缓存机制详解与应用优化** Memcached是一款高性能、分布式的内存对象缓存系统,主要用于加速Web应用程序,通过将数据存储在内存中,减少对数据库的直接访问,从而提高系统的响应速度和效率。Memcached的...
**PHP与Memcached缓存** Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高网站的响应速度。PHP与Memcached的结合,使得开发者能够轻松地在PHP应用中实现数据...
**memcached缓存处理** **一、什么是memcached** `memcached`是一个高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载。它通过将数据存储在内存中来加速读取操作,而不是每次请求都去查询数据库。...
【Memcached介绍】 Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的...在部署和使用过程中,注意端口设置、IP配置以及集群管理,这些都是实现高效Memcached服务的关键。
4. **短暂性**:默认情况下,Memcached不提供持久化机制,缓存数据的存在时间(TTL,Time To Live)是有限的,一旦超过这个时间,数据会被自动删除。 **二、Memcached的工作原理** 1. **缓存命中**:当客户端请求...
2. **数据压缩**:对于大体积的缓存数据,可以考虑在存储前进行压缩,减少内存占用,但需要注意压缩和解压缩的额外开销。 3. **多实例部署**:根据应用规模,可以在同一台服务器上部署多个Memcached实例,或者在多...
SSM整合Memcached缓存是将Spring、SpringMVC和MyBatis这三大Java Web开发框架与Memcached相结合,以实现高效的数据缓存功能。Memcached是一款轻量级的分布式内存对象缓存系统,用于减少数据库负载,提高应用程序性能...
然而,这也意味着它不提供持久化存储,一旦服务重启,所有缓存数据将会丢失。对于CPU要求低但内存需求高的场景,如接口服务器,Memcached是理想的缓存选择。 2. **集中式Cache与分布式扩展** 作为集中式的Cache,...
**memcached缓存技术详解** `memcached` 是一个高性能的分布式内存对象缓存系统,它广泛应用于Web应用中以减轻数据库的负载。通过将数据存储在内存中,memcached可以快速提供数据,从而提高应用的响应速度。本文将...
**Memcached缓存技术详解** Memcached是一款高性能的分布式内存对象缓存系统,它被广泛应用于Web应用中,用于缓解数据库的压力,提高数据访问速度。本文将深入探讨Memcached的基本概念、工作原理、安装配置、使用...
**Memcached缓存技术代码版** Memcached是一种高性能、分布式内存对象缓存系统,它能够通过减少数据库负载来加速动态Web应用。这个“memcached缓存技术代码版”可能包含了使用Java语言在Eclipse开发环境中实现...
作为一个插件,它能够方便地集成到各种项目中,提供快速且高效的缓存服务。 **工作原理** Memcached 使用键值对(key-value)的方式来存储数据,其中键是唯一的标识符,值则是要缓存的数据。当一个请求到达时,...
总的来说,Memcached作为一个轻量级的缓存解决方案,为动态应用提供了快速、高效的缓存支持,通过合理使用可以显著提升系统性能。理解和掌握其工作原理以及最佳实践,是开发高效Web服务的关键一步。
【标题】:“memcached缓存数据库应用实践1” 【描述】:“第2章 memcached使用2.1 安装memcached2.1.1 环境说明CentOS Linux release 7.4.1708 (Core)[roo” 在IT行业中,数据库管理和优化是至关重要的,特别是在...
**Memcached缓存技术详解** Memcached是一款高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问的速度。Memcached基于键值对存储,设计简单而高效,适用于缓存小块的、...
Memcached的高效内存管理机制保证了缓存数据的快速读写,而且其分布式缓存的实现机制确保了良好的可扩展性和容错能力。 ### 总结 Memcached的引入为动态Web应用提供了一种高效的缓存解决方案,有效缓解了数据库的...