美文网首页
12.事件系统、缓存系统

12.事件系统、缓存系统

作者: darren911 | 来源:发表于2019-12-18 00:38 被阅读0次

事件系统

事件功能实际上更倾向是一种管理手段,并不是没了它我们就做不到了,只是它能让我们做得更加好,更加优雅;它首先有一个总的目录,然后我们可以宏观的看到所有的事件,而不需要每次都要打开控制器的方法我们才能知道注册后会发生什么。
1.事件是一种常见的观察者模式应用。简单的来说,就是当... 干... (event ... listeners...)
2.先注册再生成

Provider/EventServiceProvider.php
建议使用自动注册
php artisan event:generate

3.放置 event 和 listener 文件的位置分别是:

app/Events
app/Listeners

4.使用事件系统的好处:对于程序员来说,事件可以让 Controller 变得非常简洁,解耦,可更简洁的维护。
举个🌰:
创建订单,订单信息记录到数据库;发送邮件或者短信给用户订单生成到结果

    public function addOrder(Request $request){
        //生成订单
        $order = $this->createOrder();
        //发送短信
        $this->sendEmail();
        ...
    }
    protected function createOrder(){
        // 生成订单逻辑
    }
    protected function sendEmail(){
        //发送邮件逻辑
    }
    protected function sendSms(){
        //发送短信逻辑
    }

一般性的做法 同步执行 必须一个执行完成后再执行另外一个,而且代码的复用太低 如果有其他业务需求也需要发送 邮件和短信 就必须重新写一套。

事件系统操作:

1.controller

    public function addOrder(Request $request){
        //生成订单
        $order = $this->createOrder();
        //订单事件
        event(new OrderEvent($order));
    }

2.event

class OrderEvent
{
    //use Dispatchable, InteractsWithSockets, SerializesModels;
    public $order;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($order)
    {
        //
        $this->order = $order;
    }
}
  1. listeners 各种监听类
class SendSms {
    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle(OrderEvent $event)
    {
        //
        $order = $event->order;
        //执行发送短信的业务逻辑了
    }
}
//如果implements ShouldQueue这个接口的话就会异步队列执行,如果去掉的话就是同步执行。(前提是配置队列启动一个队列监听)
class SendEmail implements ShouldQueue{
    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle(OrderEvent $event)
    {
        //
        $order = $event->order;
        //执行发送邮件的业务逻辑了
    }
}

相关文章

  • 12.事件系统、缓存系统

    事件系统 事件功能实际上更倾向是一种管理手段,并不是没了它我们就做不到了,只是它能让我们做得更加好,更加优雅;它首...

  • Laravel 缓存系统及事件系统

    缓存系统 Laravel 为各种后端缓存提供了丰富而统一的 API,其配置信息位于 config/cache.ph...

  • 使用Guava RateLimiter限流以及源码解析

    前言 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理...

  • Guava RateLimiter源码解析

    前言 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理...

  • 高并发系统的限流算法与实现

    开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。 缓存:缓存的目的是提升系统访问速度和增大系统处理容量。...

  • 限流

    在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存:缓存的目的是提升系统访问速度和增大系统处理容量降级...

  • Java应用限流

    在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流:缓存:缓存的目的是提升系统访问速度和增大系统处理容量...

  • 应用级缓存的工作流程以及Spring Boot缓存原理分析

    缓存是解决高并发、大流量数据操作性能问题的利器。缓存一般分为系统级缓存和应用级缓存,系统级缓存是由操作系统提供的缓...

  • 常用缓存系统使用经验总结

    缓存系统是提升系统性能和处理能力的利器,常用的缓存系统各自的特性和使用场景有所不同,这里总结下常用缓存系统时需要关...

  • 缓存系统

    2020.3.11追加如果有多个缓存需要CacheManager 1. 缓存系统设计逻辑 按照数据表来分,一个数据...

网友评论

      本文标题:12.事件系统、缓存系统

      本文链接:https://www.haomeiwen.com/subject/zyfynctx.html