为什么要用memcached?
每个技术的出现必然有它出现的原因,为啥要用memcached?查了一下网上的资料,了解到Memcache的出现解决了数据库高并发访问的瓶颈。当数据架构建立在单数据库模式,数据库连接池峰值达500,程序离崩溃就不远了。有的小网站开发的时候没有关注性能,等用户访问量越来越大,程序很容易崩溃。
如果客户端发送一个请求,服务端从数据库中存取相关数据,花费高昂。如果每次都从数据库取相同的数据,造成了数据库低效。然而如果把第一次取出的数据都存入到内存中,下次读取直接从内存中获得,给数据库就减负了。
所以在数据库和web之间放一层cache层,好处:1.减轻数据库的负担 2.提高存取速度。
什么是memcached?
Memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。
上面是官方的回答,我个人的理解是Memcached像一个临时数据库,以key-value的形式存取数据,key会通过一个Hash算法转换成Hash-key,便于查找。因为它存储数据在内存中,离cpu比较近,查询数据是很快速的。
memcached跟cookie、session有什么异同?
cookie、session常用来保存用户信息,SSO中用户信息存到本地cookie中一份,发送到session也保存一份,cookie的安全性比session差。memcached可以用在考试的抽题中,保存的数据的特色:1.数据量大 2.数据被多次使用。session时效性、存取在服务器这两点来说,是比较安全的。cookie可以通过本地cookie加密来解决安全性的问题,手写SSO里面cookie存取的用户密码就被加密过,数据库中存取的是也是加密后的信息。memcached可以通过放在防火墙后面增加自身的安全性。
memcached实战演练
1.安装memcached的服务端
- 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\r
- 在cmd下输入 c:\memcached\memcached.exe
-d install 安装(请不要怀疑,真的安装完成了!) - 再输入: c:\memcached\memcached.exe
-d start 启动。默认分配64M内存,使用11211端口)
2.memcached使用
首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。 (如果输入telnet 后报telnet不是内部或外部命令的时候,做如下操作。)
得到以下信息:
3.客户端代码
控制台程序:
<font size="4"><span style="font-family:SimSun;"><span style="font-size:18px;"><span style="font-family:SimSun;">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Memcached.ClientLibrary; namespace memache { class Program { static void Main(string[] args) { //添加多个缓存服务器地址 string[] serverlist = { "192.168.24.247:11211","192.168.24.175:11211" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); pool.SetServers(serverlist); //设置memcached 的一些参数 pool.InitConnections = 3; pool.MinConnections = 3; pool.MaxConnections = 5; pool.SocketConnectTimeout = 1000; pool.SocketTimeout = 3000; pool.MaintenanceSleep = 30; pool.Failover = true; pool.Nagle = false; pool.Initialize(); // 获得客户端实例 MemcachedClient mc = new MemcachedClient(); mc.EnableCompression = false; Console.WriteLine("------------测 试-----------"); bool flags1 = mc.Set("user1", "my value"); //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test" bool flags2 = mc.Set("user2", "my value"); bool flags3 = mc.Set("user3", "my value"); bool flags4 = mc.Set("user4", "my value"); bool flags5 = mc.Set("user5", "my value"); bool flags6 = mc.Set("user6", "my value"); if (mc.KeyExists("user1")) //测试缓存存在key为test的项目 { Console.WriteLine("test is Exists"); Console.WriteLine(mc.Get("user1").ToString()); //在缓存中获取key为test的项目 } else { Console.WriteLine("test not Exists"); } // Console.ReadLine(); bool flag = mc.Delete("user1"); //移除缓存中key为test的项目 if (mc.KeyExists("user1")) { Console.WriteLine("test is Exists"); Console.WriteLine(mc.Get("user1").ToString()); } else { //Console.WriteLine("test not Exists"); } SockIOPool.GetInstance().Shutdown(); //关闭池, 关闭sockets Console.ReadLine(); } } } </span></span></span></font>
程序执行结果:
首先要开启memcached服务,输入 c:\memcached\memcached.exe
-d start 并执行。
启动程序控制台,memcached可以用啦!
总结
学习是一个从罗列知识、个人消化、对比、总结织网、实战的过程,实战是最能检验人学的如何的方式,做项目挺好的。
版权声明:本文为博主原创文章,未经博主允许不得转载。