`
lxy2520
  • 浏览: 6084 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

如何快速高效的更新memcached缓存数据

 
阅读更多

在高并发的分布式系统中,加入缓存机制可以很大的提高性能。最近做的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


分享到:
评论

相关推荐

    查看、分析memcached使用状态

    访问量上升,数据库压力大,怎么办?好办法是在中间挡一层...这个缓存要求高效,不能比数据库慢,否则服务质量受影响;如果能把数据用hash打散存储到硬盘,也是可以的,不过在内存越来越便宜的今天,还是使用内存吧!

    memcache:具有最高效ASCII协议解析器的Node.js内存缓存客户端

    发送到memcached之前对数据的可选压缩网络错误或超时时自动重新连接支持发送任意命令。 在阅读。 支持存储string , numeric和JSON值API支持回调或Promise 支持开火和忘记请求支持多种连接配套此使用来管理多个...

    memcache windows64位,含配置说明

    要注意的是一旦服务器停止,内存中的缓存数据会被清空。 win32下,需要启动memcached服务,首先下载相关的memcached文件(用于启动服务的windows.rar在附件中),解压后可以自己选择,这里我选择的是2.1版本的,将...

    基于JAVA的论坛系统_毕业论文.pdf

    部分采用 JSP + JavaBeans 组件技术,并且使用了 Memcached缓存以及 Hibernate 数据缓存。界面 设计人性化,操作简单。页面 CSS以及 JavaScript 的编写遵循最新 W3C标准,均支持在多种主流浏 览器中使用

    Redis和Memcached的区别详解

    1.Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据...

    论文研究-一种轻量级高效的位置服务隐私保护模型.pdf

    针对基于位置服务中用户位置信息和查询信息隐私易被泄露的安全威胁问题,基于Geohash地理信息一维编码、利用MemCached快照缓存和分布式服务器集群技术、加密和认证技术,构建了一个位置服务隐私保护模型,并加以仿真...

    架构设计方案

    3)采用Oscache实现页面缓存,采用Memcached实现数据缓存 4)采用独立的图片服务器集群来实现图片资源的存储及WEB请求 2.1.3数据存储的设计思路 1)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现...

    Linux下Redis安装详解.docx

    但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目缓存的结果大多是链表,如果链表新增 或者修改数据的话,redis就体现出了极大的优势(memcached只能重新加载链表,redis可以对链表...

    如何高效使用Redis作为LRU缓存

    这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为。 LRU实际上只是支持驱逐的方式之一。这页包含更多一般的Redis maxmemory指令的话题用于限制内存使用到一个定额,同时它也深入的涵盖了...

    GeeWeb 2.0.zip

    采用高效的缓存机制,接近于零的数据库访问,大大提高了网站负载能力 正在设计中的各种模板主题,让您对网站风格的选择切换得心应手 如果您有下面所列举的烦恼之一或更多,那么请您试用一下GeeWeb 1.我们公司...

    GeeWeb v2.0

    GeeWeb是一款基于PHP+MySQL开发的以完全免费、快速建站、维护简易、安全性高、负载力强、SEO友好等为特点,面向各中小...采用高效的缓存机制,接近于零的数据库访问,从而大大提高了网站负载能力6.正在设计中的各种模

    后盾网HDPHP框架 2014.12.zip

    优化ViewModel模型特点:* 全面的WEB开发特性支持* HDPHP是否完全免费的,你不用担心任何版权问题* 提供多项优化策略,速度非常快* 采用 MVC 设计模式* URL全站路由控制* 支持Memcached、Redis等NoSql* 高效的HDView...

    基于SSM的图书管理系统.zip

    性能优化:为了提高系统的性能和响应速度,本系统在以下方面进行了优化:采用缓存技术:利用Redis或Memcached等缓存技术,减轻数据库的压力,提高数据的读取速度。数据库优化:针对数据库表设计、索引策略等方面进行...

    典型相关分析matlab实现代码-Cpp-opensource-lib:C++开源库列表

    它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。 下载地址: Redis ...

    GeeWeb v2.0.rar

    采用高效的缓存机制,接近于零的数据库访问,从而大大提高了网站负载能力 6.正在设计中的各种模板主题,让您对网站风格的选择切换得心应手   开发者选择GeeWeb的理由 1.以面向对象为主辅以...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    HDPHP v141221.zip

    支持Memcached、Redis等NoSql 高效的HDView模板引擎 拥有全范围的类库 通过自定义类库、辅助函数来实现框架的扩展 JS前端自动验证 PHP自动验证、自动完成、字段映射、表单令牌 高级扩展模型 全站缓存控制 ...

    libevent v2.0.10源码(跨平台事件触发的网络库)

    著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。 编辑本段 详细  编译库代码,编译脚本会判断OS支持哪...

    libevent-2.1.1-alpha.tar.gz

    著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。 编辑本段详细  编译库代码,编译脚本会判断OS支持哪种...

    libevent-0.7c 源码(资料中转)

    著名的用于apache的php缓存库memcached据说也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。  编译库代码,编译脚本会判断OS支持哪种...

Global site tag (gtag.js) - Google Analytics