-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat:多站点策略缓存问题:使用数据库连接和表名作为缓存KEY #46
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
除了使用链式调用cache
外,
建议另外一种实现,采用 模型事件 ,来触发缓存,参考 Laravel-authz 的模型观察者。
然后使用 缓存 ,可以配置缓存的store
src/model/Rule.php
Outdated
public $cacheKey; | ||
|
||
/** 设置缓存key过期时间 @var int */ | ||
public $cacheExpire; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这些属性建议改成:protected
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已修改
$rows = $this->model->cache('tauthz')->field(['ptype', 'v0', 'v1', 'v2', 'v3', 'v4', 'v5'])->select()->toArray(); | ||
if($this->model->cacheEnabled){ | ||
$_cacheKey = $this->model->getConnection().':'.$this->model->cacheKey; | ||
$this->model = $this->model->cache($_cacheKey,$this->model->cacheExpire); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
关于缓存的key
还是建议直接读取配置,不需要拼接connection
,默认这个属性也是空的
多站点配置不同缓存key
就行了,更灵活。不必和connection
绑死
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
默认的connection
不是空的呀!就是当前数据库连接名称。我这边有200多个站点配置不同key也不现实呀
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
实际业务场景就是需要要拼接connection
。应为是Saas部署,每个Saas都有不同数据库
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getConnection()
取的是配置文件中的连接标识,并不是数据库连接地址、库名称之类的,你可以试下,默认空,执行的才会取default
的配置。
不会配200个连接标识,配置的是env
的连接地址等。
之所以推荐走模型事件,就是解耦,缓存也更灵活。
$rows = $this->model->cache('tauthz')->field(['ptype', 'v0', 'v1', 'v2', 'v3', 'v4', 'v5'])->select()->toArray(); | ||
if($this->model->cacheEnabled){ | ||
$_cacheKey = $this->model->getConnection().':'.$this->model->cacheKey; | ||
$this->model = $this->model->cache($_cacheKey,$this->model->cacheExpire); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getConnection()
取的是配置文件中的连接标识,并不是数据库连接地址、库名称之类的,你可以试下,默认空,执行的才会取default
的配置。
不会配200个连接标识,配置的是env
的连接地址等。
之所以推荐走模型事件,就是解耦,缓存也更灵活。
@Dobmod 谢谢 |
No description provided.