码迷,mamicode.com
首页 > 系统相关 > 详细

memcached小结--【项目经验】

时间:2015-08-05 22:16:59      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:memcached   经验   

为什么要用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的服务端

  1. 下载memcachewindows稳定版,解压放某个盘下面,比如在c:\r
  2. cmd下输入 c:\memcached\memcached.exe -d install 安装(请不要怀疑,真的安装完成了!)
  3. 再输入: 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可以用啦!

技术分享



总结

  学习是一个从罗列知识、个人消化、对比、总结织网、实战的过程,实战是最能检验人学的如何的方式,做项目挺好的。

   




版权声明:本文为博主原创文章,未经博主允许不得转载。

memcached小结--【项目经验】

标签:memcached   经验   

原文地址:http://blog.csdn.net/wangmei4968/article/details/47302849

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!