《2022年Memcached分布式缓存简介 .pdf》由会员分享,可在线阅读,更多相关《2022年Memcached分布式缓存简介 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一.什么是 Memcached Memcached 是一个高性能的分布式内存对象缓存系统, 用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。相信很多人都用过缓存,在.net 中也有内置的缓存机制,还有很多第三方工具如apache,nginx 等可以做静态资源的缓存,同时我们也可以制定自己的缓存机制,缓存数据库查询的数据以减少对数据库的频繁操作。但是很多时候我们总是感觉这些缓存总不尽人意,Memcached可以解决你不少的烦恼问题。最少在我的学习中解决了我不少问题,所以决定记录下来分享。Memcached基于一个存储
2、键 /值对的 hashmap 。其守护进程是用C 写的,但是客户端可以用任何语言来编写( 本文使用C#作为例子 ),并通过 memcached协议与守护进程通信。可能这些东西都太高深了,我们暂不做研究。二.分布式缓存其实 Memcached 作为一个分布式缓存数据服务,但是每个服务之间根本没有进行相互通信,这里可能与我理解的分布式有点区别,可能是我才疏学浅,也可能是每个人思考问题的角度不同。Memcached 客户端就是通过一种分布式算法将数据保存到不同的Memcached服务器上,将数据进行缓存。分布式缓存,可以而知memcached可以进行大数据量的缓存。这点可以弥补我们之前很多人都遇到的
3、将数据缓存到应用服务器上,而且只能缓存少量数据,否则对应用服务器的影响非常大。Memcached应用机制图 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 这个图是有点简陋了,但是问题还是能够描述的清楚的,缓存机制的基本原理就是先查询数据保存到memcached中,地址在此请求就直接从Memcached缓存中取数据, 这样就可以减少对服务器请求压力。三.Memcached 特征(1)协议简单 : 不使用复杂的xml 格式,而
4、是使用文本格式(2)基于 libevent的事件处理机制 ( 不懂 ) (3)内置内存存储方式: 数据存在在内存中,所以重启机器会导致数据丢失(4)Memcached 相互不通信的分布式: Memcached 服务器之间不会进行通信,数据都是通过客户端的分布式算法存储到各个服务器中四.Memcached的安装首先这里是在windows 系统上做测试, Memcached在 linux等非 windows 平台上性能会更高。下载 Memcached 服务端 : http:/memcached.org/(官网寻找适用的版本)名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
5、- - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 1 解压缩文件到D:Program FilesMemcached 2 命令行输入D:Program FilesMemcachedmemcached.exe -d install 3 命令行输入D:Program FilesMemcachedmemcachedmemcached.exe -d start ,该命令启动Memcached ,默认监听端口为11211当然我们可以在windows 服务中查看到此此服务:五.NET 平台下使用Memcached 因
6、为个人首先接触的客户端是memcacheddotnet , 所以习惯了适用这个核心库作为客户端。 下载的工作都非常简单,因为客户端都帮我们实现了分布式程序算法,我们关心的只要怎样去存在获取这些数据。下面简单介绍一下: 1staticvoid Main( string args) 2 3 SockIOPool pool = SockIOPool.GetInstance(); 4string servers = 127.0.0.1:11211 ; 5 pool.SetServers(servers); 6 pool.MinConnections = 3; 7 pool.MaxConnections
7、 = 5; 8 pool.InitConnections = 3; 9 pool.SocketConnectTimeout = 5000; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 10 pool.Initialize(); 1112 MemcachedClient client = new MemcachedClient(); 13 client.EnableCompression = false ; 14 Consol
8、e.WriteLine(-Memcached Set 设置值-); 15 client.Set(key1 ,value1); 16 Console.WriteLine(client.Get(key1 ); 17 Console.WriteLine(-Memcached Add 设置值-); 18 client.Add(key2 ,value2); 19 Console.WriteLine(client.Get(key2 ); 20 client.Set(key2 ,value1 value2); 21 Console.WriteLine(client.Get(key2 ); 22 Consol
9、e.WriteLine(-Memcached Replace 设置值-); 23 client.Replace(key2 , value3); 24 Console.WriteLine(client.Get(key2 ); 2526 Console.WriteLine(-Memcached 键值是否存在-); 27if (client.KeyExists(key2 ) 28 29 Console.WriteLine(键 key2 存在 ); 30 31if (client.KeyExists(hechen )=false ) 32 33 Console.WriteLine(键 hechen 不
10、存在 ); 34 35名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 36 Console.WriteLine(-Memcached 删除数据-); 37 client.Add(key4 ,value4); 38 Console.WriteLine(key4= + client.Get(key4 ); 39 client.Delete(key4 ); 40if (!client.KeyExists(key4 ) 41 42 Co
11、nsole.WriteLine(key4 已将删除 ); 43 4445 Console.WriteLine(-Memcached 数据过期-); 46 client.Add(key5 ,value5,DateTime.Now.AddMilliseconds(5000); 47 Console.WriteLine(client.Get(key5 ); 48 System.Threading.Thread.Sleep(6000); 49 Console.WriteLine( 过期 : + client.Get(key5 ); 50 上面的例子虽然简单,包括一些基本的用法,在一般使用Memcach
12、ed缓存数据的时候都用得到。Memcached 初始化数据1 SockIOPool pool = SockIOPool.GetInstance(); 2 string servers = 127.0.0.1:11211 ; 3 pool.SetServers(servers); 4 pool.MinConnections = 3; 5 pool.MaxConnections = 5; 6 pool.InitConnections = 3; 7 pool.SocketConnectTimeout = 5000; 8 pool.Initialize(); 名师资料总结 - - -精品资料欢迎下载
13、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - SockIOPool 用于初始化分布式缓存池的对象,上面设置了多种属性,我相信这些属性的意思大家都懂。这里要注意的是Initialize () ,只有调用这个方式之后,才能初始化数据。才能使用连接缓存池。Memcached 设置缓存值的三种方式 1 MemcachedClient client = new MemcachedClient(); 2 client.EnableCompression = false ; 3 C
14、onsole.WriteLine(-Memcached Set 设置值-); 4 client.Set(key1 , value1); 5 Console.WriteLine(client.Get(key1 ); 6 Console.WriteLine(-Memcached Add 设置值-); 7 client.Add(key2 , value2); 8 Console.WriteLine(client.Get(key2 ); 9 client.Set(key2 , value1 value2); 10 Console.WriteLine(client.Get(key2 ); 11 Cons
15、ole.WriteLine(-Memcached Replace 设置值-); 12 client.Replace(key2 , value3); 13 Console.WriteLine(client.Get(key2 ); 有心的可以测试一下这三个方法: Set () 如果缓存中存在相同的键值这替换原有的,Add() 只是添加数据,如果存在相同键的不再添加。 Replace() 则用于替换已有的相同的键值。Memcached 缓存数据过期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
16、 第 6 页,共 7 页 - - - - - - - - - 1 Console.WriteLine(-Memcached 数据过期-); 2 client.Add(key5 , value5,DateTime.Now.AddMilliseconds(5000); 3 Console.WriteLine(client.Get(key5 ); 4 System.Threading.Thread.Sleep(6000); 5 Console.WriteLine( 过期 : + client.Get(key5 ); 很多时候我们并不希望数据永久缓存,一般都会有一个过期时间。上面的添加缓存数据就设置了缓存时间,可以达到过期缓存的效果。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -