php中单例模式封装elasticsearch请求 --- 2022-03-05

需求:
最近在做一个将数据存入mysql的同时,将数据也存入es中,(因数据量太大没法批量导入)
总不能每次存入es的时候就创建es实例 连接一次es吧,所以封装个单例模式是很有必要的,可以减少不必要的开销。

封装实例:

elastic = ClientBuilder::create()->setHosts([self::ESHOSTNAME])->build();
    }
    /**
     * 私有化克隆函数,防止类外克隆对象
     */
    private function __clone ()
    {}
    /**
     * 类的唯一公开静态方法,获取类单例的唯一入口
     *
     * @return object
     */
    public static function getEslasticInstance ()
    {
        if (! (self::$instance instanceof self)) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    /**
     * 获取Es的连接实例
     *
     * @return
     */
    public function getEsConn ()
    {
        return $this->elastic;
    }
    /**
     * 需要在单例切换的时候做清理工作
     */
    public function __destruct ()
    {
        self::$instance->elastic->close();
        self::$instance = NULL;
    }


}

调用的地方:
首先你要引入这个实例

use App\Http\Controllers\Api\Common\ElasticConnect;

调用:

// 聊天数据插入es
$client = ElasticConnect::getEslasticInstance()->getEsConn();

至于调用之后怎么存入es中可以看我其他文章:PHP中使用ElasticSearch(一)

你可能感兴趣的:(php中单例模式封装elasticsearch请求 --- 2022-03-05)