问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php 用 redis做队列 运行过程是什么样的

发布网友 发布时间:2022-04-21 01:57

我来回答

1个回答

热心网友 时间:2022-04-06 01:09

  Reids是一个比较高级的开源key-value存储系统,采用ANSI C实现。其与memcached类似,但是支持持久化数据存储入队操作
  复制代码 代码如下:
  <?php
  $redis = new Redis();
  $redis->connect('127.0.0.1',6379);
  while(True){
  try{
  $value = 'value_'.date('Y-m-d H:i:s');
  $redis->LPUSH('key1',$value);
  sleep(rand()%3);
  echo $value."\n";
  }catch(Exception $e){
  echo $e->getMessage()."\n";
  }
  }
  ?>
  出队操作
  复制代码 代码如下:
  <?php
  $redis = new Redis();
  $redis->pconnect('127.0.0.1',6379);
  while(True){
  try{
  echo $redis->LPOP('key1')."\n";
  }catch(Exception $e){
  echo $e->getMessage()."\n";
  }
  sleep(rand()%3);
  }?>
  如何使用Redis 做队列操作
  Reids是一个比较高级的开源key-value存储系统,采用ANSI C实现。其与memcached类似,但是支持持久化数据存储,同时value支持多种类型:字符串 (同memcached中的value),列表 ,集合 (Set),有序集合 (OrderSet)和Hash 。所有的值类型均支持原子操作,如列表中追加弹出元素,集合中插入移除元素等。Rdids的数据大部分位于内存中,其读写效率非常高,其提供AOF(追加 式操作记录文件)和DUMP(定期数据备份)两种持久化方式。Redis支持自定义的VM(虚拟内存)机制,当数据容量超过内存时,可以将部分Value 存储到文件中。同时Redis支持Master-Slave机制,可以进行数据复制。
  可以把Redis的list结构当队列来用.
  从上面Redis的场景和作用来说,对于我们现在的开发活动,究竟能把Redis引入在那些场景,而不是把这么好的东东演变成“为了使用Redis,而Redis”的惨烈局面呢?当然,具体问题具体分析,这个真的很重要哈。
  缓存?分布式缓存?
  队列?分布式队列?
  某些系统应用(例如,电信、银行和大型互联网应用等)都会使用到,当然,现在大行其道的memcache就是很好的证明;但从某一方面来说,memcache是否能把两张囊括其中,而且能做到更好(没有实际的应用过,所以只是抛出)。但从Redis身上,我就能感觉到,Redis,就能把队列和缓存两张都囊括其中,而且都不会产生并发环境下的困扰,因为Redis中的操作都是原子操作来着。
  至于评论两者的孰好孰坏就免了,存在就是理由,选择适合的就是最好的。
  下面开始玩玩Redis中的队列(分布式)设计YY吧,请大虾们多多指点。
  状况场景:
  现在的项目,都是部署在多个服务器,或者多个IP上,而且前台经由F5分发,所以用户的请求究竟落在那一台的服务器上,是无法确定的。对于项目中,有一秒杀设计,刚开始没有考虑到这种部署,同时也是使用最容易处理的方式,直接给数据库表锁行记录(Oracle上的)。可以说,对于不同的应用部署,而只有一台数据库服务器来说,很“轻松”的就解决了这个并发的问题。所以现在考虑一下,是不是挪到应用上,避免数据库服务器也掺杂到业务上。
  比如,现在有2台应用服务器,1台数据库服务器。想法是,把Redis部署在数据库服务器上,两台服务器在操作并发缓存或者队列时,先从Redis服务器上,取得在两台应用服务器的代理对象,再做入列出列的操作。
  看代码实现(PHP)
  入队列操作文件 list_push.php
  复制代码 代码如下:
  <?php
  $redis = getRedisInstance();//从Redis服务器拿到redis实例$redis->connect('Redis服务器IP', 6379);
  while (true) {
  $redis->lPush('list1', 'A_'.date('Y-m-d H:i:s'));sleep(rand()%3);
  }
  ?>
  执行# php list_push.php &
  出队列操作 list_pop.php文件
  复制代码 代码如下:
  <?php
  $redis = getRedisInstance();//从Redis服务器拿到redis实例$redis->pconnect('Redis服务器IP', 6379);
  while(true) {
  try {
  var_export( $redis->blPop('list1', 10) );} catch(Exception $e) {
  //echo $e;
  }
  }
  实现方法(Python)
  1.入队列(write.py)
  复制代码 代码如下:
  #!/usr/bin/env python
  import time
  from redis import Redis
  redis = Redis(host='127.0.0.1', port=6379)while True:
  now = time.strftime("%Y/%m/%d %H:%M:%S")
  redis.lpush('test_queue', now)
  time.sleep(1)
  2.出队列(read.py)
  复制代码 代码如下:
  #!/usr/bin/env python
  import sys
  from redis import Redis
  redis = Redis(host='127.0.0.1', port=6379)while True:
  res = redis.rpop('test_queue')
  if res == None:
  pass
  else:
  print str(res)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蛋上有疙瘩怎么回事 姻缘测试:属虎和属兔的合不合 婚姻怎么样 电脑能上网手机连上wifi不能上网? 为什么手机连上电脑WIFI却上不了网呢 win7开机黑屏安全模式正常是怎么回事 win7开机黑屏安全模式正常问题解 ... 电脑开机安全模式能进电脑可以进安全模式但正常系统为什么进不去 ...进笔记本电脑安全模式能开机但是正常模式开机黑屏 电脑开机黑屏但安全模式能进去电脑开机一启动系统就黑屏进安全系统正常... 12月份女生面试应该穿什么? 我想去哈尔滨玩几天,大概在十二月中旬,穿什么才不会被冻着?大概需要多... thinkphp 数据缓存是否校验缓存是什么意思 PHP-php 怎么实现消息队列 PHP中如何使用数组实现队列和堆栈 请教php事务里可以用队列么 php 为什么要使用memcache 队列 404 Not Found php memcache队列有什么用 在PHP中如何使用消息列队 php 队列是什么? 滴答滴答游戏怎么邀请好友 澳洲签证办理需要提供护照原件吗 两种电子签证都不用递交护照的是吗 澳大利亚签证一年多次往返的问题 404 Not Found 持有澳洲的学生电子签证现在还需要给护照贴签么 换完新护照,对澳洲电子签证有影响吗? 终于换成电子护照了,这样签证是不是更好拿了 澳大利亚电子签证 护照过期 怎么办 澳大利亚一年多次签证,换护照后可以继续使用吗 澳洲电子签证可以直接拿护照出境吗 php怎么使用队列来处理批量采集 PHP用什么来快速消费队列 php redis消息队列怎么用 用PHP写的这个双向队列应该怎么使用 php消息队列怎么做 PHP应用 通常使用什么应用做 消息队列 的 大型的 PHP应用 通常使用什么应用做 消息队列 的 大型的PHP应用通常使用什么应用做消息队列的 laravel和php哪个好? 悟空奇遇记电影是不是小孩子看的动画片? 取经前孙悟空的奇遇,遇到了什么人,发生了什么事 二年级作文孙悟空在当今世界的种种奇遇 西游记女儿国奇遇内容概括 展开想象写作文孙悟空他来到当今世界的种种奇遇… 孙悟空大战武松奇遇作文 孙悟空来到当今世界的种种奇遇二年级作文一百字 有什么神仙敢揭穿菩提祖师藏在天庭的事情? 悟空奇遇记里面的插曲玉皇大帝呀叫什么名字? 悟空奇遇记在建文新影城买学生票要多少钱? 孙悟空遇到刘备会发生怎样的奇遇作文