前段时间去一家公司面试,面试官问到我对缓存了解多少,因为我是做B/S开发的,所以把知道的都说了。比如:Application、Cache、页面缓存、文件缓存。然后面试官说“不止这些,还有呢?”,我后来想了想说“以前在做PHP开发的时候有memcache,不知道.NET里面有没有?”。然后那面试官突然接过话来说:“对呀,有空自己看下。”。哈,然后我今天才有空看。

1、下载memcached,我下载的是memcached-win32-1.4.4-14,然后就是安装,安装过程如下:

  A、在 C:\Program Files 建立一个 memcached 目录,将解压缩的文件拷贝到此目录

  B、在命令窗口执行:"C:\Program Files\memcached\memcached.exe" -d install

  C、在命令窗口执行:"C:\Program Files\memcached\memcached.exe" -d start

  这样算是安装成功了,完了看下服务(直接命令里面:services.msc)里面有没有memcache,是否已启动。下载地址:http://www.jb51.net/softs/44843.html

2、下载Memcached Providers 1.2,解压缩。下载地址:http://memcachedproviders.codeplex.com/releases/view/10468

3、新建一项目,将第2步解压缩之后的文件夹里面的Enyim.Caching.dll和MemcachedProviders.dll添加到引用。

  说明:这两个DLL都可以用来管理缓存,我测试了。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7.  
  8. using MemcachedProviders.Cache;
  9. using Enyim.Caching;
  10. using Enyim.Caching.Memcached;
  11. using System.Text;
  12.  
  13. namespace test
  14. {
  15. public partial class Index : System.Web.UI.Page
  16. {
  17. //private static MemcachedClient client = new MemcachedClient("enyim.com/memcached");
  18.  
  19. protected void Page_Load(object sender, EventArgs e)
  20. {
  21. //DistCache.Add("test", "hello,memcache");
  22. //Object result = DistCache.Get("test");
  23. //Response.Write(result.ToString());
  24.  
  25. Enyim.Caching.MemcachedClient mc = new Enyim.Caching.MemcachedClient();
  26. mc.Store(StoreMode.Add, "h", "HI");
  27. mc.Append("h", this.StringToByte("很好", Encoding.UTF8));
  28. //mc.Remove("h");
  29. Response.Write(mc.Get("h"));
  30. }
  31.  
  32. private Byte[] StringToByte(String s, Encoding encoding)
  33. {
  34. return encoding.GetBytes(s);
  35. }
  36. private String ByteToString(Byte[] b, Encoding encoding)
  37. {
  38. return encoding.GetString(b);
  39. }
  40. }
  41. }

4、配置Web.config

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <configSections>
  4. <!-- Memcached -->
  5. <section name="cacheProvider" type="MemcachedProviders.Cache.CacheProviderSection, MemcachedProviders" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
  6. <sectionGroup name="enyim.com">
  7. <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching"/>
  8. </sectionGroup>
  9. </configSections>
  10.  
  11. <connectionStrings>
  12. <add name="ApplicationServices"
  13. connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
  14. providerName="System.Data.SqlClient" />
  15. </connectionStrings>
  16.  
  17. <enyim.com>
  18. <memcached>
  19. <servers>
  20. <add address="127.0.0.1" port="11211"/>
  21. </servers>
  22. <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00"/>
  23. </memcached>
  24. </enyim.com>
  25.  
  26. <cacheProvider defaultProvider="MemcachedCacheProvider">
  27. <providers>
  28. <add name="MemcachedCacheProvider" type="MemcachedProviders.Cache.MemcachedCacheProvider, MemcachedProviders" keySuffix="_WebApp_MemoryCached_" defaultExpireTime="2000"/>
  29. </providers>
  30. </cacheProvider>
  31.  
  32. <system.web>
  33. <compilation debug="true" targetFramework="4.0" />
  34. </system.web>
  35. </configuration>

5、新建个页面试试

  A、引用using MemcachedProviders.Cache;

  B、在Page_Load里面加入一下代码测试就行了

  1. DistCache.Add("test", "hello,memcache");
  2. Object result = DistCache.Get("test");
  3. Response.Write(result.ToString());

参考网址:

http://www.cnblogs.com/binfire/archive/2011/06/20/2085079.html

