Home Backend Development PHP Tutorial Code implemented by combining thinkphp with redis and queue

Code implemented by combining thinkphp with redis and queue

Jun 07, 2018 pm 03:08 PM
php redis thinkphp queue

This article mainly introduces the implementation code of thinkphp redis queue. The editor thinks it is quite good. Now I will share it with you and give it as a reference. Let’s follow the editor to take a look.

1. Install Redis and install the corresponding redis extension according to your PHP version (this step is briefly described)

1.1. Install php_igbinary.dll. php_redis.dll extension Here you need to pay attention to your php version as shown in the figure:

 

1.2, add extension=php_igbinary.dll; extension=php_redis.dll to the php.ini file Extension

ok The first step of redis environment construction has been completed. Take a look at phpinfo

The actual use of redis

2.1, the first step is to configure the redis parameters as follows. The default port for redis installation is 6379:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

/* 数据库配置 */

return array(

 &#39;DATA_CACHE_PREFIX&#39; => &#39;Redis_&#39;,//缓存前缀

 &#39;DATA_CACHE_TYPE&#39;=>&#39;Redis&#39;,//默认动态缓存为Redis

 &#39;DATA_CACHE_TIMEOUT&#39; => false,

 &#39;REDIS_RW_SEPARATE&#39; => true, //Redis读写分离 true 开启

 &#39;REDIS_HOST&#39;=>&#39;127.0.0.1&#39;, //redis服务器ip,多台用逗号隔开;读写分离开启时,第一台负责写,其它[随机]负责读;

 &#39;REDIS_PORT&#39;=>&#39;6379&#39;,//端口号

 &#39;REDIS_TIMEOUT&#39;=>&#39;300&#39;,//超时时间

 &#39;REDIS_PERSISTENT&#39;=>false,//是否长连接 false=短连接

 &#39;REDIS_AUTH&#39;=>&#39;&#39;,//AUTH认证密码

);

?>

Copy after login

2.2, redis is used in the actual function:

1

2

3

4

5

6

7

8

9

10

11

/**

  * redis连接

  * @access private

  * @return resource

  * @author bieanju

  */

 private function connectRedis(){

  $redis=new \Redis();

  $redis->connect(C("REDIS_HOST"),C("REDIS_PORT")); 

  return $redis;

 }

Copy after login

2.3, the core of the flash sale The problem is that in the case of large concurrency, the purchase will not exceed the inventory. This is the key to processing, so the idea is to do some basic data generation in the flash sale category in the first step:

1

2

3

4

5

6

7

8

9

10

11

//现在初始化里面定义后边要使用的redis参数

