本文章来给各位同学介绍使用memcache构建简单的内存消息队列,用一个比较不错的实例来给大家介绍,希望此方法对大家有帮助哦。

memcache功能太简单了,只能 set get 和delete, 只能保存key-value的数据, 不能保存列表。 当然也可以把一个列表给序列化了之后存进memcache, 但是会存在并发的问题, 每次保存数据(插队或者出队)的时候都要给数据加锁,在高并发的情况下很难保证数据的一致性!

但是memcache 有一个 increment 的操作,为某一个键对应的值进行加1(实际上是加法运算, 默认加1), 这个操作是原子性的, 所以我们可以通过这个来维护一个自增的id来保证数据的唯一。 再加上两个指针来维护起始键值, 这样就构建了一个简单的但相队列!!

上代码:

代码如下

复制代码

关于memcached的一些事情

内存存储方式(slab allocator)

memcached的数据存储方式为slab allocator即数据分片, 在服务启动的时候先把内存分成不同大小的 chunk, 当有数据过来的时候来存储到一个合适大小的chunk当中

之前版本是直接分配内存, 导致内存碎片 随机查找等问题。。。

数据过期删除机制

memcached在数据过期之后,并不会去删除数据, 但是不能访问过期的数据, 过期数据占用的空间会被重复利用

memcached采用lazy expiration.不会去主动扫描一个数据项是否过期, 而是在数据get的时候判断是否已经过期.

删除的算法是LRU(Least Recently Used) , 优先删除最近使用较少的数据

memcached的分布式机制

虽说memcached是一个分布式的缓存, 但是memcached本身并没有实现任何分布式的机制, 分布式的功能主要是由客户端来实现的。

程序通过addserver增加多个memcahced服务到客户端(memcache扩展), 在存取数据之前,客户端会先通过hash算法得到存储数据的节点, 然后再去存取数据, 当其中一台memcached服务器挂掉或者新增一台memcached服务器, hash算法得到的存储数据的节点就会变化, 去新的服务器上去存取数据。

http://www.bkjia.com/PHPjc/632905.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632905.htmlTechArticle本文章来给各位同学介绍使用memcache构建简单的内存消息队列,用一个比较不错的实例来给大家介绍,希望此方法对大家有帮助哦。 memcache功...

php 内存队列,memcache构建简单的内存消息队列_PHP教程相关推荐

  1. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  2. 消息队列-简单介绍Java消息队列,什么是消息队列,作用以及常见消息队列

    天天说队列, 项目请求数据不能及时处理时,就一言不合通过队列啊, 心中那个是妈卖批,那么到底什么队列呢,队列有到底运用于哪些运用场景呢; 先说说应用场景吧, 不知道有啥作用,看多了含义,原理什么的还是 ...

  3. 消息队列系列二(IOT中消息队列的应用)

    许多消息队列旨在为您的应用程序提供轻量级的发布/订阅消息传输协议.为什么以及何时在您的物联网项目中使用消息队列? 考虑温室中的温度传感器,它测量温度.您的应用程序可以在15分钟的时间间隔内(每天月96 ...

  4. 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列

    [重难点][RabbitMQ 01]消息队列的作用.主流的消息队列.RabbitMQ 基于什么传输消息.RabbitMQ 模型架构.死信队列和延迟队列 文章目录 [重难点][RabbitMQ 01]消 ...

  5. 【消息队列笔记】chp2-如何选择消息队列

    一.选择消息队列的基本标准 不同的消息队列产品在功能和特性方面是各有优劣的,但是我们在选择的时候应尽量保证一个通用的最低标准. 1.必须是开源的产品 开源很重要,如果在使用该产品时遇到了影响业务的bu ...

  6. 基于TableStore构建简易海量Topic消息队列

    摘要: 前言 消息队列,通常有两种场景,一种是发布者订阅模式,一种是生产者消费者模式.发布者订阅模式,即发布者生产消息放入队列,多个监听的消费者都会收到同一份消息,也就是每个消费者收到的消息是一样的. ...

  7. php-resque 简单的php消息队列

    摘要: 消息队列是个好东西,各种×××MQ很多.然而看一下它们的文档,你得吓尿,什么鬼,我只是想用它触发个短信接口而已. 幸好也有简单的.这次是php-resque 安装 首先这货需要在linux下跑 ...

  8. 深入理解分布式技术 - 构建高可用的消息队列

    文章目录 概述 Kafka 的副本机制 Broker 和 Partition 的关系 Replication 之间如何同步数据 Replication 分配 Leader Replication 如何 ...

  9. rabbitmq 消费端代码获取队列名称_C#调用RabbitMQ实现消息队列的示例代码

    前言 我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的. 所以,这篇文章我们从头开始学习RabbitMq,真正的从头开始. 关于消息队列 其实消息队 ...

最新文章

  1. mybatis的一对一 一对多 多对多
  2. 去除cpp中注释的小程序
  3. C#验证 中国 身份证 代码
  4. 经典面试题(14):关于delete 操作符,以下代码将输出什么?
  5. 第31课 3721数-2021.10.30 《小学生C++趣味编程》
  6. zipkin brave mysql_Zipkin和Brave实现http服务调用的跟踪
  7. 一、开始动手开发网球平台
  8. java迭代是引用_在迭代递归结构时无法获得可变引用:不能一次多次借用可变引用...
  9. 活动回顾 | 智慧城市的发展趋势与挑战
  10. Install Eclipse 3.7 Indigo and configure Eclipse
  11. CVPR学习(五):CVPR2019-人体姿态
  12. Outlook设置签名/设置邮件模板
  13. 【新模板推荐】目标军令状、假期通知书…签名确认仪式满满
  14. 集合20210801
  15. TCP协议接入电信物联网AEP(Aiot)新平台
  16. idea svn update 时不弹出选择分支的对话框,don't show this dialog in the furture解决方案
  17. 学生选课系统C语言系统的说明文档,C语言学生选课系统(代码)
  18. Brackets sequence UVA - 1626(区间DP)
  19. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树形动态规划)
  20. 计算机启动时都发生了什么?

热门文章

  1. 带你体验云原生场景下 Serverless 应用编程模型
  2. Dataphin功能:集成——如何将业务系统的数据抽取汇聚到数据中台
  3. 终于要跟大家见面了,Flink 面试指南
  4. Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
  5. IP应用加速技术详解:如何提升动静混合站点的访问速率?
  6. 阿里云上Kubernetes集群联邦 1
  7. 最新光子计算处理器面世:单个光子芯片集成超万个光子器件,频率达1GHz
  8. 云原生,智慧营销破圈新利器
  9. 数字时代企业信息安全如何保障? VMware原生安全前来“保驾护航”
  10. 云+X案例展 | 金融类:荣之联助力君康人寿构建新一代数据中心