`

为什么选择Memcache

 
阅读更多

一、缓存什么时候用?

数据量增大后,直接频繁操作数据库会对库造成很大的压力,对于变更不太频繁,读的频率远大于写的频率,而且对实时性要求不太高的内容,放在缓存中,能减小数据库压力,提高访问速度。下图为使用缓存和不使用缓存时的请求处理流程:

可见,在使用了缓存后,直接通过缓存取数据,减小了数据库的压力。

二、缓存技术Redis?

现在所在的项目缓存技术用的是Memcache,都知道Memcache和Redis一样,都用做缓存之用。一直被旁人灌输的就是Redis的种种优越性,二者相比,Redis的两大特点是:

(1)Memcache只能存储键值对,Redis除了可以存储键值对而外,还支持list、set等数据类型;

(2)Memcache存储的数据只能放在内存中,而Redis支持数据的持久化,可以定期将内存中的数据持久化到硬盘上。

如此看来,Redis似乎要优于Memcache,那么,Memcache应该作为被抛弃的对象才对,为什么还会有人选择它呢?

三、为什么要用Memcache?

    (1)考虑具体应用目的:

在视频专区这个项目中,前台首页分版块展示视频节目的封面图片,通过封面链接到视频的详情页,进行视频的播放。这些内容变更不频繁,正好符合使用缓 存的条件,到底该使用哪种缓存技术呢?在Redis和Memcache的选择中:1、存取图片只需要进行简单的key-value存储,不需要更多的数据 类型;2、首页内容不需要持久化到硬盘;3、经过调研,在100k以上的数据中,Memcache性能要高于Redis,对于大数据的存 储,Memcache还是要占优势一些。结合以上三点,最终项目选择使用Memcache。

当然,业务不同选择也各不相同,总之一句话,合理分析合理选择。

    (2)Memcache二三事:

   1、工作原理:

Memcache的工作模式并不复杂,同样也是惯用的C/S模式,分为服务器端和客户端。服务器端启动后就一直保持可用状态,等待客户端的连接。在 Memcache中数据使用key-value的形式进行存储,你可能会问,key如何生成和管理呢?还是具体问题具体分析,生成规则可以根据业务自己来 定,假如你要存用户名,那么就可以用用户id来作为key。key的值通过hash进行转换,根据 hash值把value传递到对应的具体的某个 服务 器上。当需要获取对象数据时,也要对key进行hash,通过获得的值可以确定它被保存在了哪台Server上,然后再向该Server发出请求获取数 据,客户端只需要知道保存hash(key)的值在哪台服务器上就可以了。

说到底,Memcache的工作就是在专门的机器的内存里维护一张巨大的hash表,来存储经常被读写的一些数组与文件。

 2、分布式:

单台Memcache的内存容量的有限的,Memcache可以实现分布式来扩充内存,例如可以由10台8G内存的机器,构成一个80G的内存池, 如果觉得还不够大可以增加机器,这样一个大的内存池,完全可以把大部分热点业务数据保存进去,由内存来阻挡大部分对数据库读的请求,对数据库释放可观的压 力。

它的分布式是怎么实现的呢?个人对这部分内容很好奇。Memcache服务器端仅提供存储功能,等待客户端的连接,分布式主要通过客户端路由来实 现。每次存取某key的value时,通过某种算法把key映射到某台Memcached服务器节点上,因此这个key所有操作都在这个节点上。怎么才能 让数据平均到所有服务器上呢?经常采用的是hash算法。hash后对服务器数目n取模,假设有3台机子,余数为1即分配到第一台机子。

顿时我产生了一个疑问,分布式的机子只要有一个宕机了,服务器数目发生变化,key的分配就会发生根本性的变化,怎样才能使影响最小化 呢?consistent hashing思想应运而生,它指的是服务器节点的hash值配置到一个0到232的圆上,同时求出key的hash值,也映射到圆上,然后顺时针找到的 第一个服务器即为保存数据的服务器。这样一来,增加或减小服务器,只会影响增加或减小点之前的数据分布。我不禁对如此精妙的思想感到万分佩服。

四、后记

对于Memcache,暂时只是将了解的皮毛总结记录下来,希望后续一步一步学习后能持续更新。

分享到:
评论

相关推荐

    memcache安装与基本操作详解

    4. **连接测试**:通过telnet工具连接到本地Memcache服务,端口号为11211: ```bash telnet 127.0.0.1 11211 ``` 若在安装过程中出现缺少文件的情况,可按照以下步骤操作: - **下载扩展**:下载`memcache.dll`...

    Memcache win版 服务器和.net驱动

    **Memcache Win版服务器与.NET驱动详解** Memcache是一款高性能的分布式内存缓存...对于.NET开发者来说,理解如何在Windows环境中配置和使用Memcache,以及选择合适的.NET客户端库,是提升应用性能的关键技能之一。

    PHP7.x 8.0 memcache dll php_memcache.dll

    例如,`$memcache->set('key', 'value')`将键为'key'的值设置为'value'。 4. **性能优化**:memcache的性能受到网络延迟和并发处理能力的影响,合理设置缓存过期时间、选择合适的数据结构以及优化服务器配置都是...

    window 7memcache安装组件

    运行`memcached.exe`,通常选择静默安装,并指定一些配置选项,如端口(默认为11211)、内存分配大小等。安装完成后, Memcache服务会在后台运行,提供缓存服务。 2. **配置Memcache服务**: 打开服务管理器,找到...

    PHP memcache 多版本拓展

    3. **选择合适的版本**: 根据你的PHP版本(7.0、7.1、7.2等)和操作系统架构(x86或x64),选择对应的`php_memcache.dll`文件。 4. **放置到PHP扩展目录**: 将选中的`php_memcache.dll`复制到你的PHP安装目录下的`...

    php5.3的memcache

    由于PHP5.3是非线程安全的,因此在选择Memcache扩展时,需要使用与之匹配的非线程安全版本。描述中提到“好些都是单独版本”,这意味着针对特定PHP版本的Memcache扩展可能需要单独寻找和安装。 3. **安装Memcache...

    spring memcache 集成使用

    - **创建Memcache客户端Bean**:在配置文件中,除了`memcachedPool`之外,还需要创建一个名为`memcachedClient`的Bean来实际操作Memcache。这一步虽然在给出的部分内容中没有完全展示,但通常会涉及使用`...

    php7.2 memcache.dll

    在实际应用中,开发者需要根据他们的PHP环境(是否是线程安全、操作系统位数)选择合适的DLL文件,将其放置在PHP的扩展目录下,并在php.ini配置文件中启用该扩展,以便在PHP脚本中使用Memcache的相关函数,如`...

    memcache监控工具

    - **云服务**:如AWS CloudWatch、Azure Monitor等,为云上部署的Memcache提供集成的监控解决方案。 3. **具体工具介绍** - **mcmon**:一个简单的命令行工具,提供实时查看Memcached服务器的状态,如命中率、...

    memcacheclient-2.0

    总结起来,`memcacheclient-2.0`通过修复关键Bug和性能优化,为开发者提供了一个更加可靠、高效的Memcached C++客户端。它的跨平台支持、丰富的API以及异步I/O模型,使其成为C++应用中使用Memcached的理想选择。对于...

    Memcache缓存技术,Memcache配置说明及其文件,PHP5.2.6版本内存缓存技术配置

    Memcache支持多客户端并发访问,并且通过分布式存储方式处理大量数据,使其成为大型网站和高流量应用的理想选择。 在PHP环境中配置Memcache,首先需要下载并安装Memcache服务器。对于Windows系统,可以找到适用于该...

    windows php7-memcache扩展

    在文件末尾添加以下行,将"your_dll_filename"替换为实际的.dll文件名: ``` extension=your_dll_filename ``` 这行代码告诉PHP加载刚刚放入"ext"目录的.dll文件。 5. **重启Web服务器** 完成上述步骤后,需要...

    memcache实现java客户端

    4. **安装与配置**:在Windows环境下,你需要首先下载并安装Memcache服务器,然后配置服务端口(默认为11211)。确保服务器正常运行后,就可以在Java应用中连接到它。 5. **连接Memcache**:使用Java客户端连接到...

    memcache缓存分布式集群

    7. **部署与配置**:搭建Memcache分布式集群需要配置Magent,包括设置节点列表、选择合适的哈希策略、调整负载均衡参数等。这涉及到网络配置、端口映射以及监控和故障排查等方面的知识。 8. **性能优化**:优化包括...

    windows用php7的memcache所有版本dll

    压缩包文件名称“PHP7-memcache-dll”暗示这是一个包含多种PHP7版本memcache.dll的集合,方便用户根据实际环境选择合适的版本进行安装。 综上所述,这个压缩包是为了在Windows环境中,让使用PHP7的开发者能够便捷地...

    服务器缓存服务memcache

    - **高性能**:Memcache是为速度而设计的,它可以快速地存储和检索数据,因为它直接在内存中操作,无需磁盘I/O。 - **分布式**:Memcache支持多客户端并发访问,可以部署在多台服务器上,实现分布式缓存,有效缓解...

    php 5.3.13memcache和redis扩展

    本文将详述在Windows平台上,针对PHP 5.3.13版本如何安装和使用Memcache与Redis这两种流行的缓存扩展,以提升网站性能。...在实际应用中,选择哪一个取决于你的具体需求,例如数据持久化、数据结构复杂性、性能优化等。

    memcache学习文档 for java demo

    Memcache 学习文档 for Java Demo Memcache 是一套分布式的高速缓存系统,由 LiveJournal 的 Brad Fitzpatrick 开发,但目前被许多网站使用以...但是, Memcache 也存在一些限制,需要根据实际情况进行选择和配置。

    MemCache和Redis缓存介绍

    若追求极致的性能且数据可接受丢失,可以选择MemCache;若需要更丰富的数据结构、持久化和主从复制等高级功能,Redis则是更好的选择。在实际项目中,两者也可结合使用,例如,将Redis作为第一层缓存,MemCache作为二...

Global site tag (gtag.js) - Google Analytics