public function _initialize(){

  parent::_initialize();

  $goods_id = I("goods_id",&#39;0&#39;,&#39;intval&#39;); 

  if($goods_id){

   $this->goods_id = $goods_id;

   $this->user_queue_key = "goods_".$goods_id."_user";//当前商品队列的用户情况

   $this->goods_number_key = "goods".$goods_id;//当前商品的库存队列

  }

  $this->user_id = $this->user_id ? $this->user_id : $_SESSION[&#39;uid&#39;]; 

 }

Copy after login

2.4, the second step This is the key point. Before entering the product details page, the user first queues the inventory of the current product and stores it in redis as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

/**

* 访问产品前先将当前产品库存队列

* @access public

* @author bieanju

*/

public function _before_detail(){

 $where[&#39;goods_id&#39;] = $this->goods_id;

 $where[&#39;start_time&#39;] = array("lt",time());

 $where[&#39;end_time&#39;] = array("gt",time());

 $goods = M("goods")->where($where)->field(&#39;goods_num,start_time,end_time&#39;)->find();

 !$goods && $this->error("当前秒杀已结束!");

 if($goods[&#39;goods_num&#39;] > $goods[&#39;order_num&#39;]){

  $redis = $this->connectRedis();

  $getUserRedis = $redis->hGetAll("{$this->user_queue_key}");

  $gnRedis = $redis->llen("{$this->goods_number_key}");

  /* 如果没有会员进来队列库存 */

  if(!count($getUserRedis) && !$gnRedis){  

   for ($i = 0; $i < $goods[&#39;goods_num&#39;]; $i ++) {

    $redis->lpush("{$this->goods_number_key}", 1);

   }

  }

  $resetRedis = $redis->llen("{$this->goods_number_key}");

  if(!$resetRedis){

   $this->error("系统繁忙,请稍后抢购!");

  }

 }else{

  $this->error("当前产品已经秒杀完!");

 }

   

}

Copy after login

The next thing to do is to use ajax to asynchronously process the user's click on the purchase button to meet the conditions. The data enters the purchase queue (if the current user is not in the queue of the current product user, it enters the queue and pops an inventory queue, if it is, it throws,):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

/**

  * 抢购商品前处理当前会员是否进入队列

  * @access public

  * @author bieanju

  */

 public function goods_number_queue(){

  !$this->user_id && $this->ajaxReturn(array("status" => "-1","msg" => "请先登录"));

  $model = M("flash_sale");

  $where[&#39;goods_id&#39;] = $this->goods_id;

  $goods_info = $model->where($where)->find();

  !$goods_info && $this->error("对不起当前商品不存在或已下架!");

  /* redis 队列 */

  $redis = $this->connectRedis();

  /* 进入队列 */

  $goods_number_key = $redis->llen("{$this->goods_number_key}");

  if (!$redis->hGet("{$this->user_queue_key}", $this->user_id)) {

   $goods_number_key = $redis->lpop("{$this->goods_number_key}");

  }

    

  if($goods_number_key){

   // 判断用户是否已在队列

   if (!$redis->hGet("{$this->user_queue_key}", $this->user_id)) {

    // 插入抢购用户信息

    $userinfo = array(

     "user_id" => $this->user_id,

     "create_time" => time()

    );   

    $redis->hSet("{$this->user_queue_key}", $this->user_id, serialize($userinfo));

    $this->ajaxReturn(array("status" => "1"));

   }else{

    $modelCart = M("cart");

    $condition[&#39;user_id&#39;] = $this->user_id;

    $condition[&#39;goods_id&#39;] = $this->goods_id;

    $condition[&#39;prom_type&#39;] = 1;

  $cartlist = $modelCart->where($condition)->count();

    if($cartlist > 0){

     $this->ajaxReturn(array("status" => "2"));

    }else{

      

     $this->ajaxReturn(array("status" => "1"));

      

    }

      

   }

     

  }else{

   $this->ajaxReturn(array("status" => "-1","msg" => "系统繁忙,请重试!"));

  }

 }

Copy after login

Attach a debugging function to delete the specified Queue value:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public function clearRedis(){

  set_time_limit(0);

  $redis = $this->connectRedis();

  //$Rd = $redis->del("{$this->user_queue_key}");

  $Rd = $redis->hDel("goods49",&#39;用户id&#39;&#39;);

  $a = $redis->hGet("goods_49_user", &#39;用户id&#39;);

  if(!$a){

   dump($a);

  }

   

  if($Rd == 0){

   exit("Redis队列已释放!");  

  }

 }

Copy after login

The above is the entire content of this article. I hope it will be helpful to everyone’s study. For more related content, please pay attention to the PHP Chinese website!

Related recommendations:

ThinkPHP and Ajax realize the drop-down menu of secondary linkage

##About the URL routing rules in thinkphp With static settings

The above is the detailed content of Code implemented by combining thinkphp with redis and queue. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1661
14
PHP Tutorial
1261
29
C# Tutorial
1234
24
PHP's Purpose: Building Dynamic Websites PHP's Purpose: Building Dynamic Websites Apr 15, 2025 am 12:18 AM

PHP is used to build dynamic websites, and its core functions include: 1. Generate dynamic content and generate web pages in real time by connecting with the database; 2. Process user interaction and form submissions, verify inputs and respond to operations; 3. Manage sessions and user authentication to provide a personalized experience; 4. Optimize performance and follow best practices to improve website efficiency and security.

PHP and Python: Different Paradigms Explained PHP and Python: Different Paradigms Explained Apr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP: Handling Databases and Server-Side Logic PHP: Handling Databases and Server-Side Logic Apr 15, 2025 am 12:15 AM

PHP uses MySQLi and PDO extensions to interact in database operations and server-side logic processing, and processes server-side logic through functions such as session management. 1) Use MySQLi or PDO to connect to the database and execute SQL queries. 2) Handle HTTP requests and user status through session management and other functions. 3) Use transactions to ensure the atomicity of database operations. 4) Prevent SQL injection, use exception handling and closing connections for debugging. 5) Optimize performance through indexing and cache, write highly readable code and perform error handling.

Choosing Between PHP and Python: A Guide Choosing Between PHP and Python: A Guide Apr 18, 2025 am 12:24 AM

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

Why Use PHP? Advantages and Benefits Explained Why Use PHP? Advantages and Benefits Explained Apr 16, 2025 am 12:16 AM

The core benefits of PHP include ease of learning, strong web development support, rich libraries and frameworks, high performance and scalability, cross-platform compatibility, and cost-effectiveness. 1) Easy to learn and use, suitable for beginners; 2) Good integration with web servers and supports multiple databases; 3) Have powerful frameworks such as Laravel; 4) High performance can be achieved through optimization; 5) Support multiple operating systems; 6) Open source to reduce development costs.

PHP and Python: A Deep Dive into Their History PHP and Python: A Deep Dive into Their History Apr 18, 2025 am 12:25 AM

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

PHP's Impact: Web Development and Beyond PHP's Impact: Web Development and Beyond Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP vs. Python: Use Cases and Applications PHP vs. Python: Use Cases and Applications Apr 17, 2025 am 12:23 AM

PHP is suitable for web development and content management systems, and Python is suitable for data science, machine learning and automation scripts. 1.PHP performs well in building fast and scalable websites and applications and is commonly used in CMS such as WordPress. 2. Python has performed outstandingly in the fields of data science and machine learning, with rich libraries such as NumPy and TensorFlow.

See all articles