关于业务缓存的存储结构

:为什么不直接缓存 [账号id->权限列表]的关系,而是 [账号id -> 角色id -> 权限列表]?
:[账号id->权限列表]的缓存方式虽然更加直接粗暴,却有一个严重的问题:

通常我们系统的权限架构是RBAC模型:权限与用户没有直接的关系,而是:用户拥有指定的角色,角色再拥有指定的权限
而这种’拥有关系’是动态的,是可以随时修改的,一旦我们修改了它们的对应关系,便要同步修改或清除对应的缓存数据
现在假设如下业务场景:我们系统中有十万个账号属于同一个角色,当我们变动这个角色的权限时,难道我们要同时清除这十万个账号的缓存信息吗? 这显然是一个不合理的操作,同一时间缓存大量清除容易引起Redis的缓存雪崩

而当我们采用 [账号id -> 角色id -> 权限列表] 的缓存模型时,则只需要清除或修改 [角色id -> 权限列表] 一条缓存即可

一言以蔽之:权限的缓存模型需要跟着权限模型走,角色缓存亦然

延伸:
为了避免redis keys问题.
最好是尽量单表缓存 (也就是mysql binlog)
这样清理缓存的时候是知道精准key的, 属于精准删除
如果不是单表缓存, 请考虑清楚缓存的时候是知道精准key的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定时任务调度是一种定期执行的机制,它可以按照预定的时间间隔或时间点,自动执行指定的任务。在业务系统中,我们可以利用定时任务调度机制将结构化数据按照业务需求进行统计维度的缓存入库,并且对于接口API数据,我们可以通过从缓存中获取数据来提高系统的性能和响应速度。 在业务系统中,我们通常会将结构化数据按照特定的统计维度进行缓存入库。通过定时任务调度,我们可以定期执行统计逻辑,将计算得到的结果存储在数据库中,以便后续的查询和分析使用。通过将数据进行缓存入库,我们可以减少每次查询时的计算量,提高系统的性能和响应速度。 对于接口API数据,我们可以利用缓存来提高数据的获取效率。当接口收到请求时,我们可以首先检查缓存中是否存在对应的数据。如果存在,则可以直接从缓存中获取数据,而无需再次查询数据库或者执行复杂的计算逻辑。这样可以大大提高系统的响应速度,并减轻数据库的负载。 综上所述,定时任务调度可以将结构化数据按照业务需求统计维度缓存入库,并通过缓存提高接口API数据的获取效率。这种机制可以显著提高系统的性能和响应速度,并减轻数据库的负载。在实际应用中,我们可以根据具体的业务需求和系统性能要求,合理调整定时任务调度的时间间隔和缓存策略,以达到最佳的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值