前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式缓存系统Memcached简介与实践

分布式缓存系统Memcached简介与实践

作者头像
指尖改变世界
发布2019-05-25 16:03:15
4150
发布2019-05-25 16:03:15
举报
文章被收录于专栏:vuevue

缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活。此时Memcached或许是你想要的。 Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。 Memcached能缓存什么? 通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。 Memcached快么? 非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。 Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。 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 通过 memcached.exe -h 可以查看其帮助 二 .NET memcached client library 下载文件:https://sourceforge.net/projects/memcacheddotnet/

里面有.net1.1 和 .net2.0的两种版本 还有一个不错的例子。

三 应用

1 将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录 2 引用Memcached.ClientLibrary.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 运行结果

后记: 是个不错的东西 ,使用起来也很方便,php ,ruby 的项目中用这个的很多,但是.net项目中用的较少(恕俺孤陋寡闻) 。希望有兴趣的朋友们 多多交流 。 看到页首了么各位兄弟?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2007-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档