关于业务缓存的存储结构

news/2024/7/7 21:20:51

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

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

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

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

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


http://lihuaxi.xjx100.cn/news/1075822.html

相关文章

Reid之网络的定义代码详解

这篇文章是yolov5_reid的扩展。针对reid网络定义代码的详解,有助于大家的理解,同时也方便网络方面的改进。 数据集的预处理代码可以参考我另一篇文章:Reid数据集处理 本篇文章Reid的网络将以Resnet50为例。因此需要大家对Resnet代码有一定的…

Clickhouse分布式表引擎(Distributed)写入核心原理解析

Clickhouse分布式表引擎(Distributed)写入核心原理解析 Clickhouse分布式表引擎(Distributed)写入核心原理解析Clickhouse分布式表引擎(Distributed)查询核心原理解析 Distributed表引擎是分布式表的代名…

【接口自动化测试】月薪12k必会技术,从0到1学习接口自动化测试,6个操作安排的明明白白

导读:在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原…

selenium定位网络元素

这里主要写的是新版本 1、通过元素的id属性来定位元素 ele driver.find_element(By.ID, “IamID”) # 类型为 WebElement 类 1 2、 通过元素的name属性来定位元素 driver.find_element(By.NAME, “first”).send_keys(“通过元素的name属性来定位元素”) 1 2 3、通过元素的…

01 【Sass的安装使用】

1.介绍 1.1 CSS预处理技术,及种类介绍 什么是css预处理技术 CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只…

Hilt 和协程助力启动框架搭建:解决代码混乱和初始化策略问题

关于Hilt的使用,目前已经比较普及了,想必大家已经知道。今天说的是一个如何利用Hilt来做一个启动框架的故事。 是否经历过大型项目的启动优化,一遍过去无任何效果,第二遍过去好几处报错,第三遍过去启动不了&#xff0…

C++:Article : 链接器(三):库与可执行文件的生成

链接器:库与可执行文件 1. 静态库1.1 静态链接下,可执行文件如何生成 2. 动态库2.1 动态库特点以及与静态库使用方式差异2.2 动态库和静态库使用时间 3. load-time dynamic linking(加载时动态链接)3.1:阶段一&#xf…

C#开发的OpenRA游戏的加载快捷键

C#开发的OpenRA游戏的加载快捷键 OpenRA游戏里,由于这是一个即时战略游戏,这样的游戏是比较注意时间的节省, 因为玩家操作速度越快,各种部署,以及工厂里生产武器的速度就越快, 并且控制各兵种运动的速度就越快,因此玩家使用快捷键就远比鼠标操作要得快。 一个常胜的玩家…