原文地址:http://onlyonewt.blog.sohu.com/160168896.html

一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测试一下,今天测试下分布式缓存Memcached
首先要在缓存服务器上安装安装:memcached(1.2.6 for Win32)
测试程序部署到本地环境,开发工具VS2008 .NET3.5 
使用到memcached 1.2.6 for Win32下载地址:
memcached-1.2.6-win32-bin.zip

好了,下面我们按步骤来测试:
第一、首先到把下载好的memcached 1.2.6解压到C:\memcached目录,分别复制到两台服务器中。
第二、安装memcached服务,在命令提示符输入CD c:\memcached进入到memcached目录,如下图:

之后输入memcached -h 回车,看帮助说明,接下来输入memcached -d install 回车即可自动安装

memcached服务了,如下图:

安装好安装memcached服务后,输入memcached -d start 回车启动memcached服务,如下图:

在两台电脑都按以上操作来安装启动memcached。
第三、下载.NET版memcached客户端API组件来写测试程序。 
使用memcacheddotnet,下载地址如下: 
http://sourceforge.net/projects/memcacheddotnet/ 
下载好之后把这些文件Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,

Memcached.ClientLibrary.dll放到bin目录(少一个都不行),之后再到测试项目开发环境引用

Memcached.ClientLibrary.dll,如下图

第四、测试程序:
Memcached.cs
--------------------------------------

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using Memcached.ClientLibrary;
  6 using System.Collections;
  7 
  8 namespace Test {
  9   public partial class Memcached {
 10     private static Memcached _instance = new Memcached();
 11     public static Memcached _ {
 12       get {
 13         return _instance;
 14       }
 15     }
 16 
 17     string[] servers = { "192.168.1.10:11211","192.168.1.11:11211" };
 18     SockIOPool pool;
 19     MemcachedClient mc;
 20 
 21     public Memcached() {
 22       //初始化池
 23       pool = SockIOPool.GetInstance();
 24       pool.SetServers(servers);
 25 
 26       pool.InitConnections = 3;
 27       pool.MinConnections = 3;
 28       pool.MaxConnections = 1000;
 29 
 30       pool.SocketConnectTimeout = 1000;
 31       pool.SocketTimeout = 3000;
 32 
 33       pool.MaintenanceSleep = 30;
 34       pool.Failover = true;
 35 
 36       pool.Nagle = false;
 37       pool.Initialize();
 38 
 39       mc = new MemcachedClient();
 40       mc.EnableCompression = false;
 41     }
 42 
 43     public void Remove(string key) {
 44       mc.Delete(key);
 45     }
 46 
 47     public bool Set(string key, object value) {
 48       return mc.Set(key, value);
 49     }
 50 
 51     public bool Set(string key, object value, int minute) {
 52       return mc.Set(key, value, DateTime.Now.AddMinutes(minute));
 53     }
 54 
 55     public Hashtable Stats() {
 56       return mc.Stats();
 57     }
 58 
 59     public object Get(string key) {
 60       return mc.Get(key);
 61     }
 62 
 63     public bool ContainsKey(string key) {
 64       return mc.KeyExists(key);
 65     }
 66   }
 67   public class MemcachedTest {
 68     /// <summary>
 69     /// 测试缓存
 70     /// </summary>
 71     public void test() {
 72       //写入缓存
 73       Console.WriteLine("写入缓存测试:");
 74       Console.WriteLine("_______________________________________");
 75       if (Memcached._.ContainsKey("cache")) {
 76         Console.WriteLine("缓存cache已存在");
 77       }
 78       else {
 79         Memcached._.Set("cache", "写入缓存时间:" + DateTime.Now.ToString());
 80         Console.WriteLine("缓存已成功写入到cache");
 81       }
 82       Console.WriteLine("_______________________________________");
 83       Console.WriteLine("读取缓存内容如下:");
 84       Console.WriteLine(Memcached._.Get("cache").ToString());
 85 
 86       //测试缓存过期
 87       Console.WriteLine("_______________________________________");
 88       if (Memcached._.ContainsKey("endCache")) {
 89         Console.WriteLine("缓存endCache已存在,过期时间为:" + Memcached._.Get
 90 
 91 ("endCache").ToString());
 92       }
 93       else {
 94         Memcached._.Set("endCache", DateTime.Now.AddMinutes(1).ToString(), 1);
 95         Console.WriteLine("缓存已更新写入到endCache"); 
 96      Console.WriteLine("写入时间:" + DateTime.Now.ToString());
 97      Console.WriteLine("过期时间:" + DateTime.Now.AddMinutes(1).ToString());
 98       }
 99 
100       //分析缓存状态
101       Hashtable ht = Memcached._.Stats();
102       Console.WriteLine("_______________________________________");
103 
104       Console.WriteLine("Memcached Stats:");
105       Console.WriteLine("_______________________________________");
106       foreach (DictionaryEntry de in ht) {
107         Hashtable info = (Hashtable)de.Value;
108         foreach (DictionaryEntry de2 in info) {
109           Console.WriteLine(de2.Key.ToString() + ":" + de2.Value.ToString() + " ");
110         }
111       }
112     }
113   }
114 }
115 

