1.使用分布式缓存是为了解决多台机器共享信息的问题,通过访问一个ip和端口来可以访问不同的IIS服务器

2.memcache基础原理

在Socket服务器端存储数据是以键值对的形式存储

内存处理的算法: 本质就是一个大的哈希表。

key最大长度是255个字符,value最大为1MB 内存模型:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk)最大1MB,但同一个分区里:块的长度(bytes)是固定的。

插入数据:查找适合自己长度的块,然后插入,会有内存浪费。 LRU,闲置>过期  >最少访问

惰性删除:它并没有提供监控数据过期的机制,而是惰性的,当查询到某个key数据时,如果过期那么直接抛弃。

集群搭建原理: Memcache服务器端并没有提供集群功能,但是通过客户端的驱动程序实现了集群配置。

客户端实现集群的原理:首先客户端配置多台集群机器的ip和端口的列表。然后客户端驱动程序在写入之前,首先对key做哈希处理得到哈希值后对总的机器的个数进行取余然后就选择余数对应的机器。 Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk),但同一个分区里:块的长度(bytes)是固定的。 将记录从Memcache删除后,已经分配的内存(即Chunk),也不会被释放,而是会重复利用,这样就彻底解决了内存碎片的问题 Memcache采用“惰性”方式来应对记录的超期问题

3.Windows下使用Memcache

下载Memcache Service: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

将Memcache.exe安装为Windows服务:Memcache.exe -d install

启动Memcache服务:Memcache.exe -d start

启动Memcache服务(windows命令):net start "Memcache Server"

停止Memcache服务(windows命令):net stop "Memcache Server"

连接到Memcache控制台:telnet ServerIP 11211

打印当前Memcache服务器状态:stats

打印当前Memcache服务器Items(记录)的统计信息:stats items

打印当前Memcache服务器Slab(分区)及Chunk(块)的统计信息:stats slabs

打印指定Slab中的KEY列表(可用于遍历items,但效率较低,慎用!):stats cachedump SlabId Limit_num。

显示结果:ITEM KeyName [ValueByteLength b; LastAccessTime s]。值得注意的是,经过测试确认:那个LastAccessTime并不是记录到期时间,而是最后一次的get时间,并且get之后,也不会自动延长expiry(到期时间)。

添加新记录:add KeyName 0 0 ValueByteLength [回车] ValueContent

删除记录 : delete KeyName

添加或更新记录 : set KeyName 0 0 ValueByteLength [回车] ValueContent

更新记录 : replace KeyName 0 0 ValueByteLength [回车] ValueContent

参考:http://www.cnblogs.com/lost-1987/articles/3069460.html

http://wenku.baidu.com/view/e30db586ec3a87c24028c401.html

也可以使用http://yunpan.cn/Q7G8VzTRa69MJ (提取码:8c12),将服务直接安装到电脑上,

1) 解压到d:\memcached。

2) 在命令行状态下输入: d:\memcached\memcached.exe -d install 。至此memcached已经安装成windows服务

3) 在命令行下输入: d:\memcached\memcached.exe -d start 以启动memcached服务。当然也可以选择在windows服务中启动。

4.C#操作Memcache 引用类库文件

使用NuGet包下载Memcached Client

封装MemcachedHelper类

public static class MemcacheHelper

{

private static MemcachedClient mc;

static MemcacheHelper()

{

String[] serverlist = { "127.0.0.1:11211" };

// initialize the pool for memcache servers

SockIOPool pool = SockIOPool.GetInstance("test");

pool.SetServers(serverlist);

pool.Initialize();

mc = new MemcachedClient();

mc.PoolName = "test";

mc.EnableCompression = false;

}

public static bool Set(string key, object value,DateTime expiry)

{

return mc.Set(key, value, expiry);

}

public static object Get(string key)

{

return mc.Get(key);

}

}

使用方法

MemcacheHelper.Set("key", "value", DateTime.Now.AddMinutes(20));

MemcacheHelper.Get("key");

5.Cookie+Memcache模拟Session保持登录状态

Guid sessionId = Guid.NewGuid();//申请了一个模拟的GUID:SessionId

//把sessionid写到客户端浏览器里面去

Response.Cookies["sessionId"].Value = sessionId.ToString();

