memcached实例

在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里)。下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daemon)和C#API(Enyim.Caching)为基础,做一个”Hello world”级的程序,让我们真正感受到memcached就在我们身边。后一的文章,我们还讲memcached的核心部分(根据key来hash存取数据,缓存数据在server端的内存存储结构)和一些好的案例。

  下面的实例实现的功能很简单,根据key来存取一个object对象(要支持Serializable才行哦),因为服务器端数据都是byte型的数据组实现存在。

 

服务的启动:

1, 将memcached-1.2.1-win32.zip解决到指定的地方,如c:\memcached

2, 命令行输入 ‘c:\memcached\memcached.exe -d install’
3, 命令行输入 ‘c:\memcached\memcached.exe -d start’ ,该命令启动 Memcached,默认监听端口为 11211
  可以通过 memcached.exe -h 可以查看其帮助

  

第一步:配置config文件

<?
xml version=”1.0″ encoding=”utf-8″ 
?>


<
configuration
>

    

<
configSections
>

        

<
sectionGroup 
name
=”enyim.com”
>

            

<
section 
name
=”memcached”
 type
=”Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching”
 
/>

        

</
sectionGroup
>

        

<
section 
name
=”memcached”
 type
=”Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching”
 
/>

    

</
configSections
>

    

<
enyim.com
>

        

<
memcached
>

            

<
servers
>

                

<!–
 put your own server(s) here
–>

                

<
add 
address
=”127.0.0.1″
 port
=”11211″
 
/>

                
            

</
servers
>

            

<
socketPool 
minPoolSize
=”10″
 maxPoolSize
=”100″
 connectionTimeout
=”00:00:10″
 deadTimeout
=”00:02:00″
 
/>

        

</
memcached
>

    

</
enyim.com
>

    

<
memcached 
keyTransformer
=”Enyim.Caching.TigerHashTransformer, Enyim.Caching”
>

        

<
servers
>

            

<
add 
address
=”127.0.0.1″
 port
=”11211″
 
/>

            
        

</
servers
>

        

<
socketPool 
minPoolSize
=”2″
 maxPoolSize
=”100″
 connectionTimeout
=”00:00:10″
 deadTimeout
=”00:02:00″
 
/>

    

</
memcached
>


</
configuration
>

这里的port:11211是, memcached-1.2.1-win32在安装时默认使用的port.当然你可以用memcached.exe -p 端口号来自行设置。

 

第二步, 新建TestMemcachedApp的console project

引用Enyim.Caching.dll或者在solution中加入这个project(可以下载的代码中找到)。

 

基础代码如下:

//
create a instance of MemcachedClient


MemcachedClient mc 
=
 
new
 MemcachedClient();

//
 store a string in the cache


mc.Store(StoreMode.Set, 

MyKey



Hello World

);

//
 retrieve the item from the cache


Console.WriteLine(mc.Get(

MyKey

));

 

完整代码如下, 

using
 System;

using
 System.Collections.Generic;

using
 System.Text;

using
 Enyim.Caching;

using
 Enyim.Caching.Memcached;

using
 System.Net;

using
 Enyim.Caching.Configuration;


namespace
 DemoApp
{
    

class
 Program
    {
        

static
 
void
 Main(
string
[] args)
        {
            

//
 create a MemcachedClient
            

//
 in your application you can cache the client in a static variable or just recreate it every time


            MemcachedClient mc 
=
 
new
 MemcachedClient();
            
            

//
 store a string in the cache


            mc.Store(StoreMode.Set, 

MyKey



Hello World

);

            
//
 retrieve the item from the cache


            Console.WriteLine(mc.Get(

MyKey

));

            
//
 store some other items


            mc.Store(StoreMode.Set, 

D1


1234L
);
            mc.Store(StoreMode.Set, 


D2

, DateTime.Now);
            mc.Store(StoreMode.Set, 


D3


true
);
            mc.Store(StoreMode.Set, 


D4


new
 Product());

            mc.Store(StoreMode.Set, 

D5


new
 
byte
[] { 
1

2

3

4

5

6

7

8

9

10
 });            
            Console.WriteLine(


D1: {0}

, mc.Get(

D1

));
            Console.WriteLine(


D2: {0}

, mc.Get(

D2

));
            Console.WriteLine(


D3: {0}

, mc.Get(

D3

));
            Console.WriteLine(


D4: {0}

, mc.Get(

D4

));

            
byte
[] tmp 
=
 mc.Get
<
byte
[]
>
(

D5

);

            
//
 delete them from the cache


            mc.Remove(

D1

);
            mc.Remove(


D2

);
            mc.Remove(


D3

);
            mc.Remove(


D4

);

            
//
 add an item which is valid for 10 mins


            mc.Store(StoreMode.Set, 

D4


new
 Product(), 
new
 TimeSpan(
0

10

0
));

            Console.ReadLine();
        }

        
//
 objects must be serializable to be able to store them in the cache


        [Serializable]
        

class
 Product
        {
            

public
 
double
 Price 
=
 
1.24
;
            

public
 
string
 Name 
=
 

Mineral Water

;

            
public
 
override
 
string
 ToString()
            {
                

return
 String.Format(

Product {{{0}: {1}}}


this
.Name, 
this
.Price);
            }
        }
    }
}

 

Server和Client API及实例代码下载(在Enyim Memcached 1.2.0.2版本上的修改) 

 

下载memcached服务安装地址:http://www.danga.com/memcached/

Client API下载地址:http://www.danga.com/memcached/apis.bml

    原文作者:memcached
    原文地址: https://www.cnblogs.com/rob0121/articles/1709875.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