MemCache 基本应用(1)

   PS: 第一次用MemCache,出现了N多问题,记录下来,之所以用到MemCache,想用来解决分布式存储session校验用户登陆

什么是MemCache?

  memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。这是一套开放源代码软件,以BSD license授权发布

MemCache的优点

  1 解决高并发访问数据库的问题, 2 磁盘IO之痛: 多客户端共享缓存 Net + Memory >> IO 读写性能完美 1s:读取可以1w次。 写:10w  3,超简单集群搭建  Cluster 4,开源 Open Source 5,学习成本非常低,6,入门非常容易 丰富的成功的案例

Memcache 基础原理

  Socket 服务器端 数据:键值对存储 内存处理的算法: 本质就是一个大的哈希表。key最大长度是255个字符。 内存模型:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk)大小1MB,但同一个分区里:块的长度(bytes)是固定的。 插入数据:查找适合自己长度的块,然后插入,会有内存浪费。 LRU,闲置>过期 >最少访问 惰性删除:它并没有提供监控数据过期的机制,而是惰性的,当查询到某个key数据时,如果过期那么直接抛弃。 集群搭建原理: Memcache服务器端并没有提供集群功能,但是通过客户端的驱动程序实现了集群配置。 客户端实现集群的原理:首先客户端配置多台集群机器的ip和端口的列表。然后客户端驱动程序在写入之前,首先对key做哈希处理得到哈希值后对总的机器的个数进行取余然后就选择余数对应的机器。

Windows下使用Memcache

  下载Memcache:http://code.jellycan.com/Memcache/ 将服务程序拷贝到一个磁盘上的目录 安装服务:cmd→Memcached.exe -d install 打开服务监控窗口可以查看服务是否启动。 启动服务:cmd→Memcached.exe -d start(restart重启,stop关闭服务) 检查服务是否启动:连接到Memcache控制台:telnet ServerIP 11211 输入命令:stats检查当前服务状态。 卸载服务:Memcached.exe -d uninstall(先关闭服务) 遇到问题:win8下安装服务。无法启动此程序,因为计算机中丢失 MSVCR71.dll。尝试重新安装该程序以解决此问题。下载dll地址:http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71  默认端口号 11211

MenCache的基本使用

  1.将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 放到Lib
  2. 引用Memcached.ClientLibrary.dll.(如果引用了log4net.dll,  一定要注意 版本一定要一致 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)

   3 封装代码

 private static readonly MemcachedClient mc = null;
        //构造方法 初始化池
        static MemCacheHelper()
        {
            string[] serverlist = { "127.0.0.1:11211", "10.0.0.132:11211" };

            //初始化池
            SockIOPool pool = SockIOPool.GetInstance();
            pool.SetServers(serverlist);

            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();

            // 获得客户端实例
             mc = new MemcachedClient();
            mc.EnableCompression = false;
        }
        //加
        public static bool MemSet(string key,object value)
        {
            return mc.Set(key, value);
        }

        //加带过期时间
        public static bool MemSet(string key, object value, DateTime time)
        {
    //            1、memcache::add 方法:add方法用于向memcache服务器添加一个要缓存的数据。

   //注意:如果memcache服务器中已经存在要存储的key,此时add方法调用失败。

  //2、memcache::set 方法:set方法用于设置一个指定key的缓存内容,set方法是add方法和replace方法的集合体。

  //注意:

  //1)、如果要设置的key不存在时,则set方法与add方法的效果一致;

  //2)、如果要设置的key已经存在时,则set方法与replace方法效果一样。

  //3、 mmecache::replace方法: replace方法用于替换一个指定key的缓存内容,如果key不存在则返回false
             return mc.Set(key, value, time);
        }

        //获取
        public static object MemGet(string key)
        {
            if (mc.KeyExists(key))
            {
                return mc.Get(key);
            }
            return false;

        }
        //删除
        public static bool MemDelete(string key)
        {
            if (mc.KeyExists(key))
            {
                return mc.Delete(key);
            }
            return false;
        }
    }
}

 PS   

     出现的错误

    1. 2017-04-02 18:24:39,395 [6] ERROR errorMsg - System.TypeInitializationException: “Common.MemCacheHelper”的类型初始值设定项引发异常。 ---> System.TypeInitializationException: “Memcached.ClientLibrary.SockIOPool”的类型初始值设定项引发异常。 ---> System.IO.FileLoadException: 未能加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    解决办法 :

