一 理论基础

在大型海量并发访问网站及openstack等集群中,对于关系型数据库,尤其是 大型关系型数据库,如果对其进行每秒上万次的并发访问,并且每次访问都在 一个有上亿条记录的数据表中查询某条记录时,其效率会非常低,对数据库而 言,这也是无法承受的。
缓冲系统的使用可以很好的解决大型并发数据访问所带来的效率低下和数据库 压力等问题,缓存系统将经常使用的活跃数据存储在内存中避免了访问重复数 据时,数据库查询所带来的频繁磁盘i/o和大型关系表查询时的时间开销,因 此缓存系统几乎是大型网站的必备功能模块。
缓存系统可以认为是基于内存的数据库,相对于后端大型生产数据库而言基于 内存的缓存数据库能够提供快速的数据访问操作,从而提高客户端的数据请求 访问反馈,并降低后端数据库的访问压力。

二. 概念

1.Memcached 是一个开源的、高性能的分布式内存对象缓存系统。通过在内存 中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动 态WEB应用、减轻数据库负载。
2.Memcached是一种内存缓存,把经常需要存取的对象或数据缓存在内存中, 内存中,缓存的这些数据通过API的方式被存取,数据经过利用HASH之后被 存放到位于内存上的HASH表内,HASH表中的数据以key-value的形式存放, 由于Memcached没有实现访问认证及安全管理控制,因此在面向internet的 系统架构中,Memcached服务器通常位于用户的安全区域。
3.当Memcached服务器节点的物理内存剩余空间不足,Memcached将使用最 近最少使用算法(LRU,LastRecentlyUsed)对最近不活跃的数据进行清理, 从而整理出新的内存空间存放需要存储的数据。
4.Memcached在解决大规模集群数据缓存的诸多难题上有具有非常明显的优势 并且还易于进行二次开发,因此越来越多的用户将其作为集群缓存系统,此外, Memcached开放式的API,使得大多数的程序语言都能使用Memcached, 如javac、C/C++C#,Perl、python、PHP、Ruby 各种流行的编程语言。
5.由于Memcached的诸多优势,其已经成为众多开源项目的首选集群缓存系统。 如openstacksd的keystone身份认证项目。就会利用Memcached来缓存租 户的Token等身份信息,从而在用户登陆验证时无需查询存储在MySQL后端数 据库中的用户信息,这在数据库高负荷运行下的大型openstack集群中能够极 大地提高用户的身份验证过程,在如web管理界面Horizon和对象存储Swift 项目也都会利用Memcached来缓存数据以提高客户端的访问请求响应速率

三.缓存流程

1. 检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在 对数据进行任何操作。
2. 如果请求的数据不在 Memcache 中,就去 数据库查询,把从数据库中获取的数据返回给 客户端,同时把数据缓存一份 Memcache 中
3. 每次更新数据库的同时更新 Memcache 中的数据库。确保数据信息一致性。
4. 当分配给 Memcache 内存空间用完后, 会使用LRU(least Recently Used ,最近最少 使用 ) 策略加到其失效策略,失效的数据首先 被替换掉,然后在替换掉最近未使用的数据

五. 功能特点

1. 协议简单 其使用基于文本行的协议,能直接通过 telnet 在Memcached 服务器上 存取数据
2. 基于 libevent 的事件处理 libevent 利用 C 开发的程序库,它将 BSD 系统的kqueue,Linux 系统的 epoll 等事件处理功能封装成为一个接口,确保即使服务器端的链接数。 加也能发挥很好的性能。Memcached 利用这个库进行异步事件处理。 3. 内置的内存管理方式 Memcached 有一套自己管理内存的方式,这套方式非常高效,所有的数 据都保存在Memcached内置的内存中,当存入的数据占满空间时,使用 LRU 算法自动删除不使用的缓存,即重用过期的内存空间。 Memecached 不考虑数据的容灾问题,一旦重启所有数据全部丢失。
4. 节点相互独立的分布式 各个 Memecached 服务器之间互不通信,都是独立的存取数据,不共享 任何信息。通过对客户端的设计,让 Memcached 具有分布式,能支持海 量缓存和大规模应用。

六.使用Memcached应该考虑的因素

