分布式缓存Memcached应用

在实际项目中,我们有些相同的数据是经常要从数据库中读取访问的,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活。此时Memcached可以帮助我们进行数据的缓存。

参考自:https://www.cnblogs.com/hyruur/archive/2011/03/31/2000942.html

Memcached是什么?
高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。

Memcached的使用 
 
Memcached服务器端的安装 (此处将其作为系统服务安装)
下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)
    1、 解压缩文件到c:\memcached
    2、 命令行输入 'c:\memcached\memcached.exe -d install' 
    3、 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211
    4、 通过telnet客户端测试连接memcached服务端的连接

     

   5、输入指令Stauts查看连接状态

         


二  .Net项目中使用Memecached 

     1、 .NET memcached client library
       下载文件:https://sourceforge.net/projects/memcacheddotnet/

     2、在项目中引用dll文件

      

    3、代码实现方法

         

1 namespace Memcached.MemcachedBench
2 {
3     using System;
4     using System.Collections;
5 
6     using Memcached.ClientLibrary;
7 
8     public class MemcachedBench 
9      {
10          [STAThread]
11         public static void Main(String[] args) 
12          {
13             string[] serverlist = { "10.0.0.131:11211", "10.0.0.132:11211" };
14 
15             //初始化池
16              SockIOPool pool = SockIOPool.GetInstance();
17              pool.SetServers(serverlist);
18 
19              pool.InitConnections = 3;
20              pool.MinConnections = 3;
21              pool.MaxConnections = 5;
22 
23              pool.SocketConnectTimeout = 1000;
24              pool.SocketTimeout = 3000;
25 
26              pool.MaintenanceSleep = 30;
27              pool.Failover = true;
28 
29              pool.Nagle = false;
30              pool.Initialize();
31 
32             // 获得客户端实例
33              MemcachedClient mc = new MemcachedClient();
34              mc.EnableCompression = false;
35 
36              Console.WriteLine("------------测   试-----------");
37              mc.Set("test", "my value");  //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test"
38 
39             if (mc.KeyExists("test"))   //测试缓存存在key为test的项目
40              {
41                  Console.WriteLine("test is Exists");
42                  Console.WriteLine(mc.Get("test").ToString());  //在缓存中获取key为test的项目
43              }
44             else
45              {
46                  Console.WriteLine("test not Exists");
47              }
48 
49              Console.ReadLine();
50 
51              mc.Delete("test");  //移除缓存中key为test的项目
52 
53             if (mc.KeyExists("test"))
54              {
55                  Console.WriteLine("test is Exists");
56                  Console.WriteLine(mc.Get("test").ToString());
57              }
58             else
59              {
60                  Console.WriteLine("test not Exists");
61              }
62              Console.ReadLine();
63             
64              SockIOPool.GetInstance().Shutdown();  //关闭池, 关闭sockets
65          }
66      }
67 }

  4、结果展示

      

猜你喜欢

转载自www.cnblogs.com/Jenkin/p/9147550.html