[Memcached]缓存 - 使用Memcached

转载:http://www.cnblogs.com/zhoujg/archive/2009/12/17/1626732.html
  最近在考虑OpenExpressApp中的缓存如何实现?目前的一个项目,是一个广域网应用,满足集团和一个子公司应用。由于产品是一个主要 基于数据的应用,操作上仍旧需要类似C/S的操作,希望大数据量的操作,目前基于我在家测试的长城宽带(2M)可以满足应用,但是仍旧满足不了C/S观念 的人,所以还是需要一些缓存的技术,否则很多操作仍旧需要访问服务器也的确不好。考虑到主要是基于两个公司使用,不是传统的Web广域网应用,所以会考虑 在客户端也部署分布式缓存应用。

  目前分布式缓存中,memcached相对来说比较成熟,所以花了半天看了一本memcached的书,进行了一些大概地了解,以便看看是否可 以使用。由于只是初步了解,本篇我将对memcached进行简单的介绍,希望对不熟悉的人也有所帮助,同时也非常希望高人能够多多指教。

memcached是什么

  memcached是一个高性能的分布式基于Name Value Pairs (NVPs) 的缓存系统,不处理数据持久和安全机制。它是一个开源的免费系统,容易部署安装,简单而又不缺强大。

  它由两部分组成:server和client。memcached server做的就是通过一个Key(不能超过250个字符采用object:key:type命名)值来存储和获取数据(1M)。缓存应用时可以部署多个服务器,每个服务器是自治的。client支持多种语言,目前已经存在很多语言的API。  

安装 memcached Server

  memcached适用于多平台和多语言,而我使用的环境是Window和.Net,所以我主要基于这个环境来描述。

  1. 下载:splinedancer上是window版本
  2. 安装为服务:memcached -d install,把memcached安装为服务
  3. 启动服务:memcached -d  start|stop|shutdown|restart
  4. 配置端口:memcached -p,默认端口为11211
  5. 配置内存容量:memcached -m,默认端口为64M

memcached 1.2.0
-p <num>            port number to listen on
-s <file>               unix socket path to listen on (disables network support)
-l <ip_addr>        interface to listen on, default is INDRR_ANY
-d                          run as a daemon
-r                           maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num>          max memory to use for items in megabytes, default is 64 MB
-M                         return error on memory exhausted (rather than removing items)
-c <num>            max simultaneous connections, default is 1024
-k                          lock down all paged memory
-v                          verbose (print errors/warnings while in event loop)
-vv                        very verbose (also print client commands/reponses)
-h                         print this help and exit
-i                          print memcached and libevent license
-b                         run a managed instanced (mnemonic: buckets)
-P <file>             save PID in <file>, only used with -d option
-f <factor>          chunk size growth factor, default 1.25
-n <bytes>         minimum space allocated for key+value+flags, default 48

使用.Net client API

  前面说个memcached支持多种语言的client API,每种语言也可能有多个不同版本,这里讲一下《Using Memached》书中介绍的一个在codeplex上发布的Enyim

  1. 下载:Enyim
  2. 建立项目,引用dll后,配置App.Config文件
    <configuration> <configsections> <sectiongroup name="enyim.com"> <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection,Enyim.Caching"/> </sectiongroup> <enyim.com> <memcached> <servers> <!-- put your own server(s) here--> <add address="127.0.0.1" port="11211"> <add address="127.0.0.1" port="11212">         </servers> <socketpool minpoolsize="10" maxpoolsize="100" connectiontimeout="00:10:00" deadtimeout="00:02:00"/> </memcached> </enyim.com> </configsections> </configuration>
  3. 也可以通过工具MemCacheD Manager进行配置和管理
  4. 使用MemcachedClient
    MemcachedClient mc = new MemcachedClient(); mc.FlushAll(); // Flush the cache for this example mc.Store(StoreMode.Set, "key1" , object1);

     


 设计的缓存逻辑

  如果只是缓存单对象比较简单,直接在缓存中访问对象:

  1. 如果存在,则直接获取
  2. 如果不存在,则装载并缓存

  考虑到数据的有效性,对于列表缓存稍微复杂些:

  • 如果存在,获取集合,对集合中每个对象:
    • 对象是否在缓存中存在?
      • 存在,直接从缓存获取,更新集合对象
      • 不存在,从缓存中删除集合,进入下一步
  • 不存在,装载集合对象,并缓存集合中的每个对象

对于基于面向对象的应用和基于查询数据的应用,在C/S的客户端以及应用服务器和数据库见的服务端,其缓存机制和设计肯定有自己的方法,我上面的只是一个简单的思路,不知道有谁有这方面的经验,分享一下

资源

官方网站

FAQ

memcached Storage Engine for MySQL

memcachedb

Windows version of memcached

libevent

memcache二进制协议

如何监控memcached

memcached for small project

How to Dramatically Speed Up Your Web Application: An Introduction to memcached

Memcached深度分析

Memcache的使用和协议分析详解

Using memcached: How to scale your website easily

memcached完全剖析–1. memcached的基础

memcached的分布式算法-Consistent Hashing

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