有些配置是全局的,每个进程都公用的,不会去修改的,现在只能在进程启动事件里去加载一些配置,但是有些配置文件比较大,每个进程都去加载一份,蛮占内存的,所以想问下,框架有没有提供主进程启动事件
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; }
虽然可以,但是我这个配置不会修改的,如果修改了,reload就行,用apcu太麻烦了
把你的这个文件存/dev/shm/
提供一个思路,感觉可以试下,你的需求是:不要每个进程都加载一份配置,太废内存。从入口文件的App::run();中可以看到static::loadAllConfig(['route', 'container']);方法加载了所有的配置项目,你可以尝试重写这个方法,自定义你要加载的配置文件,或者统一从其他地方加载同一份配置
App::run();
static::loadAllConfig(['route', 'container']);
县城才能共享堆,fork会复制堆,并不会省内存
确实。
apcu缓存
虽然可以,但是我这个配置不会修改的,如果修改了,reload就行,用apcu太麻烦了
把你的这个文件存/dev/shm/
提供一个思路,感觉可以试下,你的需求是:不要每个进程都加载一份配置,太废内存。从入口文件的
App::run();
中可以看到static::loadAllConfig(['route', 'container']);
方法加载了所有的配置项目,你可以尝试重写这个方法,自定义你要加载的配置文件,或者统一从其他地方加载同一份配置县城才能共享堆,fork会复制堆,并不会省内存
确实。