高性能缓存系统(Memcached)的实例介绍


本文摘自PHP中文网,作者零下一度,侵删。

在Memcached中实体类型未经序列化不能在Memcached中缓存,因此需要对实体类进行处理,才能缓存下来.

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

我们可以使用Memcached缓存string类型等已经内部实现了序列化的类型,但是对于我们自定义的类型,我们并不能在Memcached中缓存下来,因为Memcached只能缓存序列化之后的数据,因此,在这里我们将自定义的实体类型序列化一下就可以在Memcached中存储了。

首先下载windows平台下的memcached,然后安装。安装完之后就是启动memcached服务了,你可以在cmd下用dos命令输入,也可以在计算机管理->服务->memcached->启动.来开启服务.

随后就是在项目中引入相关dll:
Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll
在项目的引用中引入Memcached.ClientLibrary.dll

随后就是编写程序了,在这里创建一个MVC程序:
在Models文件夹中创建一个类:

1

2

3

4

5

6

7

8

9

10

11

12

13

[Serializable]

public class VIP

{

public string UserName { get; set; }

 

public int? Vip { get; set; }

 

public DateTime? VipEndDate { get; set; }

 

public string Mail { get; set; }

 

public string QQ { get; set; }

}

若没有标注为可序列化,则后续运行程序将会报错。

随后创建一个MemcachedHelper类来辅助编程.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

public class MemcachedHelper

{

public static MemcachedClient mclient;

 

static MemcachedHelper()

{

string[] serverlist = new string[] { "127.0.0.1:11211" };

 

SockIOPool pool = SockIOPool.GetInstance("First");

pool.SetServers(serverlist);

pool.Initialize();

mclient = new MemcachedClient();

mclient.PoolName = "First";

mclient.EnableCompression = false;

}

 

public static bool set(string key, object value, DateTime expiry)

{

return mclient.Set(key, value, expiry);

}

 

public static object Get(string key)

{

return mclient.Get(key);

}

 

}

最后就是Controller里面的具体实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

public class EntityMemcachedController : Controller

    {

        //

        // GET: /EntityMemcached/

        /// <summary>

        /// 序列化实体类为字节数组,将其存储到Memcached中,以缓存数据,从而减轻访问压力....

        /// </summary>

        /// <returns></returns>

        public ActionResult Index()

        {

            var vipInfo = new List<VIP>{

                new VIP{ UserName="张三", Vip=1, QQ="3123456", Mail="3123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(1) },

                new VIP{ UserName="李四", Vip=1, QQ="4123456", Mail="4123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(2) },

                new VIP{ UserName="王五", Vip=1, QQ="5123456", Mail="5123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(3) },

                new VIP{ UserName="赵六", Vip=1, QQ="6123456", Mail="6123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(4) },

                new VIP{ UserName="刘七", Vip=1, QQ="7123456", Mail="7123456", VipEndDate=(DateTime?)DateTime.Now.AddDays(5) }

            };

 

             

            if (Request.Cookies["_EntityMemcached"] == null)

            {

                string sessionId = Guid.NewGuid().ToString();

                Response.Cookies["_EntityMemcached"].Value = sessionId;

                Response.Cookies["_EntityMemcached"].Expires = DateTime.Now.AddMinutes(1);//设置cookie过期时间

 

                MemcachedHelper.set(sessionId, vipInfo, DateTime.Now.AddMinutes(1));//设置缓存过期时间

 

                return Content("Memcached分布式缓存设置成功!!!");

            }

            else

            {

                string key = Request.Cookies["_EntityMemcached"].Value.ToString();

 

                object obj = MemcachedHelper.Get(key);

                List<VIP> info = obj as List<VIP>;

 

                if (info != null)

                {

                    return View(info);

                }

 

            }

 

            return Content("若显示则有'bug'");

        }

看看实现:

然后退出来,重新点击”实现memcached缓存”

我设置了一分钟之内的缓存,因此在这一分钟之内将一直是这个界面,不得不说memcached还是不错!后续接着研究OutputCached + Monogodb的缓存策略

以上就是高性能缓存系统(Memcached)的实例介绍的详细内容!

相关阅读 >>

[转]support composite key in asp.net web api odata

操作 asp.net web api 的实例教程

web api的 asp.net属性路由实例详解

asp.net之actionfilter过滤器

分享asp.net core在开发环境中保存机密(user secrets)的实例

有关asp.net core 中的多语言支持的详细介绍

一段asp.net des加密解密的代码

asp.net 验证正则表达式方法总结

用asp.net mvc部分视图渲染html的实例教程

asp.net mvc5请求处理管道和生命周期的详细教程

更多相关阅读请进入《Memcached》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...