Memcached分布式缓存

概念

Memcached 是一个高性能的分布式内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

具有以下特点

.协议简单:

使用简单的基于文本行的协议,没有使用复杂的XML协议。因此,通过telnet也能在memcached上存取数据;

.基于libevent的事件处理:

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。

.内置内存存储方式:

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中;由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used 近期最少使用算法)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

.服务端互不相通信的分布式

每个服务器端都是独立存在的,他们相互之间没有通讯,数据的分布存储完全取决于客户端的实现。memcached的集群非常简单,我们的应用程序只需要将数据请求给 memcached客户端,在memcached客户端中会通过一个分布式算法(一致性Hash算法)从memcached服务器列表中计算一个 memcached服务器的地址(如果是读请求,则根据Key在分布式算法中得到缓存有该Key的memcached服务器信息),然后客户端将数据 (Key/Value对)传递给计算出来的memcached服务器(如果是读请求,则从计算出来的memcached服务器中读取含有指定Key的数据);

核心:分布、存储、删除

1.memcached采用一致性Hash算法来分配缓存数据到服务器集群。具体过程如下:

  首先构造一个长度为0~2^32(2的32次幂)个的整数环(又称:一致性Hash环),根据节点名称的Hash值将缓存服务器节点放置在这个Hash环中。

  其次客户端会计算出缓存数据Key值的Hash值,根据计算得到的Hash值对应到Hash环上

  最后在Hash环上顺时针查找距离这个Key的Hash值最近的缓存服务器节点,完成KEY到服务器的Hash映射查找。

  如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上

  当增加或减少服务器时,Hash环上的服务器节点会在原来的基础上增加去除,而不是全部重新均匀分布,这样最大限度地减小服务器增减时的缓存重新分布

2.memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块, 以完全解决内存碎片问题。具体如下:

  Slab Allocator将分配的内存(Page)分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(Slab Class/chunk的集合)来存放缓存数据。

  Page:分配给Slab的内存空间,默认是1MB。分配给Slab之后根据slab的大小切分成chunk。

  Chunk:用于缓存记录的内存空间。

  Slab Class:特定大小的chunk的组。

3.memcached是缓存,所以数据不会永久保存在服务器上。删除机制如下:

  透明(invisible):memcached不会释放已分配的内存。记录超时后,客户端就无法再看见该记录,其存储空间即可重复使用。

  惰性(Lazy Expiration):memcached内部不会监视记录是否过期,而是在获取时查看记录的时间戳,检查记录是否过期。因此,memcached不会在过期监视上耗费CPU时间。

  LRU(Least Recently Used): memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况, 此时就要使用LRU机制来分配空间。当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。

  PS: memcached启动时通过“-M”参数可以禁止LRU  memcached.exe -M -m 1024 (小写的“-m”选项是用来指定最大内存大小的。不指定具体数值则使用默认值64MB。)  这样,当指定的内存用尽时,不再分配控件 报错。

windows下的安装与VS中的使用

首先是安装服务

1.网上下载 window版 memcached.exe 文件

2.将下载好的exe文件 放到某一个盘符里,方便命令找到

3.打开cmd 打开到存放exe的文件夹下 命令安装运行服务

4.打开任务管理器查看服务是否安装运行

安装好服务之后接下来就是客户端了

1.首先得下载Memcached客户端有.Net版

2.在网站中添加引用

3.配置服务器地址和端口

4.使用memcached存取数据

参考文章(特别给力):

http://kb.cnblogs.com/page/42731/

http://www.cnblogs.com/edisonchou/p/3855517.html

转载于:https://www.cnblogs.com/atxgs/articles/4495231.html

