akiyatkin / boo
服务器端缓存,支持手动选择性更新
Requires
- akiyatkin/fs: ~1
- infrajs/access: ~1
- infrajs/ans: ~1
- infrajs/load: ~1
- infrajs/once: ~1
- infrajs/path: ~1
- infrajs/rest: ~1
- infrajs/router: ~1
- infrajs/sequence: ~1
README
在处理远程存储时缓存结果,例如Google Drive,这些存储访问需要大量时间。
建议用于小型网站(10,000个缓存),当管理员在远程存储中更改并清除必要的缓存以将更改应用到网站上时。在没有设置自动缓存更新反馈的情况下,手动和选择性管理缓存是Boo缓存的关键特性。
支持嵌套缓存和重复使用,当缓存的实例在依赖关系树中有多个父节点时。在所有情况下,缓存的函数只执行一次。更新依赖缓存的函数时,所有父缓存也会更新。
通过composer安装
{ "require":{ "akiyatkin/boo":"~1" } }
- 必须有一个设置好重定向规则(针对以符号
!~-
开始的地址)的.htaccess
文件,根据infrajs/router的规则,以便在项目中使用地址/-boo/。与任何其他路由器或框架兼容。
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/[-~\!]
RewriteRule ^(.*)$ vendor/infrajs/router/index.php [L,QSA]
- 需要配置缓存管理权限。为此,在项目根目录创建一个配置文件
.infra.json
。对于127.0.0.1服务器,权限是自动设置的,但在其他服务器上,需要在access.test部分指定IP地址或使用true
以允许对缓存管理接口的通用访问。访问管理由infrajs/access扩展控制。
.infra.json
文件
{ "access":{ "test":true } }
-
在处理Boo扩展的脚本中,工作目录必须指向项目根目录。如果脚本位于嵌套文件夹中,必须根据infrajs/path的要求使用
chdir('../');
命令。 -
为了使脚本地址中的
?-boo
参数生效,需要执行Router::init()
,或者通过包含符号-
的地址进行访问,这样路由器会自动连接,并且工作目录也不需要改变,它始终指向根目录,无论脚本文件的位置如何。
使用方法
use akiyatkin\boo\Cache; $args = array($one, $two); //простые, необязательные параметры идентифицирующие кэш $data = Cache::exec('Group title', function ($one, $two) { $data = sleep(5); //Что-то долгое //$one и $two чаще всего какие-то идентификаторы. //Можно указать более понятный title для кэша текущей обработки Cache::setTitle($title); return $data; //нерекурсивные кэшируемые данные }, $args);
该函数保存缓存,并允许在地址/-boo/
处选择性地更新它们(需要infrajs/access测试者权限和配置好的infrajs/router路由器)。
为了使GET参数-boo
生效,脚本必须以符号-
开头或包含初始化路由器。
开发者日志
Cache将缓存保存到硬盘上的!boo/
文件夹中。针对有管理界面(BooCache)的缓存元素的描述存储在!boo/.tree.json
中。
item.result, item.conds, item.childs会被恢复,并且不能从原始缓存函数的数据中直接获取。如果有conds,则不需要childs。
最好在检查函数中获取conds的参数,而不是将其保存在condsarg中。condsarg会缓存参数值,并且可能会使用旧值,例如如果参数由配置生成。这些值被保存在缓存中,而配置被更改后,只有在-update=true
时网站才会更新,因为检查函数的参数将保持不变。
/-update/
- 执行安装而不删除缓存
?-update=true
- 删除整个缓存
test = true
- 执行检查,为普通用户重新生成缓存
debug = true
,?-access = true
,admin = true
- 执行检查,一些缓存不保存也不更新。例如,未压缩的html和css不会进入缓存。
?-boo = true|root|id
- 只与 test=true
一起使用。执行检查,一些检查为true。 - 为用户重新生成元素。
-start/start
- 只与 test=true
一起使用。所有检查为true - 所有元素都会重新生成。
当访问数据库时,会触发nostore标题,该标题取消缓存保存,如果数据库访问不应该禁止缓存,则需要调用 Nostore::off()
并编写检查更新数据库中使用的数据。
缓存元素的标志
- nostore
- checked
- loaded
- start
缓存元素的动态属性
- childs
- time
- timer
- result
- conds
缓存元素的静态属性
- id
- gid
- cls
- src
- gtitle
- title
- condfn
- condargs
- args
- hash
联系方式
可以在VKontakte群组中提出问题 https://vk.com/infrajs 或在 github 上的 issues。