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. 添加已有项目到git rep

    cd yourproject——homegit init //在当前项目目录中生成本地git管理,建立一个隐藏.git目录 git add src //添加你想用git管理的代码的目录 git com ...

  2. ThinkPHP 购物商城网站(数据库中增删改查的功能实现)——————重点——————

    控制器 ---------------------GoodsController.class.php------------------------------------------------- ...

  3. asp.net修改web.config文件

    private void UpdateConfigFile() { var cfg = System.Web.Configuration.WebConfigurationManager.OpenWeb ...

  4. Dynamic Virtual Channels

    refer http://blogs.msdn.com/b/rds/archive/2007/09/20/dynamic-virtual-channels.aspx An important goal ...

  5. c3p0、dbcp<转>

    <!--读取文件jdbc.properties --> <bean id="config" class="org.springframework.bea ...

  6. Linux 学习笔记(一)

    Linux体系结构 下面是Linux体系结构的示意图: 在所有Linux版本中,都会涉及到以下几个重要概念: 内核:内核是操作系统的核心.内核直接与硬件交互,并处理大部分较低层的任务,如内存管理.进程 ...

  7. 利用nginx向现有网站添加登录验证功能(不添加修改现有网站代码)

    在不改变现有网站代码的前提下加入验证功能: 1.假设现有网站后端nodejs,端口3000,nginx配置如下 server { listen 80; server_name localhost; l ...

  8. linux远程连接客户端总结

    序:刚从阿里ECS买了一个ubuntu14.04_64_20G,但是没有提供页面登陆工具,因此从网上找了几个远程连接工具,特写在这里算是总结. 1 secureCRT SecureCRT是一款支持SS ...

  9. C# Window Service详解

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  10. 简单聊下Unicode和UTF-8

    今晚听同事分享提到这个,简单总结下. ## Unicode字符集 Unicode的出现是因为ASCII等其他编码码不够用了,比如ASCII是英语为母语的人发明的,只要一个字节8位就能够表示26个英文字 ...