http://blog.csdn.net/zhoufoxcn/article/details/6282099

注意:memcached本身就带有负载均衡的功能,至于怎么实现的,不需要我们去管,你只需要在服务器上安装memcached,然后配置下就可以了,比如:

  1. <enyim.com>
  2. <memcached>
  3. <servers>
  4. <add address="192.168.1.17" port="11211"/>
  5. <add address="192.168.1.18" port="11211"/>
  6. </servers>
  7. <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00"/>
  8. </memcached>
  9. </enyim.com>

.net 使用memcache做缓存的更多相关文章

  1. Redis和MemCache静态Map做缓存区别

    本地缓存和分布式缓存 本地缓存:使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不 ...

  2. java使用Map做缓存你真的用对了吗?弱引用WeakHashMap了解一下

    目录 关于缓存我们应该考虑什么?-intsmaze WeakHashMap弱引用-intsmaze 线程安全问题-intsmaze Collections-intsmaze ThreadLocal-i ...

  3. spring+redis的集成,redis做缓存

    1.前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.我们都知道,在日常的应用中,数据库瓶颈是最容易出现的 ...

  4. django使用redis做缓存

    Django 使用 Redis 做缓存 django中应用redis:pip3 install django-redis - 配置 CACHES = { "default": { ...

  5. nginx添加proxy_cache模块做缓存服务器

    业务需求nginx对后端tomcat(静态文件)做缓存 减轻后端服务器的压力 # nginx-1.6.2.tar.gz  ngx_cache_purge-2.3.tar.gz #编译安装 ./conf ...

  6. 浏览器的Storage做缓存需要注意的地方

    使用浏览器的Storage来做缓存.如: window.sessionStorage.setItem("cache", $(data).stringify()) 需要注意以下几点: ...

  7. NHibernate中使用memcache二级缓存

    在NHibernate中使用memcache二级缓存 一.Windows下安装Memcache  1. 下载   http://jehiah.cz/projects/memcached-win32/  ...

  8. 使用ReTrofit做缓存(结合上拉加载和下拉刷新)

    1. noCache 不使用缓存,全部走网络 2. noStore 不使用缓存,也不存储缓存 3. onlyIfCached 只使用缓存 4. maxAge 设置最大失效时间,失效则不使用 需要服务器 ...

  9. 简单封装Redis做缓存

    基于Redis封装一个简单的Python缓存模块 0. Docker Redis安装 参考: Get Docker CE for CentOS Docker 安装 Redis 安装Docker时错误s ...

随机推荐

  1. Xamarin Android中引用Jar包的方法

    新建一个Java Bingdings Library 将Jar包复制,或使用添加已存在的文件,到Jars文件夹中 确认属性中的“生成操作” 如果有类型转换不正确,请修改Transforms文件夹中的相 ...

  2. 编写 Unity Editor 插件

    Editor Style Viewer 在开发过程中,我喜欢编写一些辅助的Editor插件,方便在游戏开发过程进行调试. 下面是摘自Asset Store的一个查看Unity 默认GUI样式的小工具 ...

  3. Hibernate中saveOrUpdate()和merge()的区别

    this.getSession().merge(obj); this.getSession().saveOrUpdate(obj); saveOrUpdate(): saveOrUpdate()基本上 ...

  4. UBUNTU添加新的分辨率

    首先,直接运行xrandr查看下分辨率的情况: $ xrandr Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 4096 x 40 ...

  5. Hibernate之组件映射

    1:为什么要使用组件映射 答:建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系.以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息 ...

  6. luogu[1135]奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  7. gzip: stdout: No space left on device问题的解决

    一.问题描述 最近安装了ubuntu14.04,并在ubuntu14.04中编译了一次内核.这之后大部分情况下用sudo apt-get install 安装应用都会出现“gzip: stdout: ...

  8. 集合中Set接口与Collection接口,常用子类TreeSet,HashSet.

    Set接口与List接口的不同之处在于: 不允许有重复的数据. 定义如下: public interface Set<E>extends Collection<E> 主要方法与 ...

  9. subtable

  10. 04Spring_bean 后处理器(后处理Bean),BeanPostProcessor ,bean创建时序,动态代理

    这篇文章很重要,讲解的是动态代理,以及bean创建前后的所发生的事情.介绍一个接口:在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Sprin ...