一旦发现 System.TypeInitializationException类型的错误 基本上就是log4net的问题  我之所以出现这个问题是因为 我在使用ErrorFilter的时候用了Log4Net去记录 我的版本是2.0.8.0,而我在Commom这个程序集中使用的版本是1.2.10.0,两个版本不一致, 一定要清除所有Lib文件Bin文件的引用外加(NugGet下载)packages.config里的dll文件或者节中的信息,然后从新引用!

 

          引用

    文章内容大多来自,传智博客教程与PPt

时间: 2024-10-17 23:50:46

MemCache 基本应用(1)的相关文章

nginc+memcache

memcache 分为服务端和客户端.服务端用来存放缓存,客户端用来操作缓存.因此,可以使用 Nginx 直接访问 Memcache,并用$uri 和$args 等 Nginx 内置变量设定缓存 key规则,这样,当缓存命中时,Nginx 可以跳过通过 fastcgi 和 PHP 通信的过程,直接从 memcache中获取数据并返回.OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

Memcache学习总结2-Memcache的使用基本介绍

Memcache学习总结2-Memcache的使用基本介绍 上一次总结中我们已经安装部署好了Memcached,并且把PHP扩展Memcache也安装好了,这一节我们详细学习一下PHP扩展Memcache.Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考PHP手册:http://php.net/manual/zh/book.memcache.php . 我们为了简单方便,就使用面向对象的方式,也便于维护和编写代码,那我们先来一段示例代码吧. Memca

MemCache超详细解读

MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度.MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的key-value存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache设计理念就是小而强大,它简单的设计促进了快速部署.易于开发并解决面对大规模的数据缓存的

mysql+nginx+php+memcache

***************** mysql+nginx+php+memcache ****************** 1.Mysql 安装 软件包依赖性: # yum install -y gcc-c++ make ncurses-devel bison openssl-devel zlib-devel cmake-2.8.12.2-4.el6.x86_64.rpm # tar zxf mysql-boost-5.7.17.tar.gz # cd mysql-5.7.17/ cmake -

nginx+tomcat+memcache

nginx支持静态页面tomcat支持动态页面如果所在的nginx服务器想要进行动态页面则需与tomcat结合此时nginx只是起到转发的作用对jsp的处理是由tomcat来处理的. 一 搭建jdk 先搭建java环境 1  tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/    ###解压到/usr/local下### 2 ln -s jdk1.7.0_79/ java            ###软链接方便版本升级后的使用### 3 vim /

memcache的简单应用

如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作:作为PHP开发人员,我们一般能想到的方法有页面静态化处理.防盗链.CDN内容分发加速访问.mysql数据库优化建立索引.架设apache服务器集群.还有就是现在流行的各种分布式缓存技术:如memcached/redis:1.什么是Memcached?a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从

【memcache】Memcached

一.Memcached 简介 1. 官网:http://www.memcached.org 2. Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. 二.作用: 1. 将数据存入内存,需要的时候从内存读取. 2. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展性. 3. 原理,如果有缓存,就读取缓存,如果没有,就读取 数据库. 三.安装 linux 安装 1. 安装libevent 官方网站 http://libevent.

Redis和Memcache对比及选择

Redis和Memcache对比及选择 http://www.cnblogs.com/EE-NovRain/p/3268476.html 在选择内存数据库的时候到底什么时候选择redis,什么时候选择memcache,然后就查到下面对应的资料,是来自redis作者的说法(stackoverflow上面). You should not care too much about performances. Redis is faster per core with small values, but

PHP使用MemCache加速MySql速度,提高数据库负载

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. ————摘自AMH面板简介 博客站的服务器用的AMH的面板没有自己编译PHP之类 应用中心直接安装了MemCache服务器 如果用自己编译 http://memcached.org/ 去官网下载安装就可以了,这里就不多说了~ 安装完后,确保PHP服务器支持MemCache拓展,如果不支持可以到下面两个地址安装依赖库