这里需要说明,很多开发者觉得 Memcached 是一种分布式 Cache ,但其实 Memcached 服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键作分区存储,而这个区就是 Memcached 服务端的一个或者多个实例,如果将客户端也囊括到 Memcached 中,那么可以部分概念上说是集中式的。集中式的构架,无非两种情况: 1. 节点均衡的网状( JBoss Tree Cache ),利用 JGroup 的多播通信机制来同步数据。 2.Master-Slaves 模式(分布式文件系统),由 Master 来管理 Slave ,如何选择 Slave ,如何迁移数据,都是由 Master 来完成,但是 Master 本身也存在单点问题。
特性、优点和限制
Memory :内存存储,速度快,对于内存的要求高,所缓存的内容非持久化。对于 CPU 要求很低,所以常常采用将 Memcached 服务端和一些 CPU 高消耗 Memory 低消耗应用部属在一起 。
集中式 Cache :避开了分布式 Cache 的传播问题,但是需要非单点保证其可靠性,这需要 cluster 的工作,可以将多个 Memcached 作为一个虚拟的 cluster ,同时对于 cluster 的读写和普通的 memcached 的读写性能没有差别。
分布式扩展: Memcached 的很突出一个优点,就是采用了可分布式扩展的模式。可以将部属在一台机器上的多个 Memcached 服务端或者部署在多个机器上的 Memcached 服务端组成一个虚拟的服务端,对于调用者来说完全屏蔽和透明。提高的单机器的内存利用率 。
Socket 通信:传输内容的大小以及序列化的问题需要注意,虽然 Memcached 通常会被放置到内网作为 Cache, Socket 传输速率应该比较高(当前支持 Tcp 和 udp 两种模式,同时根据客户端的不同可以选择使用 nio 的同步或者异步调用方式),但是序列化成本和带宽成本还是需要注意。这里也提一下序列化,对于对象序列化的性能往往让大家头痛,但是如果对于同一类的 Class 对象序列化传输,第一次序列化时间比较长,后续就会优化,其实也就是说序列化最大的消耗不是对象序列化,而是类的序列化。如果穿过去的只是字符串,那么是最好的,省去了序列化的操作,因此在 Memcached 中保存的往往是较小的内容 。
特殊的内存分配机制:首先要说明的是 Memcached 支持最大的存储对象为 1M 。它的内存分配比较特殊,但是这样的分配方式其实也是对于性能考虑的,简单的分配机制可以更容易回收再分配,节省对于 CPU 的使用(前面的文章中有描述) 。
Cache 机制简单: 首先它没有什么同步,消息分发,两阶段提交等等,它就是一个很简单的 Cache ,把东西放进去,然后可以取出来,如果发现所提供的 Key 没有命中,那么就很直白的告诉你,你这个 key 没有任何对应的东西在缓存里,去数据库或者其他地方取,当你在外部数据源取到的时候,可以直接将内容置入到 Cache 中,这样下次就可以命中了 。这里会提到怎么去同步这些数据,两种方式,一种就是在你修改了以后立刻更新 Cache内容,这样就会即时生效。另一种是说容许有失效时间,到了失效时间,自然就会将内容删除,此时再去去的时候就会命中不了,然后再次将内容置入 Cache ,用来更新内容。后者用在一些时时性要求不高,写入不频繁的情况。
客户端的重要性: 客户端设计的合理十分重要,同时也给使用者提供了很大的空间去扩展和设计客户端来满足各种场景的需要,包括容错,权重,效率,特殊的功能性需求,嵌入框架等等。
几个应用点:小对象的缓存(用户的 token ,权限信息,资源信息)。小的静态资源缓存。 Sql 结果的缓存(这部分用的好,性能提高相当大。
相关推荐
**MemCache和Redis缓存...总之,理解和掌握MemCache和Redis的特性及其使用场景,对于优化应用程序性能、提高用户体验具有重要意义。在开发过程中,根据业务需求合理选择和配置缓存系统,可以极大地提升系统的整体效率。
1. **Value大小限制**:默认最大值为1MB,不适合存储大对象,且序列化和反序列化过程会消耗CPU资源。 2. **数据过期机制**:默认30天过期,且内存不足时会回收最不常使用的数据,需要设计合理的数据更新策略。 在...
5. **存储较大的数据**:Memcached对单个值的最大限制为1MB,而Redis则没有这一限制,因此在需要存储较大值的情况下,Redis是更好的选择。 #### 二、Memcached的优势场景 尽管Redis功能强大,但在某些特定场景下,...
- **优点**:易于学习、跨平台性强、丰富的函数库支持。 - **版本选择**:推荐使用较新的稳定版本,如PHP 7.x系列,以获得更好的性能和安全特性。 4. **MySQL** - **数据库管理系统**:MySQL是最流行的关系型...
不过,它也有一些限制,例如最大键值大小有限制,且不支持过期时间设置和复杂的数据结构。 相比之下,Redis使用单线程模型,通过非阻塞的IO多路复用机制处理请求,保证了高性能和易维护性。Redis支持的数据结构丰富...
4、丰富的特性:可用于缓存、消息、按 key 设置过期时间,过期后将会自动删除。 4. Redis 相比 Memcached 的优势 Redis 相比 Memcached 有哪些优势?1、Memcached 所有的值均是简单的字符串,Redis 作为其替代者,...
3. Memcache 与 Redis 的主要区别在于 Redis 提供更多数据结构和持久化选项,而 Memcache 只支持简单的键值对,且不支持持久化。 二、Redis 数据结构与指令 1. Redis 支持的数据类型包括字符串(String)、哈希(Hash)...
在2011/2版本时,朱晔在其分享中详细介绍了Redis的特性、数据结构、复制和持久化机制。 **优点** 1. **性能**:Redis拥有简洁的网络层实现,可实现每秒数万次的SET和GET操作。 2. **原子性**:提供丰富的原子性API...
此架构充分利用了各组件的优点,提供了高性能、高稳定性的Web服务。 - **Linux**:作为操作系统,提供了稳定可靠的运行环境。 - **Nginx**:作为Web服务器,擅长处理静态资源,支持反向代理,可以提高Web应用的性能...
其优点在于高并发性能好,但缺点是Hessian序列化在某些情况下性能不是最优,且对于复杂对象的支持有限。 2. rmi协议:采用JDK标准的远程方法调用协议实现,要求传输参数和返回参数的对象实现Serializable接口,使用...
- **Memcache/Redis**:使用内存缓存存储,速度快,但数据非持久化,断电或重启后会丢失。 - **Cookie**:将部分信息存储在客户端,但安全性较低,且大小有限制。 9. **HTTP状态码含义及处理**: - **200**:...
- 实现细粒度的权限控制,限制用户对敏感数据的访问。 5. **HTTPS**: - 使用HTTPS协议保护数据传输的安全性。 6. **日志记录**: - 记录系统的操作日志,便于安全审计。 7. **安全框架**: - 使用如Shields...
- **Redisson**:功能更全面,支持高级特性如分布式锁、事件监听器等。但相对而言,其性能略低于Jedis。 #### 19、Redis如何设置密码及验证密码? 通过配置文件中的`requirepass`选项设置密码。客户端连接时需通过...