• .NET中MemCached使用介绍


    阅读目录

    1.MemCached是什么?

    2.Window中MemCached安装

    3.MemCached命令

    4.简单示例

    MemCached是什么  

      MemCached是一个自由开源,高性能,分布式内存对象缓存系统。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

           MemCached是一种基于内存的key-value存储,用来存储小块的任意数据。实现原理就是,第一次从数据库获取到结果之后,同时将结果保存在内存中,从而简单对数据库的访问次数,以提高Web应用的速度。

      

    Memcached 官网:http://memcached.org/

    Window中MemCached安装

    下载地址:http://pan.baidu.com/s/1yVILw       提取密码:5gx9

    官方网站:http://memcached.org/

    下载完成后

    1、打开SetupFile安装文件夹。

         

    2、以管理员身份打开cmd,输入以下命令

       

    3、安装成功之后,要去服务中启动memcached服务。

    MemCached命令 

    MemCached中有很多命令,大概可分为增加、更新、获取和删除缓存数据,下面简单介绍几种常用的命令; 

    Set

    用于将value(数据值)存储到指定的key(键)中。

    如果set的key已经存在,该命令会更新该key所对应的原来的数据,也就是实现了更新的作用。

    Add

    用于将value(数据值)存储到指定的key(键)中。

    如果 Add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED

    Get

    Get命令获取存储在 key() 中的 value(数据值) ,如果 key 不存在,则返回空。

    Delete

    用于删除已存在的 key(键)。

    flush_all 

    flush_all 命令用于清理缓存中的所有 key=>value(=>) 对。

    该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。

    简单示例

    新建一个控制台程序,从下载的目录中添加ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll三个组件,新建一个MemCached管理类,具体代码如下: 

    /// <summary>
        /// 分布式缓存的MemCached管理器
        /// </summary>
        public class MemCachedManager
        {
            public static MemcachedClient cache;
    
            static MemCachedManager()
            {
                string[] servers = { "172.20.61.195:11211" };
                //初始化池
                SockIOPool pool = SockIOPool.GetInstance();
                //设置服务器列表
                pool.SetServers(servers);
                //设置各服务之间负责均衡的权重
                pool.SetWeights(new int[] { 1 });
                //初始化时创建连接数
                pool.InitConnections = 3;
                //最小连接数
                pool.MinConnections = 3;
                //最大连接数
                pool.MaxConnections = 5;
                //连接的最大空闲时间,下面设置为6个小时(单位为ms),超过这个设置时间,连接会被释放
                pool.MaxIdle = 1000 * 60 * 60 * 6;
                //socket连接的超时时间,为0表示永不超时,即一直保持连接状态
                pool.SocketConnectTimeout = 0;
                //通讯的超时时间,下面设置为3秒,.net版本没有实现
                pool.SocketTimeout = 1000 * 3;
                //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
                pool.MaintenanceSleep = 30;
                //设置SocketIO池的故障标志
                pool.Failover = true;
                //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现
                pool.Nagle = false;
                //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中断,当前任务失败
                pool.MaxBusy = 1000 * 10;
                pool.Initialize();
                cache = new MemcachedClient();
                //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式
                cache.EnableCompression = false;
            }
    }
    View Code

    其中IP是本机地址,端口是固定的,如果有多台服务器用于缓存,在数组列出对应的IP即可。

    测试代码:

    public static void TestMethod()
            {
                //清除所有的缓存数据
                MemCachedManager.cache.FlushAll();
                
                var v1 = MemCachedManager.cache.Add("a", "123");
                var res1 = MemCachedManager.cache.Get("a");
                Console.WriteLine("第一次Add返回值{0},结果{1}", v1, res1);
    
                var v2 = MemCachedManager.cache.Add("a", "456");
                var res2 = MemCachedManager.cache.Get("a");
                Console.WriteLine("第二次Add返回值{0},结果{1}", v2, res2);
    
              
                var v3 = MemCachedManager.cache.Set("a", "789");
                var res3 = MemCachedManager.cache.Get("a");
                Console.WriteLine("Set返回值{0},结果{0}", res3);
    
                
                var v4 = MemCachedManager.cache.Replace("a", "123");
                var res4 = MemCachedManager.cache.Get("a");
                Console.WriteLine("replace返回值{0},结果{0}", res4);
    
                var v5 = MemCachedManager.cache.Replace("b", "123");
                Console.WriteLine("replace返回值{0}", v5);
    
                MemCachedManager.cache.Set("b","456");
                MemCachedManager.cache.Delete("b");
                var v6= MemCachedManager.cache.KeyExists("b");
                Console.WriteLine("Delete之后返回值{0}", v6);
            }
        }
    View Code

    运行结果:

  • 相关阅读:
    MySQL基础_常见命令
    数据库概述
    Nginx学习笔记
    华为OSPF基础配置实验
    华为RIPv2实验
    华为三层交换实验
    web-debug-server
    花一天时间试玩vsphere6.7(EXSI)服务器版的vmware
    haproxy+keepalived练习
    mailx加163邮箱发邮件
  • 原文地址:https://www.cnblogs.com/qianxingdewoniu/p/6227622.html
Copyright © 2020-2023  润新知