.Net缓存小结(下)相关推荐

  1. 深入理解分布式系统中的缓存架构(下)

    转载自   深入理解分布式系统中的缓存架构(下) 承接上一篇<理解分布式系统中的缓存架构(上)>,介绍了大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景,本文主要介绍缓存架构设计 ...

  2. 微博中微服务缓存_微博到底有多重视分布式缓存(下)

    分布式缓存 2.1 分布式? 考虑之前在缓存引入小节中所描述的,我们在原有的单层db结构中引入了缓存memcached: 在这种单实例缓存架构下,随着业务规模的不断增长,我们发现存在如下几个问题: 1 ...

  3. iOS架构设计-URL缓存(下)

    本文转载自崔江涛(KenshinCui) 缓存设计 从前面对于URL Loading System的分析可以看出利用NSURLProtocol或者NSURLCache都可以做客户端缓存,但是NSURL ...

  4. .Net缓存小结(中)

    System.Web.Caching.Cache Cache:用于在Http请求期间保存页面或者数据.Cache的使用可以大大的提高整个应用程序的效率.它允许将频繁访问的服务器资源存储在内存中,当用户 ...

  5. Spring boot - 整合 Redis缓存(下)

    在SpringBoot项目中使用Redis进行缓存接口返回数据,以及结合课程表的增删查改进行获取更新缓存. 一.相关注解 @Cacheable.@CachePut.@CacheEvict 在Sprin ...

  6. ie ajax异步缓存,IE下发送Ajax请求的缓存问题

    IE下发送Ajax请求的缓存问题 (2012-03-22 15:54:25) 标签: it 分类: web 今天下午在做要素页面无刷新添加的时候,IE下遭遇Ajax缓存戏弄,因为刚开始并不知道IE有这 ...

  7. delphi7 dbgrid缓存模式下怎么判断输入重复记录_互联网公司的架构设计要怎么落地?| 技术头条...

    作者 | 张辉清 责编 | 胡巍巍 你做架构设计了吗?你认为要不要做架构设计?你的公司有没有做架构设计?互联网公司的架构设计又要怎么做? 我不知道你是怎么想的,在我得到的答复中,大部分人认为要做架构设 ...

  8. linux 编译缓存,Linux下SSD缓存加速之open cas试用

    Linux下SSD缓存加速之open cas试用 猫先生 • 2019 年 09 月 06 日 之前写过 Linux下bcache安装测试的文章 Linux下SSD缓存加速之bcache试用,还是那个 ...

  9. 万字长文聊缓存(下)- 应用级缓存

    摘要 在上一篇文章 万字长文聊缓存(上)中,我们主要如何围绕着Http做缓存优化,在后端服务器的应用层同样有很多地方可以做缓存,提高服务的效率:本篇我们就来继续聊聊应用级的缓存. 缓存的命中率 缓存的 ...

最新文章

  1. PIC单片机精通_异步串口通讯实例与细节
  2. ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍
  3. django mysql connector_MySQL Connector / Python作为Django引擎?
  4. 用CSS的 filter 来轻松实现图层半透明
  5. 浅谈:Wi-Fi 6的优势及应用前景
  6. OpenStack(四)——Nova组件
  7. springboot数据源不正确_Spring MVC 到 Spring Boot 的简化之路
  8. 百钱买白鸡与啤酒饮料
  9. 简明Python教程学习笔记_8_异常
  10. docker4.9.0.9_Docker支持现实生活中的鲸鱼,通过投票确定Linux v4.0等
  11. 两款优质的Mac读写ntfs软件推荐
  12. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_4字符输出流的基本使用_写出单个字符...
  13. 游戏对战平台--吃货大作战
  14. MASM32汇编SDK安装
  15. 华为云服务器安全组端口开放教程
  16. 【Python】从堆糖爬取图片Demo
  17. 数字图像处理与Python实现笔记之图像压缩
  18. 贝尔曼方程怎么解_贝尔曼方程
  19. 「面向信仰编程」Draven 专访:像写代码一样,用树形的结构写文章
  20. muduo源码分析2——Singleton分析

热门文章

  1. Spark RPC框架源码分析(二)RPC运行时序
  2. 【转】PHP获取重定向URL的几种方法
  3. linux下的sort、uniq、join的使用
  4. idea整合 spring boot jsp mybatis
  5. Karpathy更新深度学习开源框架排名:TensorFlow第一,PyTorch第二
  6. LVS Nginx HAProxy 三种负载均衡优缺点比较
  7. Router通过DHCP上网配置方法
  8. 第二单元linux系统
  9. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)
  10. Android内存泄漏就这样产生了