1. Memcached服务单点故障 在Memcached集群系统中每个节点独立存取数据,彼此不存在数据同步镜像机制, 如果一个Memcached节点故障或者重启,则该节点缓存在内存的数据全部会丢失, 再次访问时数据再次缓存到该服务器
2. 存储空间限制 Memcache缓存系统的数据存储在内存中,必然会受到寻址空间大小的限制,32为 系统可以缓存的数据为2G,64位系统缓存的数据可以是无限的,要看Memcached 服务器物理内存足够大即可
3. 存储单元限制 Memcache缓存系统以 key-value 为单元进行数据存储,能够存储的数据key尺寸 大小为250字节,能够存储的value尺寸大小为1MB,超过这个值不允许存储
4. 数据碎片 Memcache缓存系统的内存存储单元是按照Chunk来分配的,这意味着不可能,所 有存储的value数据大小正好等于一个Chunk的大小,因此必然会造成内存碎片,而 浪费存储空间
5. 利旧算法局限性 Memcache缓存系统的LRU算法,并不是针对全局空间的存储数据的,而是针 对Slab的,Slab是Memcached中具有同样大小的多个Chunk集合
6.数据访问安全性 Memcache缓存系统的慢慢Memcached服务端并没有相应的安全认证机制通过, 通过非加密的telnet连接即可对Memcached服务器端的数据进行各种操作

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/18513387476-com/p/5dc0888f6d7f2912073cf68d3092af31.html

Memcache 缓存系统相关推荐

  1. Memcache缓存系统

    1. 缓存系统 一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request), ...

  2. Memcache缓存系统原理

    在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...

  3. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库   (这里仅从 ...

  4. MemCache内存缓存系统

    memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速, 默认情况下占用的端口号为:11211. 在memachec ...

  5. 缓存系统memcache的安装,配置和使用

    软件介绍[我的Linux,让Linux更易用]memcached是一套分布式的快取或缓存系统,当初是Danga Interactive为了LiveJournal所发展的,但目前被许多软件(如Media ...

  6. Memcached 缓存系统的-介绍、安装以及应用

    一. memcached 是什么? memcached is a high-performance, distributed memory object caching system, generic ...

  7. 分布式缓存系统Memcached简介与实践

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

  8. 分布式缓存系统Memcached简介与实践(.NET memcached client library)

    原文:分布式缓存系统Memcached简介与实践(.NET memcached client library) 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加 ...

  9. Java中使用memcache缓存

    一.简要概述: memcache集群环境下缓存解决方案,是一个高性能的分布式的内存对象缓存系统,通过在内存库里维护一个统一的巨大的hash表,存储各种数据,包括图像.视频.文件以及数据库检索结果等. ...

  10. memcached java 多线程_springboot使用memcache缓存

    Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

最新文章

  1. httpservletrequest_javax.servlet.http.HttpServletRequest报错
  2. as安装过程中gradle_重新认识AndroidStudio和Gradle,这些都是我们应该知道的
  3. python find(urlopen.read())_Python小白必看之urlopen()详解
  4. SAP UI5 应用 filter 功能不能正常工作时的单步调试方法
  5. 科沃斯扫地机器人风扇模块_扫地机器人不能开机,不能关机,风扇不转
  6. 【LeetCode笔记】221. 最大正方形(Java、动态规划、思路题)
  7. 行为设计模式 - 迭代器设计模式
  8. RHEL6入门系列之十七,打包与压缩
  9. 格力电器成为银隆新能源股东 持股30.47%
  10. SQL Server分页3种方案比拼[转]
  11. unix下matlab安装
  12. Android NavigationView中设置menu中的item字体颜色
  13. java编程常用软件
  14. [渝粤教育] 郑州工程技术学院 试验设计与数据处理 参考 资料
  15. EverNote 极致的免费笔记资料管理软件 (数据网络同步、支持PC、Mac与手机多平台) 转自:http://www.iplaysoft.com/evernote.html
  16. Kruskal算法的应用
  17. 测试论坛和网站资源分享
  18. 什么是企业邮箱星标联系人?
  19. 访问mp4出现416
  20. 7-5 判断输入的字符是哪种类型

热门文章

  1. 关于algorithm的sort函数
  2. 计算机组成原理——第三章
  3. consul 服务发现 集群 docker 版
  4. Ubuntu16.x服务器 安装 Java,Elasticsearch5.4.X,中文分词,同义词,Logstash5.4.X 日志搜集
  5. RocketMQ Client 编码快速入门 与 可视化控制台
  6. 阶段3 2.Spring_03.Spring的 IOC 和 DI_1 ioc的概念和作用
  7. 查看EXE或DLL调用的DLL
  8. asp.net—工厂模式
  9. 有关C++11标准的一些粗浅认识
  10. 【JOURNAL】《题虾壶》