关于Memcache缓存

           公司有两个主要使用的网站,对两个数据库有交叉的调用,访问速度该怎么提升就成了网站优化的一个关键因素。

        1、  何为Memcache?

                 是一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问的数据库的网站访问速度提升效果十分显著

      2、 Memcache 工作原理?

             先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时在 Memcached中存一份缓存。

      Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的哈希表,它能够用来存储各种格式的的数据,包括视频、图像、文字以及数据库检索的结果等。也就是将数据放在内存中方便使用。
     Memcached是以守护程序(监听)方式运行于一个或多个服务器 中,随时会接收客户端的连接 和操作。
3、 Memcache 简单使用案例:
关于Memcache缓存_第1张图片
1、在服务器上安装Memcache的服务, Memcached的下载地址:http://www.newasp.net/soft/63735.html#downloaded/
2、在服务器上安装Memcache:打开命令行提示符,输入安装Memcache的命令,如图:
关于Memcache缓存_第2张图片
这是我的安装目录
安装好之后,启动服务,可以在服务中找到 Memcache 服务手动点击服务,也可以在cmd命令行提示符中,输入命令:net start "Memcached server"
3.服务安装好之后,便可以代码了:
写公共类:打开vs-----新建项目-----新建类库(manager),在项目中添加Memcached.ClientLibrary.dll引用(dll文件可以从网上下载),首先在项目添加缓冲池,添加方法,这里不一一介绍,上代码:(先添加了一个新类,类名:ComClass),完成之后点击生成。
public class ComClass
    {

       private static readonly MemcachedClient mc = null;
       public static bool iscache(string key)
       {
           return mc.KeyExists(key);
       }
       static  ComClass()
       {
           string[] serverlist = { "192.168.157.74:11211" };//11211是memcached默认的端口号
       SockIOPool pool = SockIOPool.GetInstance("ss");//初始化缓冲池
           pool.SetServers(serverlist);

           pool.InitConnections = 3;//初始化链接数
           pool.MinConnections = 3;//最少链接数
           pool.MaxConnections = 5;//最大链接数

           pool.SocketConnectTimeout = 1000;//Socket链接超时时间
           pool.SocketTimeout = 3000;//Socket超时时间
           pool.MaintenanceSleep = 30;//维护线程休息时间
           pool.Failover = true;//失效转移(一种备份操作模式)

           pool.Nagle = false;//是否用nagle算法启动
           pool.Initialize();
           //获得客户端实例
           mc = new MemcachedClient();
           mc.PoolName = "ss";
           mc.EnableCompression = false;
       }
       public static bool add(string key,object value)
       {
           return mc.Add(key, value, 0);
       }
     /// 
     /// 向Memcache存储数据
     /// 
     /// 
     /// 
       public static bool set (string key,object value)
       {
           return mc.Set(key, value);
       }
       public static bool set(string key,object value,DateTime time)
       {
           return mc.Set(key, value, time);
       }
 /// 
    /// 获取Memcache中的数据
    /// 
    /// 
    /// 
       public static object get(string key)
       {
           return mc.Get(key);
       }
       删除
       public static bool dalete(string key)
       {
           if(mc.KeyExists(key))
           {
               return mc.Delete(key);
           }
           return false;
       }
    }
       在网站中调用 Memcache ,这里只写一个简单示例:新建网站(get)---添加引用(刚才新建的项目的名称manager),新建web应用程序
在网站中注意添加引用即可:上代码
关于Memcache缓存_第3张图片
                 前台界面
后台代码展示:
using System;
    using System.Data;
    using manager;

namespace get
{
    public partial class get : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {  }
        public void getcatch()
        {
            Label1.Visible = false;
            string key = "mm";
            object obj = new object();
            if(ComClass.iscache(key))
            {
                obj = ComClass.get(key);
                DataTable u = (obj) as DataTable;
                if(u!=null&&u.Rows.Count>0)
                {
                    foreach (DataRow row in u.Rows)
                    {
                        TextBox1.Text = row["姓名"].ToString();
                        TextBox2.Text = row["说明"].ToString();
                    }
                }
                else
                {
                    TextBox1.Text = "";//姓名
                    TextBox2.Text = "";//备注
                    Label1.Visible = true;
                }
            }
        }
        //获取缓存
       protected void btnget_Click(object sender, EventArgs e)
        {
            getcatch();
        }
        //更新缓存
       protected void btnupdate_Click(object sender, EventArgs e)
       {
           DataTable dt = new DataTable();
           DataColumn dtc = new DataColumn("姓名", typeof(string));
           dt.Columns.Add(dtc);
           dtc = new DataColumn("说明", typeof(string));
           dt.Columns.Add(dtc);
           DataRow dr = dt.NewRow();
           dr["姓名"] = TextBox3.Text;
           dr["说明"] = TextBox4.Text;
           dt.Rows.Add(dr);
           bool b = ComClass.set("mm", dt, DateTime.Now.AddDays(1));
           if(b)
           {
               TextBox3.Text = "";//姓名
               TextBox4.Text = "";//备注
           }
       }
        //清除缓存
       protected void btnclear_Click(object sender, EventArgs e)
       {
           ComClass.dalete("mm");
       }
    }
}
另外要注意,引用刚才添加的类库,那就一定要注意一旦类库那边有什么改动,这边就需要重新生成。

这时做的网站就是用到了Memcache 进行缓存,另外,数据库交互也可以实现,Memcache 中的内容并不是只有一个网站可以使用,可以两个或多个网站同时调用。写法一样。







你可能感兴趣的:(C#代码)