Program.cs
--------------------------------------

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.IO;
 6 
 7 namespace Test {
 8   class Program {
 9     static void Main(string[] args) {
10       MemcachedTest mt = new MemcachedTest();
11       mt.test();
12       Console.ReadLine();
13     }
14   }
15 }

首次执行效果图:

第二次便从缓存中读取:

NET分布式缓存Memcached测试体验的更多相关文章

  1. CYQ.Data V5 分布式缓存MemCached应用开发介绍

    前言 今天大伙还在热议关于.NET Core的东西,我只想说一句:在.NET 跨平台叫了这么多年间,其实人们期待的是一个知名的跨平台案例,而不是一堆能跨平台的消息. 好,回头说说框架: 在框架完成数据 ...

  2. 分布式缓存Memcached/memcached/memcache详解及区别

    先来解释下标题中的三种写法:首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储缓存数据的“容器”.memcached和memcache ...

  3. .NET分布式缓存Memcached从入门到实战

    一.课程介绍 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是 ...

  4. 第八章 企业项目开发--分布式缓存memcached

    注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...

  5. 分布式缓存memcached介绍,win7环境安装,常用命令set,get,delete,stats, java访问

    一.memcached是什么? 二.memcached不互相通信的分布式 三.安装步骤 四.本文介绍的命令主要包括: 存入命令(Storage commands) 取回命令(Retrieval com ...

  6. 分布式缓存Memcached

       分布式缓存服务器,既然用到数据缓存很明显就是想高效性的获取数据,大容量的存储数据.为了可以缓存大量的数据以及可以高效获取数据,那么分布式缓存数据库就要解决数据可以水平线性扩展,这样可以扩大数据容 ...

  7. 分布式缓存-Memcached

    分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大 并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性).分布式缓存的核心技术包括首先是内存本身的管理问题,包括 ...

  8. 企业项目开发--分布式缓存memcached(3)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.ssmm0-data 结构: 3.3.1.pom.xml  1 <?xml version=& ...

  9. 第十五章(附)分布式缓存-Memcached

    一.概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 1.分布式应用.由于 ...

随机推荐

  1. CentOS下MySQL无法正常启动错误

    一.非正常关机/退出MySQL时报错:/var/lib/mysql/mysql.sock 1.重启机器:shutdown -h now 2.删除或重命名:rm -r /var/lib/mysql/my ...

  2. 关于使用百度ueditor时的一些问题

    本来这些问题直接在百度贴吧里回答不就完事了,可是好死不死的,百度贴吧里老出现 未知错误,错误号:230274 看来还是算了,自己做一个随笔记录一下好了 关于我们获取里面的内容时,老是会有一个<p ...

  3. Centos6 下启动httpd报错 Could not reliably determine the server's解决方法

    在启动httpd的时候报错: 修改/etc/httpd/conf/httpd.conf 配置,去掉ServerName 前的#(或者手动添加ServerName localhost:80)然后重启ht ...

  4. HRBUST 1987 逃课的孩子

    Sol:HASH + 二分  字符串处理,很基础的操作. 题意很明确就是找重复的次数统计下,范围比较大1≤n≤10000,1≤m≤10000. #include <cstdio> #inc ...

  5. 【实验 1-2】编写一个简单的 UDP 服务器和 UDPP 客户端程序。程序均为控制台程序窗口。

    1.服务器 #include<winsock2.h> //包含头文件#include<stdio.h>#include<windows.h>#pragma comm ...

  6. 怎样把HTC G7的内存扩展到2GB

    介绍 HTC G7的内部存储只有148M,两年前买它的时候,android应用大多比较小巧,148M已经足够用了.随着android版本的不断升级,应用变得越来越臃肿,G7也变得越来越吃力.就我个人而 ...

  7. Linux设备文件自动生成

    第一种是使用mknod手工创建:# mknod <devfilename> <devtype> <major> <minor> 第二种是自动创建设备节点 ...

  8. linux stat命令

    在Linux中,文件没有“创建时间”这个说法.Linux中的文件的时间属性只有三个:atime(Access time).mtime(Modified time).ctime(Change time) ...

  9. Image控件的简单使用示例1

    Image控件加载图片包括加载动态图片,加载静态图片两种方式.一.加载动态图片通过生成一个BitmapImage,创建该对象后,赋给Image的Source即可.加载的形式: 示例1 BitmapIm ...

  10. Sql 2012 OFFSET / FETCH NEXT BUG

    上个星期,测试发现了一个分页的bug--- 无论怎么分页数据的一样.我们所有的分页都是用EF 分页,为什么只有一个模块的分页有问题呢? 后来跟了下sql语句,发现用到是sql2012的新分页方式 OF ...