zoukankan      html  css  js  c++  java
  • Memcached分布式缓存初体验

    1 Memcached简介/下载/安装

    Memcached是一个高性能的不是内存对象缓存系统,用于动态Web应用以减轻数据库负载.Memcached基于一个存储键/值对的HashMap.其客户端可以使用任何语言进行编写,并通过Memcached协议与进行通信

    1. 下载memcached-win64-1.4.4-14 的windows稳定版
    2. cmd命令(win+R),切换到解压包的指定目录,并且输入命令:memcached.exe -d install(与之对应memcached.exe -d uninstall)
    3. 启动Memcached,其命令:memcached.exe -d start(与之对应关闭:memcached.exe -d stop)
    4. 至此已经安装并且启动了Memcached服务端(命令帮助可以键入:memcached.exe help)

    Memcached默认的端口是11211

    2 新建测试项目,并且使用Memcached客户端实现缓存

    • 新建一个Mvc项目:MemcachedTest,并且Nuget包引入EnyimMemcached(开源,直通门:https://github.com/enyim/EnyimMemcached)
    • 在Web.config中进行配置
    <sectionGroup name="enyim.com">
                <section name="log" type="Enyim.Caching.Configuration.LoggerSection, Enyim.Caching" />
                <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
            </sectionGroup>
    <enyim.com>
    <log factory="Enyim.Caching.Log4NetFactory, Enyim.Caching.Log4NetAdapter" />
    <memcached>
    <servers>
    <add address="192.168.14.172" port="11211" />
    <add address="192.168.14.251" port="11211" />
    </servers>
    </memcached>
    </enyim.com>
    View Code
    • 缓存测试代码:(备注:针对类的实体的缓存,必须在该类上加上[Serializable]特性)
     Student luge = new Student() { UserId = 1, UserName = "luge" };
    
                var lugeByCache = client.Get<Student>("luge");
    
                if (lugeByCache == null)
                {
                    client.Store(StoreMode.Add, "luge", luge);
                }
    
    
                Student pigeon = new Student() { UserId = 2, UserName = "pigeon" };
                var pigeonByCache = client.Get<Student>("pigeon");
    
                if (pigeonByCache == null)
                {
                    client.Store(StoreMode.Add, "pigeon", pigeon);
                }
    View Code
    • 结果

    分别可以通过telnet 192.168.14.17 11211(默认端口) /telnet 192.168.14.251 11211 键入stats可以查看当前Memcached的版本以及配置信息

     对于telnet 未启用的,可以在控制面板--> 程序与功能-->打开与关闭Window功能-->勾取telnet 客户端

     分别监听两个服务器中缓存的值,分别键入:get luge; get pigeon;会显示出各自缓存的值

    这样一个分布式缓存的例子已经完成.

    3 同步Session信息

    笔者使用MemcachedProviders(是对EnyimMemcached进行封装,提供客户端执行的Asp.net 站点中的Session同步),其原理是使用EnyimMemcached进行重写了SessionStateStoreProviderBase,使用是只需要在System.Web标签下使用自定义的Session配置项,即可完成替换原有的Session内容

    <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" timeout="1"
     customProvider="MemcachedSessionProvider">
                <providers>
                    <add name="MemcachedSessionProvider"  type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders"  connectionStringName="ApplicationServices" dbType="none" writeExceptionsToEventLog="false"   />
                </providers>
            </sessionState>
    View Code

    之后使用,跟Asp.Net使用Session一样:Session["UserName"]=luge;测试结果如下:

     4  参考

    http://www.cnblogs.com/luminji/archive/2011/08/17/2143371.html

    http://www.cnblogs.com/edisonchou/p/3855517.html

  • 相关阅读:
    memcached构建集群分析之一
    linux使用getopt解析参数
    setbuffer和freopen做一个简单的日志组件
    setbuf和freopen
    编码规范的重要性
    c++的操作符格式记录
    do{...}while(0)的作用
    CF div2 321 C
    CF div2 321 B
    CF div2 321 A
  • 原文地址:https://www.cnblogs.com/luge/p/Memcached_For_Net.html
Copyright © 2011-2022 走看看