think-authz icon indicating copy to clipboard operation
think-authz copied to clipboard

多站点策略缓存问题:使用数据库连接和表名作为缓存KEY

Open Tinywan opened this issue 3 years ago • 11 comments

多站点策略缓存问题:使用数据库连接和表名作为缓存KEY

Tinywan avatar Apr 30 '21 10:04 Tinywan

@techoner

hsluoyz avatar Apr 30 '21 11:04 hsluoyz

@Tinywan It is recommended to add the cache configuration, refer to: Laravel-authz

leeqvip avatar May 06 '21 08:05 leeqvip

@techoner

  • 1、目前该扩展在项目中是在多站点使用的,也就是说 connection(连接不同的数据库) 每次都是动态赋值的,而不是固定的写死的配置文件中的
  • 2、如果缓存是固定的配置文件,则导致每个站点的缓存都一样,从而最新的站点缓存不会被缓存。缓存是放在同一个Redis实例的同一个数据库中。
  • 3、多租户不同数据库权限配置,如:jiangxi.cabin_rules 缓存KEY,是缓存的江西casbin权限。beijing.cabin_rules 缓存KEY,是缓存的北京casbin权限。jiangxibeijing 标识不同的站点和不同的数据库,即不同的站点会有自己的数据库以及casbin策略规则表。

这是我整理笔记截图

Snipaste_2021-05-06_16-45-29

Tinywan avatar May 06 '21 08:05 Tinywan

@Tinywan I think the use of caching configuration is more universal, and your caching strategy can be one of them.

leeqvip avatar May 07 '21 10:05 leeqvip

@techoner 1、配置文件单站点是没什么问题。 2、现在是多站点多租户问题请问该如何解决这个缓存问题呢?哈哈

Tinywan avatar May 07 '21 11:05 Tinywan

多站点可以有不同配置文件,配置不同的key即可,甚至可以配置不同的缓存驱动使用不同的redis库.

leeqvip avatar May 14 '21 03:05 leeqvip

主要是缓存key目前是写死的 $rows = $this->model->cache('tauthz')

突然想到一个好办法:就是缓存key直接使用 $this->connection 即可,如果不为空,则$rows = $this->model->cache('tauthz'),否则$rows = $this->model->cache($this->connection)

Tinywan avatar Jun 08 '22 13:06 Tinywan

@Tinywan 这个笔记可以开源出来么

hsluoyz avatar Jun 08 '22 13:06 hsluoyz

这个一直不敢升级,没升级

Tinywan avatar Jun 08 '22 13:06 Tinywan

@Tinywan 希望这个笔记可以开源出来,能贡献到官网文档就更好了

hsluoyz avatar Jun 08 '22 14:06 hsluoyz

尽量哈

Tinywan avatar Jun 09 '22 00:06 Tinywan