今日由于公司的需求,通过memcached 实现了一个基于memcached 的分布式 queue。
简单的数据结构:
构造此queue 非常简单,首先继承java的queue接口。
分布式队列实际商维护头指针,尾巴指针和具体存储空间。
使用一个prefix作为指向memcached存放queue数据额结构的字符串。
在memcached 开辟两个存储空间, tail变量(代表队尾)和head变量(带包队头)。
两个变量通过 prefix+tail 和prefix+head 指向变量在memcached中的存储区域。
实际的存储空间就是 prefix+index。
通过memcached incr 先自增指针位置再添加数据。
实际存在的问题:
实际上当两个运行在不同物理机上的实例会同时访问同一个分布式队列。
所以需要有一个锁的机制完成两个运行在不同物理机上的锁操作。
其实具体通过 memcached 的add操作完成和java 的sleep完成。
当add操作失败时,就sleep随机一段时间。为了防止读取或写入进程异常而导致所不能释放的问题。add操作应该加上超时的限制。再次我设置为1秒,即add('prefix_lock',1,'prefix_lock')
总的来说要在memcached 上实现一个队列不困难。
分享到:
相关推荐
Memcached Go Queue, 简称mgq, 是一个用Go语言写的,基于memcached协议的消息队列。其父亲mcq是最早应用于weibo的基础消息中间件,有着高性能,解耦的优点,使得其广泛应用于微博
该文章介绍了一个使用PHP编写的基于Memcache的队列(Queue)实现。Memcache是一个广泛使用的分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。在这个实现中,作者通过创建一个名为MQ的类,实现了...
4. Struts2.0:Struts2 是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,用于简化Java Web应用的开发。它提供了拦截器、结果类型、动态方法调用等功能,使得动作控制更加灵活,同时支持AJAX和RESTful...
尽管两者都可以与Memcached服务器交互,但Memcached(注意首字母大写)扩展是基于C编写的libmemcached库,因此在性能和功能上更为优越,推荐使用PHP Memcached扩展。 在ThinkPHP 3.2.2版本及以上,框架已经内置了对...
以上就是 Redis 的一些核心知识点,包括与 Memcached 的对比、主从复制、集群模式、分布式锁的实现、持久化机制以及过期策略和 LRU 算法。这些内容是面试中常见的话题,理解并掌握它们对于提升 Redis 使用技能和解决...
这通常通过消息队列(Message Queue,如RabbitMQ、Kafka等)实现,它们提供可靠的消息传递和容错能力。 结合这些特性,这个电商系统能够在处理大量并发请求时保持高效,并在出现网络问题时自我修复,确保用户在进行...
- **Set**:如`HashSet`(基于哈希表实现的集合,元素不重复且无序)、`TreeSet`(基于红黑树实现的集合,元素不重复且有序)等。 - **Queue**:如`LinkedList`(既可以用作队列,也可以用作栈)等。 - **Map**:如`...
在IT行业中,消息队列(Message Queue)是用于在分布式系统中解耦组件、提高处理效率和实现异步通信的关键技术。本测试报告涉及到多个消息队列服务的安装部署及性能测试,包括ActiveMQ、HTTPSQS、Kestrel和MemcacheQ...
- PotterMore:为了实现水平扩展,PotterMore可能采用了数据切分策略,如基于用户ID的哈希分片,以分散负载并保持数据一致性。 - 网络媒体门户:选择Azure Cache而非Memcached,可能是由于Azure Cache提供了更全面...
博客主要以长篇内容的形式存在,用户可以发表、浏览和留言,其背后的技术通常基于LAMP(Linux, Apache, MySQL, PHP)架构,使用主从复制的MySQL数据库、Memcached缓存服务和CDN(内容分发网络)来支持高可用性和性能...
在.NET中,可以使用各种技术实现,如使用内存缓存(如Redis或Memcached)来快速传递消息,或者使用高性能的消息中间件(如RabbitMQ或Apache Kafka)。这些中间件支持高并发和低延迟,确保消息能够迅速地从发布者传递...
- 使用 `Queue::push()` 将任务推入队列,`Queue::listen()` 或 `Queue::daemon()` 处理队列。 14. **缓存(Cache)** - Laravel 提供了多种缓存驱动,如文件、数据库、Memcached、Redis 等。 - 使用 `Cache::...
随着时间的发展,Facebook引入了“BigPipe”技术,它将网页加载分成了多个小部分,实现了按需加载,显著提高了页面加载速度。此外,Facebook还广泛使用了分布式缓存系统Memcached和NoSQL数据库HBase,以及图数据库...
5. **Hazelcast**:一个开源的内存数据网格,提供分布式缓存、Map、Queue、Topic等功能。 缓存框架的选择应考虑以下几个因素: 1. **性能**:缓存的读写速度和响应时间。 2. **容量管理**:如何处理缓存满的情况,...
Kestrel基于事件驱动的非阻塞I/O模型,支持多种协议,如Simple Queue Protocol (SQP)和Memcache Text Protocol。这种设计使得Kestrel能够高效地处理大量消息,并且可以与其他服务无缝集成,为实时数据处理和流处理...
23. **权限控制类**:如`AccessControl`,实现基于角色的访问控制(RBAC)。 24. **翻译类**:如`Translator`,集成多种语言包,实现多语言支持。 25. **路由类**:如`Router`,根据URL路由到对应的控制器和方法。...
21. **路径基于的路由**:Application Load Balancer (ALB) 支持基于URL路径的路由,实现精细化的流量控制。 22. **健康检查和自动恢复**:如果Amazon EC2实例未通过健康检查,Auto Scaling Group可以配置与ELB健康...
同时,使用异步处理机制,如消息队列(Message Queue),将部分高耗时的操作从主线程中分离出来,确保核心业务流程的流畅进行。 大数据缓存策略的应用也是关键。在“惠民抢口罩”活动中,大量的用户数据和操作需要...
LinkedIn的通信系统可能基于微服务架构,将复杂应用分解为一组小而自治的服务,每个服务专注于特定业务功能。这种架构有助于快速开发、部署和扩展,同时降低系统间的耦合度。 **3. 消息队列** 在LinkedIn的通信中,...
本文将深入探讨这一主题,基于提供的“分布式模块间通信方法.pdf”文件内容,来阐述其中的关键知识点。 分布式系统是由多个独立的硬件或软件组件组成的,这些组件通过网络连接并协同工作,共同实现一个复杂的功能。...