一,MemCached下载
服务端下载:http://memcachedproviders.codeplex.com/
客户端下载:http://sourceforge.net/p/memcacheddotnet/code/HEAD/tarball?path=/trunk
二,服务端的安装及配置
1) 解压缩文件到c:\memcached(也可以选择任意位置)
2) 命令行输入 'c:\memcached\memcached.exe -d install'
3) 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211
4) 通过 memcached.exe -h 可以查看其帮助
三,客户端的安装及引用
对于客户端操作服务端,我们有多种可选方式,在这里,我们选择使用dll.因为dll的方式生成较快,而且避免了繁琐的配置文件中的设置,比较方便。对于telnet命令等等,我们可以在服务端使用来检查数据,查看cache的命中率等。
1.关于Dll的引用
下载完Dll之后,在项目中添加如图引用;
2,可能出现问题
我在引入log4net跟Memcached.ClientLibray的时候,出现引入了,类文件里面也加入了using,但是以生成就报错,后来发现是.net framework版本的问题,将版本从下图版本改为.net framework 4之后生成就ok了。
四,Memcached机制深入了解
1,基于C/S架构,协议简单
1) C/S架构,此时memcached为服务端,我们可以使用各种客户端程序连接memcached服务器。
2) Memcached的服务器客户端通信不使用XML等格式,而使用简单的基于文本行的协议,因此,通过telnet也能在memcached上保存数据,取得数据。
2,基于libevent的事件处理
1) Libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris等操作系统的事件处理。
2) Memcached使用libevent来进行网络并发连接的处理,能够保持在很大的并发情况下,仍旧能够保持快速响应的能力。
3,内置内存存储方式
为了提高性能,memcached中保存的数据都存储在memcahced内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。Memcached本身是为缓存而设计的服务器,隐藏并没有过多考虑数据的永久性问题。
4,基于客户端的分布式
Memcached尽管是“分布式”缓存服务器,但服务端并没有分布式功能更。各个memcached不会相互通信以共享信息。那么,怎样进行分布式,这完全取决于客户端的实现,有兴趣的可以百度下hash算法。
代码体会:
五,memcached与session
1) 生命周期不同
2) 要解决的问题重点不同
六,memcached与Cache
cache作为。Net中状态管理的东东,感觉也相当强大:1,缓存依赖:可以依赖或文件,数据库,组合的依赖,并且提供了数据过期的通知机制,方便在我们在过期的时候及时更新数据。2,通知机制的使用:以前比较早的时候,对于数据过不过期,使用的还是轮询机制,类似循环查看数据有没有被更新,如果被更新了,则此时更新cache。但是总感觉轮询机制很怪怪的,比如,我在家烧一壶水,不应该是我总去看水开没开,而是要水开了然后有个啥声音告诉我水开了。通知机制就是这个意思,至于通知机制的原理,可以去查一下observer模式,在23中设计模式中,这个用的还是蛮多的。
当初使用memcached的时候,由于cache的原因,就自然想到了这个通知机制,查了一下,貌似memcached是没有这个的,要想自己做一个过期更新,也只能使用轮询机制。但是从memcached的使用场景去思考,我们会发现其实有过期时间就足够了。
七,memcached的适用场景
1) 变化频繁,具有不稳定性的数据,不需要实时入库(比如用户在线状态,在线人数)
2) 门户网站的新闻的等,觉得页面静态化仍不能满足要求,可以放入到memcached中(配合jquery的ajax请求)
……
八,memcached的安全性问题
由于memcached没有内置身份验证机制,造成了使用telnet访问ip+端口就可以登录的情况,然后里面的数据就成了待宰的羔羊。为了避免防止被黑掉,我们可以在memcached服务器上对外关闭掉访问端口,只允许本机程序访问。
九,相似技术的比较
1,Redis
1) 支持更多value类型
2) 可持久化:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步
3) 支持主从同步:数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
2,EhCache
1) 纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
2) 开源Java分布式缓存: 主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
。。。。。。。。。