`

在系统中使用内存对象缓存系统(上篇)-Memcached

 
阅读更多

http://smile3019.iteye.com/admin/blogs/new

http://www.blogjava.net/amigoxie/archive/2011/02/15/344381.html

1、概念

近年来,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间,充分利用技术提升系统性能成为一个热点。

可从数据库方面来考虑,此种方案可使用“内存数据库”,另一种方案是使用“内存对象缓存系统”,将某些量小、使用次数多的数据以key/value的方式保存在内存对象缓存系统中,减少数据库查询访问带来的性能下降。

在本文中,主要讲述后者,但在本章也对“内存数据库”的概念进行说明。

1.1 内存数据库

内存数据库,就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。

在数据库技术中,目前主要使用两种方法来使用大量的内存:

1)              在传统的数据库中,增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组织成相应的数据结构来进行查询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访问。

2)              使用内存数据库技术(也叫主存数据库)技术,也就是干脆重新设计一种数据库管理系统,对查询处理、并发控制和恢复的算法和数据结构进行重新设计,以更有效的使用CPU周期和内存,这种技术近乎把整个数据库放进内存中,因而产生一种根本性的变化。

1.2 内存对象缓存系统

内存对象缓存系统用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

常用的是Memcached 是一个高性能的分布式内存对象缓存系统,它基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

MemcachedDanga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

2、应用场景

Memcached一般与数据库系统配合使用,它用于存储一些经常需要读取的数据,从来达到提高性能的目的。

下面讲几个在呼叫中心系统中的应用实例。

2.1 任务可执行性检查

例如,外呼任务需要在指定“任务开始时间”和“任务结束时间”中运行,并且在“启用”状态才能运行,而且单个外呼任务的进程需要通过查询数据库定时检查(例如:1分钟)该任务是继续运行,还是终止运行。当多个外呼任务并行运行时,这种查询会给系统增加负担。

若使用内存对象缓存系统,将每个任务的状态信息以key/value对的方式存储在Memcached的“任务信息表”中(key=任务idvalue:是否可运行标志),在插入任务时,在Memcached的“任务状态表”中插入一条数据;当“任务开始时间”和“任务结束时间”或“状态”发生改变时,根据key对应改变Memcached的“任务信息表”的value值。在外呼任务进行中,查询任务是否可运行时不再需要查询数据库,一般情况下只需要查询Memcached即可,从而减少了对数据库的访问。

2.2 日程检查

         在呼叫中心路由时,有时候需要提供根据日程进行路由的功能,例如满足某个日程(例如:每年的“10100:00:00”到“10723:59:59”的日程)时才路由到A中继。一个日程可以对应多个条目,若在路由前需要要验证当前时间是否满足日程,那对应需要查询两表的信息,还需要是否满足日程条件。当并发很多个用户进行呼叫时,这种检查会给系统增加很大的负荷,在此处也可以使用内存对象缓存系统来解决问题。

         开发定时触发(1分钟执行一次)程序去日程表和日程条目表中查询多条信息,将当前时间与某个日程比较,将其存入Memcached中的“日程表”中,key为日程键,value为当前时间是否在当前日程内的标志。

         路由程序根据日程键检查Memcached中的“日程表”,若满足某个日程,则路由到A中继,基本不再需要针对日程对数据库进行查询。

3、应用禁忌

3.1 不要将Memcached当数据库用

Memcached 的首要目的就是加快数据的响应时间,否则数据从其他数据源构建或恢复需要很长时间。一个典型的例子就是从一个数据库中恢复信息,特别是在信息显示给用户前 需要对信息进行格式化或处理的时候。Memcached 被设计用来将信息存储在内存中以避免每次在数据需要恢复时重复执行相同的任务。

切不可将 Memcached 用作运行应用程序所需信息的惟一信息源;数据应总是可以从其他信息源获取。此外,要记住 Memcached 只是一个键/值的存储。不能在数据上执行查询,或者对内容进行迭代来提取信息。

3.2 不要使用Memcached存储大批量数据

         首先Memcached空间大小不算大,而且主要用于缓存,所以不应该在Memcached中存储大批量数据。若在Memcached中按照一定格式存储数据表的行数据,而且表的数据量又很大,首先空间不允许,而且查询非常麻烦,此类数据适合保存在数据库中。

3.2 Memcached并不安全

为了确保最佳性能,Memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。这意味着对 memcached 服务器的访问应该这么处理:一是通过将它们放到应用程序部署环境相同的私有侧,二是如果安全性是必须的,那么就使用 UNIX® socket 并只允许当前主机上的应用程序访问此 Memcached 服务器。

这多少牺牲了一些灵活性和弹性,以及跨网络上的多台机器共享 RAM 缓存的能力,但这是在目前的情况下确保 memcached 数据安全性的惟一一种解决方案。

4、附录

         《常用内存数据库介绍》:

http://www.360doc.com/content/10/1202/16/3196411_74404034.shtml

         《内存数据库_百度百科》:

         http://baike.baidu.com/view/1210875.htm

         memcached_百度百科》:

         http://baike.baidu.com/view/794242.htm

《使用memcached提升站点性能》:

         http://www.oschina.net/bbs/thread/11008

分享到:
评论

相关推荐

    Memcached内存对象缓存

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    session共享 memcached-session-manager 1.9.6 jar

    Memcached是一款广泛应用的高性能分布式内存对象缓存系统,它能够有效地缓解数据库的压力,提高系统的响应速度。`memcached-session-manager`是Java的一个库,用于在基于Tomcat的Web应用中实现基于Memcached的...

    缓存memcached-1.2.1

    Memcached是一款高效、轻量级的分布式内存对象缓存系统,广泛应用于Web应用程序中,以减轻数据库负载,提高数据访问速度。在这个版本1.2.1中,我们探讨其核心特性、工作原理以及如何在Windows环境下进行安装和配置。...

    python-memcached-latest.tar

    Memcached是一种高性能、分布式内存对象缓存系统,用于减少数据库负载,通过在内存中存储数据来加速网络应用。这个`python-memcached-latest.tar`压缩包包含了最新的Python绑定版本,即`python-memcached-1.53`。 *...

    python-memcached python-memcached

    Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。Python-memcached库则为Python开发者提供了一个简单易用的接口,能够方便地将数据存储和检索到...

    项目中使用 hibernate-memcached 做二级缓存

    接下来,我们要介绍的是Memcached,它是一个高性能、分布式内存对象缓存系统。Memcached的设计目标是减轻数据库的负担,通过将常用数据存放在内存中,减少磁盘I/O操作。其优点包括快速、简单、可扩展性强,适用于...

    memcached缓存使用演示

    Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。它通过将数据存储在内存中,使得数据的读取速度大大提高,尤其在处理高并发请求时表现卓越。 ### ...

    memcached-win32-1.4.4-14.zip

    - **memcached**:Memcached是由Danga Interactive开发的一个开源、高性能、分布式内存对象缓存系统。它主要用于加速动态Web应用,通过将数据存储在内存中,避免了频繁的数据库查询,从而提高了应用的响应速度。 - ...

    hibernate-memcached-1.1.0-sources.zip

    而Memcached则是一种高性能、分布式的内存对象缓存系统,可以用于存储临时性的、不经常变动的数据,以减轻数据库的负载,提高数据读取速度。 整合Hibernate与Memcached,主要是为了利用Memcached的高速缓存特性,...

    hibernate-memcached包

    Memcached是一种高性能的、分布式的内存对象缓存系统,用于存储临时数据,以减少数据库查询的次数。它可以在多台服务器之间共享数据,提高网络应用的响应速度。而Hibernate,作为一个强大的Java ORM(对象关系映射)...

    memcached-win64-1.4.4-14.zip

    Memcached 是一个高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用来减轻数据库负载,提高数据访问速度。Memcached的设计理念是简单而快速,通过在内存中存储键值对来提供高速的数据访问。这里我们关注的...

    memcached-1.5.4

    `memcached`是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,实现快速读取,避免了频繁的磁盘I/O操作。本文将详细介绍`memcached-...

    Nagios-Plugins-Memcached-0.02.tar.gz

    而Memcached则是一种高性能的分布式内存对象缓存系统,常用于减轻数据库负载,提高网站的响应速度。 "Nagios-Plugins-Memcached-0.02.tar.gz" 是一个针对Nagios的插件包,专门用于监控Memcached服务。这个压缩包...

    memcached-session-manager

    Memcached 是一个高性能、分布式内存对象缓存系统,常用于减轻数据库的负载,通过将数据存储在内存中来加速访问速度。Session Manager 是用来处理HTTP会话的管理工具,而 memcached-session-manager 将会话数据存储...

    memcached-win32-1.4.4-14

    `memcached` 是一个高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过在内存中存储数据,使得频繁访问的数据能够快速获取,从而提升系统的响应速度。`memcached-...

    memcached-win-1.5.6.rar

    **Memcached** 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据和对象存储在内存中,以快速访问的方式提供服务,而不是每次请求都从数据库中读取...

    Memcached使用--使用

    Memcached 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高网站性能。它通过在内存中存储数据,为应用程序提供快速的数据访问,避免了频繁读取数据库导致的性能瓶颈。 **一...

    tomcat-7.0.54配合使用的memcached-session-manager1.6.1的整套jar包

    而Memcached则是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提升应用性能。当面对高并发、大量用户访问的情况时,传统的session管理方式可能会成为性能瓶颈。为了优化这个问题,我们可以使用`...

    php-memcached-demo.tar.gz

    Memcached是一款高性能的分布式内存对象缓存系统,最初设计用于加速动态网页应用,通过将数据暂存到内存中,减少对数据库的访问,从而提高网站的响应速度。它支持多种编程语言,包括PHP,使得开发者可以轻松地集成到...

    memcached-1.5.11.tar.gz

    Memcached,一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的1.5.11版本,解析其核心特性与工作原理。 一、Memcached简介 ...

Global site tag (gtag.js) - Google Analytics