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
--------------------------------------

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测试体验,布布扣,bubuko.com

时间: 2024-10-14 10:41:16

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

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

前言 今天大伙还在热议关于.NET Core的东西,我只想说一句:在.NET 跨平台叫了这么多年间,其实人们期待的是一个知名的跨平台案例,而不是一堆能跨平台的消息. 好,回头说说框架: 在框架完成数据库读写分离的功能后,开始回想起2年前所构思的:关于框架集成分布式缓存MemCached的实现. 之前一直没动手,是因为思路比较飘,秉承着框架应该简单干净轻量引用无依赖和使用不复杂的思维: 看着MemCached的服务端协议,整天思考着自己用Socket写一个客户端. 后来可能是没激情,迟迟没动手.

分布式缓存- memcached

分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性).分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制.其次是分布式管理和分布式算法,其次是缓存键值管理和路由. 原文:http://wenku.baidu.com/view/8686d46c7e21af45b307a8c3.html 什么是Memcached 许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取

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

注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存越来越小,最后系统会被拖慢(这一点与第二点联系起来) 本地缓存存于本机,其缓存数量与大小受本机内存大小限制 本地缓存存于本机,其他机器的访问不到这样的缓存 解决方案:分布式缓存 Jboss cache:缓存还存于本机,但是会同步更新到其他机器(解决了第三个问题,解决不了第一和第二个问题),如果缓存机器数量很多

.net 下分布式缓存(Memcached)实现

准备给一个查询非常平凡的数据加上缓存,综合多种考虑,考虑使用Memcached Memcached是什么? Memcached是高性能的,分布式的内存对象缓存,用于动态应用中可减少数据库负载,提升访问速度. Mencached能缓存什么? 通过在内存里维护一个统一的巨大的hash表,Memcached能缓存各种格式的数据.如:图像.视频.文本以及数据库检索的结果等. 1.服务器端安装方法: 安装Memcached for win64 网络上的地址很多,下载后,在CMD里运行文件夹里的安装程序 m

分布式缓存Memcached

   分布式缓存服务器,既然用到数据缓存很明显就是想高效性的获取数据,大容量的存储数据.为了可以缓存大量的数据以及可以高效获取数据,那么分布式缓存数据库就要解决数据可以水平线性扩展,这样可以扩大数据容量,其次是缓存在大并发下本身的性能问题.分布式缓存服务需要做如下考虑,需要水平线性扩展,那么就要有合理的路由算法来解决负载均衡问题,以及提供数据备份,这样某结点服务器done机时,可以启动副本.这样就需要考虑数据一致性问题.分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回

分布式缓存 Memcached 学习

一.安装服务端: 服务端:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip 64:http://blog.couchbase.com/memcached-windows-64-bit-pre-release-available 1. 解压缩文件到c:\memcached 2. 命令行输入 'c:\memcached\memcached.exe -d install'  3. 命令行输入 'c:\memcached\memca

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

一.概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 1.分布式应用.由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统. 2.数据库前段缓存.数据库常常是网站系统的瓶颈.数据库的大并发量访问,常常造成网站内存溢出.当然我们也可以使用Hibernate的缓存机制.但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的

分布式缓存---Memcached 入门

[1]Memcached是使用基于Key-value值对形式的内存缓冲,它不是使用磁盘缓冲来充当缓冲,而是使用实实在在的物理内存. [2]Memcached需要在启动时就指定分配的内存大小.命令如:memcached -d -m 内存大小(M为单位) -l IP地址 -p 端口 [3]Memcached是一种单索引的结构化数据组织形式,所有数据项之间彼此独立(不想传统的数据是关系型的),每个数据项都以key为唯一索引,不要以关系型的思维来对待缓存 [4]Memcached使用基于key的hash

第九章 企业项目开发--分布式缓存Redis(1)

注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码: <!-- redis:多台服务器支架用什么