Skip to content
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

请问如何实现Redis缓存的多租户隔离? #5731

Closed
citynook opened this issue Dec 28, 2023 · 7 comments
Closed

请问如何实现Redis缓存的多租户隔离? #5731

citynook opened this issue Dec 28, 2023 · 7 comments

Comments

@citynook
Copy link

版本号:

3.6.1

前端版本:vue3版?还是 vue2版?

vue3

问题描述:

好像当前版本未实现 Redis 缓存的多租户隔离,想确认下。如未实现,是要等未来新版提供?还是要如何配置可以实现?

截图&代码:

友情提示(为了提高issue处理效率):

  • 未按格式要求发帖,会被直接删掉;
  • 描述过于简单或模糊,导致无法处理的,会被直接删掉;
  • 请自己初判问题描述是否清楚,是否方便我们调查处理;
  • 针对问题请说明是Online在线功能(需说明用的主题模板),还是生成的代码功能;
@zhangdaiscott
Copy link
Member

具体需求是什么,隔离什么数据

@citynook
Copy link
Author

@zhangdaiscott 以数据字典举例,sys_dict 中有 tenant_id 字段,表示数据字典是支持多租户的。而且不同的租户有可能会配置自己所需的数据字典。

如果在同一个数据库中配置了多租户,不同的租户加载数据字典时,应该只加载所属租户的数据,而不是缓存中的数据字典供多个租户共用。

@zhangdaiscott
Copy link
Member

别人都选不了其他租户下的字典,跟缓存有什么关系?

@citynook
Copy link
Author

实际应用场景如下:

  1. 在同一套服务器环境中实现多租户

  2. 还是以数据字典为例,业务系统定义了【收货单类型】,字典代码为【RO_DOC_SUB_TYPE】,不同的租户可以维护自己的细项,例如:
    租户A定义了:采购收货单、移库收货单、工单退料收货单
    租户B定义了:借用收货单、赠送收货单、报废退货收货单
    在【收货单管理】功能的【新增】页面上选择【收货单类型】时,租户A和B都只能看到自己定义的细项,而不是将这些细项都列出来。

现在存在的问题是:

  1. sys_dict 表的唯一索引是 code,这表示所有的租户只能共用一套定义,不支持上面第2点所描述的应用场景

建议的解决方案:

  1. 如果表支持多租户,就要考虑是否需要设置 tenant_id + code(也可能是其它名称) 为唯一索引。像数据字典要支持多租户自定义,sys_dict 要设置 tenant_id + code为唯一索引。这里只需要修改下唯一索引就可以实现。

如果表中的数据不需要缓存,则无需修改。

  1. RedisConfig 类扩展CacheManager,在缓存名称上多增加一个租户ID即可:
    KEY = cacheName + 入参 + 租户标识(后台有获取当前租户的函数)
    改动不多,但可以实现缓存的多租户隔离。可供参考的文章:https://juejin.cn/post/6844903806841389070

@DDD1874
Copy link

DDD1874 commented Dec 28, 2023

这个需求要支持,很有用,相当于业务系统共用一套字典、业务规则、业务参数的调用逻辑,但同时允许租户差异化自定义,这样代码不变的情况下,租户则根据差异化自定义的字典、业务规则、业务参数的差异,匹配上租户差异化的业务需求。

如:租户A定义标准订单交期为15天;租户B定义标准订单交期为20天;租户C定义标准订单交期为30天,代码逻辑不变的情况下,同样的功能可以满足这三个租户的订单交期提醒预警需求。

@zhangdaiscott
Copy link
Member

需要的话,可以自己扩展,给redis缓存key的规则,加上租户参数即可

@zhangdaiscott
Copy link
Member

暂时不实现,收录到
#1312

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants