博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yaconf – 一个高性能的配置管理扩展
阅读量:3725 次
发布时间:2019-05-22

本文共 2906 字,大约阅读时间需要 9 分钟。

这个是鸟哥开发的一个管理配置文件的php插件

地址:

介绍,直接哪来点用吧,反正自己体会就好了

项目地址代码已经提交到了Github: https://github.com/laruence/yaconf , 欢迎大家提交Issue简介首先说说, 这个是干啥的.1. 我见过很多的项目中, 用PHP文件做配置的, 一个config目录下可能有十几个甚至数十个.php配置文件, 里面都是各种各样的array, 还有甚者会把一些词典文件(比如中文/英文对照)也放到配置中去. 这就导致配置文件的解析耗费了很大的性能(诚然, 用了opcache能好点, 但是实际上还是有执行的过程).2. 除了PHP的, 还有用json的, yaml的, 一个共同的特点就是这些配置的可读性比较差. 另外, 他们也都要runtime解析.3. config目录往往和代码在一起, 首先会有安全隐患(配置中往往有敏感信息), 其次如果配置和代码属于一个项目, 这就会导致配置的修改也要走代码上线的流程.4. 一些资源配置文件, 比如mysql/memcache的配置信息, 这些内容本来是应该对开发透明的, 运维直接负责即可. 但是放到了代码中就会导致, 运维如果要发起一些变更, 也要开发配合修改配置文件上线.所以, Yaconf就是为了解决这些问题而生的一个工具.1. 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.2. 它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.3. 所有的配置内容都是immutable的, 这就可以借助于Fork的COW, 降低内存占用, 并且在访问配置的时候, 几乎不需要任何的内存Copy, 也不会有无谓的引用计数增减4. 最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.5. 它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).6. 它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.7. 最重要的是, 它很简单.

我就说下安装过程吧:

好吧,人家说的挺清楚的,推荐使用

安装在Linux中编译YaconfYaconf是PECL扩展,因此您可以通过以下方式简单地安装它:$pecl install yaconf或者您可以自己编译:$ /path/to/php7/bin/phpize$ ./configure --with-php-config=/path/to/php7/bin/php-config$ make && make install运行时配置yaconf.directory  Path to directory which all ini configuration files are placed inyaconf.check_delay  In which interval Yaconf will detect ini file's change(by directory's mtime),  if it is set to zero, you have to restart php to reloading configurations.蜜蜂混合Yaconf :: get(字符串$ name,mixed $ default = NULL)bool Yaconf :: has(string $ name)例目录假设我们将所有配置文件放在/ tmp / yaconf /中,因此我们将其添加到php.ini中yaconf.directory=/tmp/yaconfINI文件假设/ tmp / yaconf中有两个文件foo.ininame = “ yaconf ” year = 2015features [] = “ fast ” features.1 = “ light ” features.plus = “ zero-copy ” features.constant = PHP_VERSION features.env = $ {HOME}和bar.ini[base] parent = “ yaconf ” children = “ NULL ”[孩子:基地] 孩子 = “集”跑让我们访问配置foo.iniPHP7  - [R  '的var_dump(Yaconf ::获得( “富”)); ' / * array(3){   [“name”] =>   string(6)“yaconf”   [“year”] =>   string(4)“2015”   [“features”] =>   array(5){     [0 ] =>     string(4)“fast”     [1] =>     string(5)“light”     [“plus”] =>     string(9)“zero-copy”     [“constant”] =>     string(9)“ 7.0.0-dev“ 	[”env“] => 	string(16)”/ home / huixinchen“   } } * /如您所见,Yaconf支持字符串,映射(数组),ini,env变量和PHP常量。您还可以访问以下配置:PHP7  - [R  '的var_dump(Yaconf ::获得( “foo.name”)); ' // string(6)“yaconf”PHP7  - [R  '的var_dump(Yaconf ::获得( “foo.features.1”)); ' // string(5)“light”PHP7  - [R  '的var_dump(Yaconf ::获得( “foo.features”) “加”]); ' // string(9)“零拷贝”bar.ini现在让我们看看继承的部分和部分:PHP7  - [R  '的var_dump(Yaconf ::获得( “酒吧”)); ' / * array(2){   [“base”] =>   array(2){     [“parent”] =>     string(6)“yaconf”     [“children”] =>     string(4)“NULL”   }   [ “children”] =>   array(2){     [“parent”] =>     string(6)“yaconf”     [“children”] =>     string(3)“set”   } } * /子部分在基本部分中继承了值,子部分能够覆盖他们想要的值。

 

转载地址:http://mqtnn.baihongyu.com/

你可能感兴趣的文章
javaWeb从入门到放弃——Http基础知识
查看>>
依赖注入
查看>>
Springboot 自动装配原理2
查看>>
Springboot 自动装配原理1
查看>>
Springboot 自动装配流程图详解
查看>>
Springboot 整合mybatis
查看>>
Springboot+mongodb本地环境正常,生产环境报错{java.lang.NoClassDefFoundError: jdk/net/ExtendedSocketOptions}
查看>>
你真的知道get方法与post方法的区别吗?论get方法与post方法上传下载文件的区别
查看>>
swagger配置及升级版swagger-bootstrap-ui配置+访问账号密码登录限制
查看>>
网易云Api,轻松获取音乐数据
查看>>
List与String相互转换
查看>>
阿里巴巴fastjson api使用教程
查看>>
栈与堆的个人理解
查看>>
Lambda表达式概念理解
查看>>
Java 8 Stream 优雅的流式编程, 过滤集合类型的数据lambda表达式
查看>>
浅谈重不重写equals和hashcode对于HashMap添加元素的影响
查看>>
面试题:Redis是单线程,速度为什么会这么快?
查看>>
关于String==和String.intern()的面试题,一文读懂
查看>>
new Hashmap 和 new ArrayList时设置初始化容量多少合适
查看>>
RocketMQ概念简介
查看>>