zoukankan      html  css  js  c++  java
  • 缓存 - 使用Memcached

      最近在考虑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

    应用 memcached 提升站点性能

    另:codeplex上haredCache.com也是一个分布式缓存服务器,不过我简单试过,感觉速度慢,可能我哪些参数调得不对,现暂不考虑

    欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

  • 相关阅读:
    Windows 系统里面的 hosts 文件
    JDK 安装目录中 native2ascii.exe 命令详解
    火狐浏览器安装 Modify Headers 插件
    java iterator
    HashSet HashTable HashMap的区别
    c# 序列化
    Oracle 同步
    QL Server 高可用性(一)AlwaysOn 技术
    sqlserver 日志传送
    oracle forall
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1626732.html
Copyright © 2011-2022 走看看