zoukankan      html  css  js  c++  java
  • 全面解析windows下Memcache技术应用

    一、Memcache介绍

          Memcache 是 danga.com 的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络 IO 。由于它的工作机制是在内存中开辟一块空间,然后建立一个 HashTable , Memcached 自管理这些 HashTable 。Memcache是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。Memcache 官方网站: http://www.danga.com/memcached。

    二、Memcache安装

           安装包里面会有x64和x86两个文件夹,根据操作系统选择一个打开会找到memcached.exe。这个文件不能直接双击运行安装,需要通过cmd进行安装。

        cmd命令:Memcache –d start|stop|shutdown|restart|uninstall|install 启动|停止|关闭|重启|卸载|安装。

         安装步骤:1.找到文件memcache.exe路径;

                       2.memcache –d install安装完毕;

                       3.启动服务后windows进程中可以看到memcache.exe;

                      4.服务器安装完成后,我们可以通过telnet到服务器测试一下(如果提示telnet命令不存在,需要去控制面板开启windows的telnet服务功能) 例如:                       10.0.27.120是安装memcache服务的ip地址,11211是默认的端口。输入stats查看参数信息。

    到此memcache的安装全部完成。

    三、Memcache在程序中的应用

         在解决方案中新建memcache的类库,引用以下几个类库,Commons.dll,Memcached.ClientLibrary.dll,ICSharpCode.SharpZipLib.dll。新建MemcacheHelper.cs这个memcache的使用类。准备工作做完之后开始进入memcache的使用。

    1.在web.config里面配置memcache的服务器地址

    <appSettings>

    <!--memcache的服务器配置,IP地址后期再改,端口号固定为11211-->
    <add key="Memcached.ServerList" value="10.3.2.24:11211"/>

    <appSettings>

    2.在MemcacheHelper.cs类里面编写实现代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Memcached.ClientLibrary;
    using System.Data;
    using System.Configuration;
    using NLP.Common;
    
    
    namespace NLP.Memcache
    {
        public class MemcacheHelper
        {
            #region 全局静态对象
            // 全局Socket连接池对象
            private static SockIOPool sockIOPool;
            public static SockIOPool CurrentPool
            {
                get
                {
                    return sockIOPool;
                }
            }
            // 全局Memcached客户端对象
            private static MemcachedClient mc;
            #endregion
    
    
    
            public static bool MemcacheHelperInit()
            {
                try
                {
                    // 初始化Memcached服务器列表
                    string[] serverList = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(',');
                    // 初始化Socket连接池
                    sockIOPool = SockIOPool.GetInstance("MemPool");
                    sockIOPool.SetServers(serverList);
                    sockIOPool.Initialize();
                    // 初始化Memcached客户端
                    mc = new MemcachedClient();
                    mc.PoolName = "MemPool";
                    mc.EnableCompression = false;
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 判断pkey关键字是否在Pmc中
            /// </summary>
            /// <param name="pMC"></param>
            /// <param name="pKey"></param>
            /// <returns></returns>
            public static bool IsCache(string pKey)
            {
                if (MemcacheHelperInit())
                {
                    if (mc.KeyExists(pKey))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 删掉Memcache 数据
            /// </summary>
            /// <param name="key"> </param>
            /// <returns></returns>
            public static bool RemoveCache(string pKey)
            {
                if (MemcacheHelperInit())
                {
                    if (!mc.KeyExists(pKey))
                    {
                        return false;
                    }
                    else
                    {
                        return mc.Delete(pKey);
                    }
                }
                else
                {
                    return false;
                }
            }
    
            /// <summary>
            /// Set-新增或修改
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <returns>是否成功</returns>
            public static bool AddCache(string key, object value)
            {
                if (MemcacheHelperInit())
                {
                    if (!mc.KeyExists(key))
                    {
                        return mc.Add(key, value);
                    }
                    else
                    {
                        return mc.Set(key, value);
                    }
                }
                else
                {
                    return false;
                }
            }
    
            /// <summary>
            /// Set-新增或修改
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            /// <returns>是否成功</returns>
            public static bool AddCache(string key, object value, DateTime expiry)
            {
                if (MemcacheHelperInit())
                {
                    if (!mc.KeyExists(key))
                    {
                        return mc.Add(key, value, expiry);
                    }
                    else
                    {
                        return mc.Set(key, value, expiry);
                    }
                }
                else
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 根据单个key值获取Memcache 数据
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static object GetCache(string key)
            {
                if (MemcacheHelperInit())
                {
                    if (!mc.KeyExists(key))
                    {
                        return null;
                    }
                    else
                    {
                        return mc.Get(key);
                    }
                }
                else
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 根据多个key值获取Memcache 数据
            /// </summary>
            /// <param name="key"> </param>
            /// <returns></returns>
            public static Dictionary<string, object> GetCache(string[] keys)
            {
                Dictionary<string, object> dic = new Dictionary<string, object>();
                if (MemcacheHelperInit())
                {
                    foreach (string key in keys)
                    {
                        object obj = mc.Get(key);
                        if (!dic.ContainsKey(key) && obj != null)
                            dic.Add(key, obj);
                    }
                    return dic;
                }
                else
                {
                    return null;
                }
            }
        }
    }
    View Code

    3.在调用代码里面调用MemcacheHelper.cs的memcache方法

    如bool result=MemcacheHelper.AddCache("User","123456");//实现新增key位User,value值为123456的memcache

    //获取memcache中value值,为json格式
    string ob_json = MemcacheHelper.GetCache("User").ToString();

    这样就实现了memcache的新增、查询的完整应用。

  • 相关阅读:
    UNIX网络编程——客户/服务器程序设计示范(六)
    UNIX网络编程——客户/服务器程序设计示范(五)
    UNIX网络编程——客户/服务器程序设计示范(四)
    UNIX网络编程——客户/服务器程序设计示范(三)
    UNIX网络编程——客户/服务器程序设计示范(二)
    UNIX网络编程——客户/服务器程序设计示范(一)
    iphone使用技巧
    iphone使用技巧
    老码农教你学英语
    string.format()
  • 原文地址:https://www.cnblogs.com/liuqin520/p/4615644.html
Copyright © 2011-2022 走看看