框架有提供主进程启动事件吗

pengzhen

有些配置是全局的,每个进程都公用的,不会去修改的,现在只能在进程启动事件里去加载一些配置,但是有些配置文件比较大,每个进程都去加载一份,蛮占内存的,所以想问下,框架有没有提供主进程启动事件

252 4 0
4个回答

army

apcu缓存

        // 禁运区域配置
        $confCityCheck = ArcCache::get('CONF:INIT:OFFREGION:CHECK:' . $key);
        if ($confCityCheck === null) {
            $confOffRegionArr = ArcCache::get('CONF:INIT:OFFREGION:DATA');
            if ($confOffRegionArr === null) {
                $confOffRegionList = [];
                $confOffRegionDb = DB::find('config_off_region', array(), array('id' => 1), 1, 1000);
                if ($confOffRegionDb) {
                    foreach ($confOffRegionDb as $v) {
                        $city = (int)$v['city'];
                        $confOffRegionList[$city][] = array(
                            'id'     => (int)$v['id'],
                            'city'   => $city,         // 城市编号 100
                            'title'  => $v['title'],
                            'region' => !empty($v['region']) ? explode(',', $v['region']) : [],
                        );
                    }
                }
                $confOffRegionArr = $confOffRegionList;
                //将conf存入缓存,以免其他多个进程同时从数据库获取
                ArcCache::set('CONF:INIT:OFFREGION:DATA', $confOffRegionArr, 30);
            }
            ArcCache::set('CONF:INIT:OFFREGION:CHECK:' . $key, 1);
            self::$ConfOffRegion = $confOffRegionArr;
        }
  • pengzhen 4天前

    虽然可以,但是我这个配置不会修改的,如果修改了,reload就行,用apcu太麻烦了

nitron

把你的这个文件存/dev/shm/

  • 暂无评论
Jinson

提供一个思路,感觉可以试下,你的需求是:不要每个进程都加载一份配置,太废内存。从入口文件的App::run();中可以看到static::loadAllConfig(['route', 'container']);方法加载了所有的配置项目,你可以尝试重写这个方法,自定义你要加载的配置文件,或者统一从其他地方加载同一份配置

  • 暂无评论
胡桃

县城才能共享堆,fork会复制堆,并不会省内存

🔝