Closed liminworks closed 3 years ago
3.7版本中。
使用redis adapter 和 watcher https://github.com/php-casbin/php-casbin/issues/81 但redis adapter我没测试过,后续考虑测试后包含在本库中。
自行使用Enforcer::loadPolicy()刷新策略也会造成一定的数据库压力
方便的话打包一个最小实现出来,我测试下其他解决方法
@liminworks 试下dev版本,给个反馈,我测试已经没问题了
composer require donjan-deng/hyperf-casbin:dev-master
@liminworks 试下dev版本,给个反馈,我测试已经没问题了
composer require donjan-deng/hyperf-casbin:dev-master
dev版本这样改多进程和多实例肯定是没有问题的,,因为每个协程进来都会重新加载数据库的全部数据,每次请求的协程id是不一样的,,所以相当于每个请求都要从数据库查一遍,,性能开销很大,,,另外测试循环添加角色权限接口的时候,等待时间过长,每个都要查一次数据库扫描全表,
为何不用redis缓存呢?更新carsbin表的时候删除缓存key,,这样多实例启动的时候每次就能从数据库读取数据,,没有删除缓存也就是carsin无修改的时候,直接从缓存读取数据。
@liminworks
hyperf开启多进程时,每次修改(添加角色权限)只更新当前进程的model属性值,别的进程没有更新。Enforcer::enforce() 这个方法还是获取进程启动时加载的mode值。