php+redis+tp6指令,用延迟队列,实现取消未支付订单功能

需求:windows环境中实现:订单在规定时间内未支付,则修改订单状态为作废。

思路:

1.在生成订单时,把订单号(order_id)、当前时间(时间戳)+设置的过期时间,这两个参数,存入到redis的有序集合里面。score 存时间戳,value 存订单号(order_id)

2.创建指令,定期执行,获取redis有序集合里面的内容,只获取一条。由于排序特性,始终获取到的是score最小的一条。

3.与当前时间作判断,小于当前时间,说明已过期了,修改数据库订单状态,并在reids中删除该条数据。

实现代码:

添加redis有序集合代码:

 

修改过期订单:

1.首先查看自定义指令的官方文档,并按照官方文档所说,实现看一下效果:https://www.kancloud.cn/manual/thinkphp6_0/1037651

2.用phpstorm 打开cmd,输入命令:php think make:command "app\api\command\Order",即在app\api下生成目录command和Order文件

或者在项目根目录,的路径上,直接输入cmd,都可以打开

 

3.配置指令,在Order文件中添加上自定义的操过期订单的代码

4.处理过期订单的方法:注意获取的范围(0~time()),获取0到当前时间的数据。

5.测试,生成个订单,然后执行指令。把过期时间设置为1分钟。然后再随便添加个数据,看能否被删除。

 

再次测试:

 

至此,需求就被实现了。

当然,后期数据量大了,总是处理不过来过期订单,那就建立多个指令,运行多个指令。获取把循环时间调小。但还是有需要优化的地方,比如,运行了50个指令,这个时候,就需要,用redis的锁以及数据库的锁来处理有序集合了,避免发生冲突。

参考资料:

https://www.kancloud.cn/manual/thinkphp6_0/1037651

https://www.runoob.com/redis/sorted-sets-zrangebyscore.html

http://doc.redisfans.com/

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TP6(ThinkPHP 6)是一个基于PHP的开源框架,它提供了丰富的功能和工具来简化Web应用程序的开发过程。在TP6中使用Redis可以提高应用程序的性能和可扩展性。下面是一个演示如何在TP6中使用Redis的例子: 首先,确保你已经安装了RedisPHPRedis扩展。然后,在TP6的配置文件`config/cache.php`中配置Redis连接信息,例如: ```php return [ // 默认缓存驱动 'default' => env('cache.driver', 'redis'), // 缓存连接方式配置 'stores' => [ // Redis缓存连接配置 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', // 端口号 'port' => 6379, // 密码 'password' => '', // 缓存前缀 'prefix' => '', // 缓存有效期 0表示永久缓存 'expire' => 0, ], ], ]; ``` 接下来,在控制器中使用Redis进行缓存操作。例如,我们可以在一个控制器方法中设置和获取缓存: ```php <?php namespace app\controller; use think\facade\Cache; class Index { public function index() { // 设置缓存 Cache::store('redis')->set('name', 'John Doe'); // 获取缓存 $name = Cache::store('redis')->get('name'); return 'Hello, ' . $name; } } ``` 在上面的例子中,我们使用`Cache::store('redis')`来指定使用Redis作为缓存驱动。然后,我们可以使用`set`方法设置缓存,使用`get`方法获取缓存。 请注意,以上只是一个简单的示例,你可以根据自己的需求在TP6中使用更多的Redis功能和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值