一、Memcache 是什么?

  组成:程序进程管理、Socket

  程序进程:Memcache把内存先分成几个大份,每一份分成多个小份。例如:小份中有5M...0.9M、0.8M、....0.1M,一份大小为X兆的数据发送过来,如果0.9M<X<0.8M就放到0.9M的区域。因此,memcache没有内存碎片(内存缝隙,区域与区域之间的空间),所以高效。

  Socket:此处主要用于数据的收发。详情百度。

二、为什么要用Memcache?

1)磁盘IO的瓶颈:磁盘IO的读写能力是有限的,且远远低于内存的读写能力。而数据库读写是依靠磁盘IO的,当数据库遇到高并发访问时,死锁问题较为突出!Memcache很好的解决了这个问题。

//注释1:并发访问:同一时间,同一数据,多个用户请求访问。

//注释:2:为什么会出现死锁:数据库为了保证数据的唯一性,在每次读和写操作时都会上锁,同一时间只允许一个用户访问数据。同一时间,如果有两个用户,用户A1对数据C进行读操作已经完成,正在申请对数据D进行写操作,但是另一个用户A2正在进行写操作(此时数据D已经上锁,A1只有等A2释放D后才能操作D。由于操作没有完成,A1也不能释放数据C);用户A2对数据C进行写操作已经完成,正在申请对数据D信息读操作,但是有一个用户A1正在进行读操作(此时数据C已经上锁,A2只有等A1释放C后才能操作C。由于操作没有完成,A2亦无法释放D);就这样A1在等A2释放D,A2亦在等A1释放C,两者互不相让,结果两者一直等下去。

//注释3:为什么要上锁? 因为如果允许两个用户同时操作同一数据,那最终的数据会是怎么样的呢?结果是你我修改内容的随机混合,显然这是双方都不希望的结果。

2)Memcache玩的平衡:用内存读写换磁盘IO读写,即用内存把数据快速读取到缓存,用户访问数据库数据前,先在缓存中找,如果有就不在去数据库查找,如果没有在去数据库中找。这样大大减少了数据库的访问量,这种情况下磁盘IO读写速度可以应符。

3)注意缓存断电会消失,且第一次还是需要数据库操作磁盘读取数据到放入内存中。

4)Memcache在数据库集群中中扮演的角色:

  举个例子:客户端A在访问服务器集群中的某一台服务器C1时,C1会生成一个唯一标识符Guid写入A客户端Cookie中(有效期一般为退出销毁),同时存一份到服务器集群共享缓存memcache中(设置有效期)。当A再次访问服务器集群中某一台服务器C2时,由于Cookie中的信息会随同一起发送到服务器C2,服务器C2便获取到了Cookie中的Guid,通过与共享缓存memcache中的guid对比,如果guid相同则不需要去数据库校验密码即可访问,如果规定不同则需要访问数据库重新校验密码才能访问服务器集群中的服务器C2。

  这样就大大减少了对数据访问的次数,这种情况下磁盘IO读写速度可以应符。

三、memcache怎么用?

第一步:直接使用Memcache

第二步:Memcached控制台练习

class Program
{
static void Main(string[] args)
{

//分布式Memcached服务IP和端口
string[] servers = { "192.168.15.119:11211" }; 
//初始化Socked连接池
SockIOPool pool = SockIOPool.GetInstance();
//设置服务器列表
pool.SetServers(servers);
//初始化时创建连接数
pool.InitConnections = 3;
//最小连接数
pool.MinConnections = 3;
//最大连接数
pool.MaxConnections = 5;
//socket连接超时时间(单位ms)。如果设置为0表示一直保持连接状态。
pool.SocketConnectTimeout = 1000;
//Scoket通讯的超时时间,下面设置为3秒。
pool.SocketTimeout = 3000;
//维护线程的间隔激活时间,下面设置为3秒,设置为0表示表示不启用维护线程。
pool.MaintenanceSleep = 30;
//设置SocketIO池的故障标志
pool.Failover = true;
//是否对TCP/IP通讯使用nalgle算法
pool.Nagle = false;
//进行初始化操作
pool.Initialize();

//新建一个客户端实例
MemcachedClient cache = new Memcached.ClientLibrary.MemcachedClient();
//是否启用压缩数据:如果启用了压缩数据,长于门槛的数据将被存储在压缩的形式
cache.EnableCompression = false;

//向缓存中添加一键为b1,值为2234 的键值对
cache.Add("b1", "2234");
//读出一个key为b1的缓存值
var a = cache.Get("b1");
Console.WriteLine(a);

//修改键为b1的键值对,如果没有就创建
cache.Set("b1", "value的值");
var s = cache.Get("b1");
Console.WriteLine(s);

//删除键为b1的键值对
cache.Delete("b1");
Console.WriteLine("s={0}",s); //键值对被删除了但是,删除前已经赋值给了s。
Console.ReadKey();

}
}

