redis中list模拟案例-消息队列

redis 数据类型:字符串string、list、set、zset、hash

主要的是list消息队列

消息队列的概念:先进先出

<?php
//echo phpinfo();
ini_set(‘display_errors‘,‘On‘);
error_reporting(E_ALL);
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect(‘127.0.0.1‘, 6379);
print_r($redis);
echo "<br/>Connection to server sucessfully<br/>";
//查看服务是否运行
echo "Server is running: " . $redis->ping();
echo ‘<hr/>‘;
//list  消息队列
/*echo $redis->llen(‘name‘);
echo $redis->lpop(‘name‘);
echo $redis->llen(‘name‘);*/

//高压力情况,不能高压力情况
for($i=0;$i<20;$i++){
    $uid = rand(100,3000);

$redis_name = ‘miaosha‘;
    //$uid = $_GET[‘uid‘];
    $num = 10;

if($redis->llen($redis_name)<10){
        $redis->rpush($redis_name,$uid.‘%‘.microtime());
        echo $uid.‘秒杀成功<br/>‘;
    }else{
        echo ‘秒杀失败‘;
    }
}
$redis->close();
?>

<?php
ini_set(‘display_errors‘,‘On‘);
error_reporting(E_ALL);
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect(‘127.0.0.1‘, 6379);
ini_set("max_execution_time", 100);
//$db = DB::getLntance();
$redis_name = ‘miaosha‘;
//死循环
$i=0;
while($i<15){
    $i++;
    //从队列最左侧取出一个值来,然后判断这个值是否存在
    $user = $redis->lpop($redis_name);
    //var_dump($user);exit;
    if(!$user || $user==‘nil‘){
        sleep(2);
        continue;
    }
    //切割出时间,uid,保存数据库中
    $user_arr = explode(‘%‘,$user);
    $arr = [
            ‘uid‘ => $user_arr[0],
            ‘time_stamp‘ => $user_arr[1]
        ];
    $_user[] = $arr;
    //数据库插入的失败的时候回滚机制
    if(!$_user){
        $redis->rpush($redis_name,$user);
    }
    sleep(2);
}

var_dump($_user);
//释放redis
$redis->close();

?>

时间: 2024-09-29 22:25:55

redis中list模拟案例-消息队列的相关文章

用redis实现支持优先级的消息队列

用redis实现支持优先级的消息队列 为什么需要消息队列 系统中引入消息队列机制是对系统一个非常大的改善.例如一个web系统中,用户做了某项操作后需要发送邮件通知到用户邮箱中.你可以使用同步方式让用户等待邮件发送完成后反馈给用户,但是这样可能会因为网络的不确定性造成用户长时间的等待从而影响用户体验. 有些场景下是不可能使用同步方式等待完成的,那些需要后台花费大量时间的操作.例如极端例子,一个在线编译系统任务,后台编译完成需要30分钟.这种场景的设计不可能同步等待后在回馈,必须是先反馈用户随后异步

利用redis实现带优先级的消息队列

前言 以前一直有使用celery的优先级机制(基于redis的任务队列),一直很好奇它的实现机制,在查阅了部分资料后,决定写这篇文章,作为总结. 1. 利用Sorted Set 实现 使用Sorted Set 做优先级队列最大的优点是直观明了. ZADD key score member [[score member] [score member] ...] score 作为优先级,member 作为相应的任务 在Sorted Set 中,score 小的,位于优先级队列的头部,即优先级较高 由

android 中使用View的消息队列api更新数据

基本上只要继承自View的控件,都具有消息队列或者handler的一些处理方法,下面是一些handler方法以及被View封装了的方法,其底层用的基本都是handler的api. 我么开一下postDelay的定义 android.view.View  public boolean postDelayed(Runnable action, long delayMillis) {         final AttachInfo attachInfo = mAttachInfo;         

SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> 创建一个配置队列类 JMSConfiguration.java package com.wangx.boot.util; impo

PHP中使用ActiveMQ实现消息队列

前面我们已经学了如何部署ActiveMQ, 我们知道通过ActiveMQ的一个管理后台可以查看任务队列. 今天 用PHP来操作ActiveMQ,我们可以借助一个第三方扩展. 下载: composer require fusesource/stomp-php:2.0.* 然后新建test.php: <?php require __DIR__.'/vendor/autoload.php'; //引入自动加载的文件 $connect = new \FuseSource\Stomp\Stomp('tcp

消息队列介绍、RabbitMQ&amp;Redis的重点介绍与简单应用

消息队列介绍.RabbitMQ.Redis 一.什么是消息队列 这个概念我们百度Google能查到一大堆文章,所以我就通俗的讲下消息队列的基本思路. 还记得原来写过Queue的文章,不管是线程queue还是进程queue他都是一种消息队列.他都是基于生产者消费者模型来处理消息. Python中的进程queue,是用于父进程与子进程,或者同属于一个父进程下的多个子进程之间进行信息交互.注意这种queue只能在同一个python程序下才能用,如果两个python程序,或者Python和别的什么程序,

基于Redis实现分布式消息队列(3)

1.Redis是什么鬼? Redis是一个简单的,高效的,分布式的,基于内存的缓存工具. 假设好服务器后,通过网络连接(类似数据库),提供Key-Value式缓存服务. 简单,是Redis突出的特色. 简单可以保证核心功能的稳定和优异. 2.性能 性能方面:Redis是足够高效的. 和Memecached对比,在数据量较小大情况下,Redis性能更优秀. 数据量大到一定程度的时候,Memecached性能稍好. 简单结论:但总体上讲Redis性能已经足够好. // Ref: Redis性能测试

jedis实现redis的消息队列、发布对象消息、字节数组与字符串相互转换

redis支持发布/订阅的消息队列机制,jedis提供了java访问redis的客户端,本文将描述如何用jedis实现简单的消息队列,并传输对象. redis支持发布.订阅的功能,基本的命令有publish.subscribe等.在jedis中,有对应的java方法,并且只能发布字符串消息.为了传输对象,需要将对象进行序列化,并封装成字符串进行处理.将对象序列化后,只能成为字节流,如何封装成字符串是一个难点,具体可参考下面的代码. 实现三个类,一个对应publish.一个对应subscribe.

[转载] 基于Redis实现分布式消息队列

转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异. 举个例子:业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力. 再举个例子:调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送. 再举个栗子,交互模块5:00到24:00和电商系统联通,和内部ERP断开.