NET分布式缓存Memcached测试体验
原文地址: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
--------------------------------------
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());
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
--------------------------------------
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测试体验的更多相关文章
- CYQ.Data V5 分布式缓存MemCached应用开发介绍
前言 今天大伙还在热议关于.NET Core的东西,我只想说一句:在.NET 跨平台叫了这么多年间,其实人们期待的是一个知名的跨平台案例,而不是一堆能跨平台的消息. 好,回头说说框架: 在框架完成数据 ...
- 分布式缓存Memcached/memcached/memcache详解及区别
先来解释下标题中的三种写法:首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储缓存数据的“容器”.memcached和memcache ...
- .NET分布式缓存Memcached从入门到实战
一.课程介绍 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是 ...
- 第八章 企业项目开发--分布式缓存memcached
注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...
- 分布式缓存memcached介绍,win7环境安装,常用命令set,get,delete,stats, java访问
一.memcached是什么? 二.memcached不互相通信的分布式 三.安装步骤 四.本文介绍的命令主要包括: 存入命令(Storage commands) 取回命令(Retrieval com ...
- 分布式缓存Memcached
分布式缓存服务器,既然用到数据缓存很明显就是想高效性的获取数据,大容量的存储数据.为了可以缓存大量的数据以及可以高效获取数据,那么分布式缓存数据库就要解决数据可以水平线性扩展,这样可以扩大数据容 ...
- 分布式缓存-Memcached
分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大 并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性).分布式缓存的核心技术包括首先是内存本身的管理问题,包括 ...
- 企业项目开发--分布式缓存memcached(3)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.ssmm0-data 结构: 3.3.1.pom.xml 1 <?xml version=& ...
- 第十五章(附)分布式缓存-Memcached
一.概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 1.分布式应用.由于 ...
随机推荐
- word-wrap: break-word 和 word-break: break-all 到底有啥区别?
做项目改bug的时候,遇到过好多次,要么是文本超出文本区域,或者单词太长(一般是url链接中的一些鬼),把装它的标签强制撑大,导致一些响应式问题.除此之外,还有很多问题,每次都是恍然醒悟,然后又在网上 ...
- (转)iOS keychain API及其封装
一. Keychain API KeyChain中item的结构为: 1.增加keychain Item OSStatus SecItemAdd (CFDictionaryRef attributes ...
- 苹果推送APNS总结 (
开发状态服务器地址 gateway.sandbox.push.apple.com 2195产品状态服务器地址 gateway.push.apple.com 2195 Developme ...
- Android-自定义PopupWindow
PopupWindow在应用中应该是随处可见的,很常用到,比如在旧版本的微信当中就用到下拉的PopupWindow,那是自定义的.新版微信5.2的ActionBar,有人已经模仿了它,但微信具体是使用 ...
- 常用渗透性测试工具(Tools for penetration testing)
常用渗透性测试工具 原文:http://hi.baidu.com/limpid/item/14a2df166adfa8cb38cb3068 对一个应用项目进行渗透性测试一般要经过三个步骤. 第一步, ...
- iOS动画开发之五——炫酷的粒子效果
在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一现,想用UIKit框架写出一款炫酷的休 ...
- tstring
是的,一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单.基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于 _UNICODE 的值: // abridged f ...
- Python之基础(二)
1.内建函数enumerate friends = ['john', 'pat', 'gary', 'michael'] for i, name in enumerate(friends): prin ...
- 通知 Notification 详解
效果 通知栏-刚收到通知时 通知栏-收到通知几秒后 标准视图 大视图-下滑前是标准视图 大视图-下滑后显示大视图 自定义通知 讲解 Notification,俗称通知,是一种具有全局效果的通知,它展示 ...
- 自定义控件 闪烁效果的TextView
使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...