memcached缓存基本概念
Memcached是一套分布式内存对象缓存系统。
用于在动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升网站系统性能的目的;
memcached在企业应用场景中一般是用来作为数据库的cache服务使用,memcached是通过预分配指定的内存空间来存取数据的,因此它比数据库直接操作磁盘要快很多,可以提供比直接读取数据库更好的性能。
另外,memcached也经常作为集群架构节点应用服务器之间的session数据共享的存储。
1、Memcached服务在应用中的工作流程:
Memcached是一种内存缓存,在工作中经常用来缓存数据库中的数据,数据被缓存在事先预分配的memcached管理的内存中,可以通过API的方式存取内存中缓存的这些数据,Memcached服务内存中缓存的数据就像一张巨大的HASH表,每条数据都是以key-value对的形式存在。
memcached通过缓存经常被读取的数据库中的数据,当程序需要访问后端数据库获取数据时会优先访问memcached内存缓存,如果缓存中有数据就直接返回前端服务应用,如果没有数据再转发给后端的数据库服务器,程序服务取memcached内存缓存中没有对应的数据后,除了返回给用户数据外,还会把数据在内存中进行缓存,等待下次被访问,从而大大的减轻数据库的压力,提高整个网站架构的响应速度,提升了用户体验。
2、memcached服务在大型站点中的应用
几乎所有的网站,当访问量增大时,在整个网站集群架构中最先出现瓶颈的一定是数据库角色的服务器以及存储角色的服务器,在工作中我们是尽量把用户的请求往前推,即当用户请求数据时,越是在靠近用户的一端把数据返回就越好。
见作者的千万级PV/IP规模高性能高并发网站架构:http://oldboy.blog.51cto.com/2561410/736710
3、memcached负载均衡及分布式应用场景:
[分布式应用1]
Memcache支持分布式,我们在应用服务器程序上改造,就可以更好的支持。
[分布式应用2]
在应用服务器上通过程序及URL_HASH,一致性哈希算法去访问Memcache服务,所有Memcached服务器的地址池可以简单的配在每个程序的配置文件里。
[分布式应用3]
门户如百度,会通过一个中间件代理负责请求后端的Cache服务。
[分布式应用4]
可以用常见的LVS,haproxy做Cache的负载均衡,和普通web应用服务相比,这里的重点是调度算法,Cache一般会选择URL_HASH及一致性hash算法。
3、Memcached的特性
Memcached作为高并发、高性能的缓存服务,具有如下特征:
(1)协议简单
memcached的协议实现比较简单,使用的是基于文本行的协议,能通过telnet直接操作memcached服务存取数据。
(2)基于libevent的事件处理
简单的说,libevent是一套利用C开发的程序库,它将BSD系统的kqueue,linux系统的epoll等事件处理功能封装成一个接口,确保即使服务器端的连接数增加也能发挥很好的性能。
(3)内置的内存管理方式
memcached有一套自己管理的内存的方式,这套管理方式非常高效,所有的数据都保存在Memcached内置的内存中,当存入的数据占满内存空间时,Memcached使用LRU算法自动删除不使用的缓存数据,即重用过期数据的内存空间。
(4)互不通信memcached之间具有分布特征
各个Memcached服务器之间互相不通信,都是独立的存取数据,不共享任何信息。通过对客户端的设计,让memcached具有分布式,能支持海量缓存和大规模应用。
memcached缓存基本概念的更多相关文章
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- memcached 缓存服务器
Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点 ...
- Memcached缓存入门篇
Asp.Net中使用Couchbase——Memcached缓存入门篇 前言 本文的主要目的就是简单的进行使用Memcached.这是Memchahed的官网http://memcached.org/ ...
- 一,memcached的基本概念
1,memcached的基本概念 memcached是一个高效的分布式内存对象缓存系统,它可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.简单的说,memcached ...
- Python项目使用memcached缓存
前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...
- openstack (3)---------部署memcached缓存服务,keystone服务
一.memcached概念 Memcached 是一个开源的.高性能的分布式内存对象缓存系统.通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用.减轻数据库负载 ...
- Memcached 缓存系统简介
memcached官网:http://memcached.org/ What is Memcached? Memcached是一个自由开源的,高性能,高并发,分布式内存对象缓存系统. Memcache ...
- .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...
- redis和memcached缓存
memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...
随机推荐
- 【Eclipse】Eclipse-Build-缓慢-卡住
Eclipse-Build-缓慢-卡住 eclipse building workspace 卡主_百度搜索 解决building workplace 导致的卡死,使得eclipse加速 - CSDN ...
- Tensorflow中张量数据类型的转换
https://blog.csdn.net/Tramac/article/details/74942587 字符串转为数字: tf.string_to_number (string_tensor, o ...
- THINKPHP 解决模块不存在时出现空页面的问题
遇到的问题: 最近使用THINKCMF开发了一个企业网站,因为之前客户的域名变更过,然后就发现当某个模块不存在的时候就出现了空页面 在 THINKPHP论坛 上有人说在项目里添加一个EmptyActi ...
- RedisTemplate 分页
利用spring redis的RedisTemplate进行分页: 场景: 现有项目若干,根据项目的创建时间(createTime)进行降序读取: 存储结构: key:proList(list) 存放 ...
- jetty 9使用
jetty 9 使用 下载jdk 7 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-ja ...
- activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含
Number Of Consumers 消费者 这个是消费者端的消费者数量 Number Of Pending Messages 等待消费的消息 这个是当前未出队列的数量.可以理解为总接收数-总出队 ...
- iOS 中基础字符判断函数收集(如判断大小写、数字等)
函数:isdigit 用法:#include 功能:判断字符c是否为数字 说明:当c为数字0-9时,返回非零值,否则返回零. 函数:islower 用法:#include 功能:判断字符c是否为小写英 ...
- xpress for node 路由route几种实现方式
路由实现方式和顺序第二种路由写法第三种路由写法最佳 http://blog.csdn.net/mociml/article/details/11137571# http://blog.fens.me/ ...
- Maven依赖的Scope去除部署不需要的jar 包(打包)
<dependency> < groupId>javax.servlet</groupId> < artifactId>jsp-api</arti ...
- elasticsearch备忘
1.解决java.lang.RuntimeException: can not run elasticsearch as rootadduser *** //添加用户passwd *** //给用户赋 ...