第三步:Memcache运用于项目

四、遇到的问题

1安装memcached报错
错误提示:
failed to install service or service already installed

解决:
1、找到cmd.exe文件(c:\windows\system32\cmd.exe)
2、右键cmd.exe以管理员方式运行

2使用任务管理器开启服务时报错:权限问题,使用管理员权限。
右击计算机-管理-服务-开启/关闭服务

3怎么开启telnet?
控制面板-程序和功能-开启或关闭window功能(左上角)-选中telnet客户端

在使用memcached写错了用空格改正还是会报错,所以写错了就重新换行重写。

Memcache学习整理的更多相关文章

  1. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  2. TweenMax学习整理--特有属性

    TweenMax学习整理--特有属性   构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...

  3. HttpClient学习整理

    HttpClient简介HttpClient 功能介绍    1. 读取网页(HTTP/HTTPS)内容    2.使用POST方式提交数据(httpClient3)    3. 处理页面重定向    ...

  4. 《Memcache学习总结》[PDF]发布

    <Memcache学习总结>[PDF]发布 百度网盘共享: http://pan.baidu.com/s/1mgvayQO  版本号: V1.2 最后跟新: 2015-04-01 讨论组: ...

  5. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

  6. Java设计模式(学习整理)---命令模式

    设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...

  7. Wix学习整理(5)——安装时填写注册表

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...

  8. Wix学习整理(6)——安装快捷方式

    原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...

  9. Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

    原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些 ...

随机推荐

  1. SPIRE.DOC - .NET开发者的福利

    SPIRE.DOC - .NET开发者的福利 前面我们使用过Spire.XLS for .NET Component创建Excel文件.最近试用了下.DOC 方面的API.这次测试的产品是.通过使用S ...

  2. 深入seajs源码系列三

    入口方法 每个程序都有个入口方法,类似于c的main函数,seajs也不例外.系列一的demo在首页使用了seajs.use(),这便是入口方法.入口方法可以接受2个参数,第一个参数为模块名称,第二个 ...

  3. Buffer cache hit ratio性能计数器真的可以作为内存瓶颈的判断指标吗?

    Buffer cache hit ratio官方是这么解释的:“指示在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比.” Buffer cache hit ratio被很多人当做判断内存的性能指 ...

  4. Django 1.10 中文文档------3.2.2 查询操作making queries

    3.2.2 查询操作 6.15章节包含所有模型相关的API解释. 后面的内容基于如下的一个博客应用模型: from django.db import models class Blog(models. ...

  5. 【Win10开发】处理PC上的后退键

    我们知道在win10手机上和平板上都会有后退键,那么PC上该怎么办呢?没关系我们慢慢揭晓. 如果你已经是UWP的忠实用户,那么肯定会见到如下的后退键. 那么我们如何来做出来呢?, 我们首先打开App. ...

  6. org.hibernate.exception.SQLGrammarException: could not execute query

    SSH项目中出现了 org.hibernate.exception.SQLGrammarException: could not execute query 错误,仔细检查后发现,是把createQu ...

  7. c#中奖算法的实现

    算法名称 Alias Method public class AliasMethod { /* The probability and alias tables. */ private int[] _ ...

  8. [Cordova] Plugin里使用Android Library

    [Cordova] Plugin里使用Android Library 前言 开发Cordova Plugin的时候,在Native Code里使用第三方Library,除了可以加速项目的时程.也避免了 ...

  9. Code First :使用Entity. Framework编程(8) ----转发 收藏

    第8章 Code First将走向哪里? So far, this book has covered all of the Code First components that reached the ...

  10. DOM事件揭秘-事件流

    事件:文档/窗口中发生的特定的交互瞬间 瀑布流,图片轮播 动作都是通过事件触发的 课程内容: 1,理解事件流 2,使用时间处理程序 3,不同的事件类型 ie4.0以后, 事件流:描述的是从页面中接收事 ...