MemcacheHelper.Set(sessionId.ToString(), loginUser, DateTime.Now.AddMinutes(20));

//从cookie中获取咱们的 登录的sessionId

string sessionId = Request["sessionId"];

if (!string.IsNullOrEmpty(sessionId))

{

object obj = MemcacheHelper.Get(sessionId);

UserInfo user = obj as UserInfo;

}

Memcached资料:http://yunpan.cn/Q7Gts4LLGvnz2 (提取码:6d84)

分布式缓存 memcache学习的更多相关文章

  1. 分布式缓存Memcache和Redis

    引言 针对于如今计算机的CPU和网络设施,相应用程序来说,运行效率的瓶颈.已经不是代码的长度(实现同一个功能)和带宽了,而是,代码訪问资源的过程.即:让我们的程序慢下来的罪魁祸首就是IO操作. 程序从 ...

  2. 分布式缓存Memcache

    Memcached是分布式的,也就是说它不是本地的.它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式). Memcached使 ...

  3. 分布式缓存 — memcache

    MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度.Mem ...

  4. php5.4之分布式缓存memcache(windows7下安装配置)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1355541448/article/details/36663203 使用理由:就是为了频繁查询 ...

  5. 分布式缓存系统Memcached简介与以及在.net下的实践(转)

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  6. CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

    前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...

  7. CYQ.Data 对于分布式缓存Redis、MemCache高可用的改进及性能测试

    背景: 随着.NET Core 在 Linux 下的热动,相信动不动就要分布式或集群的应用的需求,会慢慢火起来. 所以这段时间一直在研究和思考分布式集群的问题,同时也在思考把几个框架的思维相对提升到这 ...

  8. 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  9. MemCache分布式缓存的一个bug

    Memcached分布式缓存策略不是由服务器端至支持的,多台服务器之间并不知道彼此的存在.分布式的实现是由客户端代码(Memcached.ClientLibrary)通过缓存key-server映射来 ...

随机推荐

  1. MyEclipse------快速写入内容到指定目录下的文件(字节输出流)

    other.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  2. App接口中xml方式封装通信接口

  3. Zabbix 监控 Nginx 状态

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...

  4. 如何修改ubuntu系统的电脑名(主机名)

    在按照ubuntu系统时,会提示你给电脑填写一个名字,可能当时你没有想好,就随便填写了一个,可是以后就又有新的想法,想重新更换一个名字,该怎么办呢? 其实很简单.按照下面的步骤即可. 进去后,修改完, ...

  5. 微信红包中使用的技术:AA收款+随机算法

    除夕夜你领到红包了吗?有的说“我领了好几K!”“我领了几W!” 土豪何其多,苦逼也不少!有的说“我出来工作了,没压岁钱了,还要发红包”.那您有去抢微信红包吗?微信群中抢“新年红包”春节爆红.618微信 ...

  6. RecContentType有哪些

    HTML  页面text/javascript  `type="text/javascript"` 是比较老的写法IETF 推荐的是 `type="application ...

  7. [Effective JavaScript 笔记]第19条:熟练掌握高阶函数

    高阶函数介绍 高阶函数曾经是函数式编程的一个概念,感觉是很高深的术语.但开发简洁优雅的函数可以使代码更加简单明了.过去几年中脚本语言采用了这些个技术,揭开了函数式编程的最佳惯用法的神秘面纱.高阶函数就 ...

  8. Tomcat打包时多项目共享jar和精确指定jar版本

    在产品打包发布时一个tomcat中如果存在多个war,部署的一般方式是部署到%TOMCAT_HOME%/webapps目录下,目录结构遵循J2EE规范,把引用的jar放到%TOMCAT_HOME%/w ...

  9. 配置caffe的python环境时make pycaffe提示fatal error: numpy/arrayobject.h No such file or directory解决方法

    重装numpy: sudo pip uninstall numpy sudo pip install numpy 是没有用的... 解决的办法就是: sudo apt-get install pyth ...

  10. Python Django 的 django templatedoesnotexist

    django 1.8版本的解决方案 在  setting.py 这个文件里 TEMPLATES = [ ...... #原来的 #'DIRS': [ ], //  这个 列表里添加 template路 ...