开发者学堂课程【Redis 入门到精通(基础篇):数据类型-set 实现权限校验】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/764/detail/13387
数据类型-set 实现权限校验
内容介绍
一、set 类型数据操作的注意事项
二、set 类型应用场景
三、Tips10
一、set 类型数据操作的注意事项
●set 类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份
●set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
首先注意不重复,围绕模型特征说的,如果说第一次添加成功,那么第二次及以后添加都是失败的;
第二个是set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间,当数据运行时,就注定了类型,是不允许跨类型存储的。
简单看一下就是,sadd a a,进入成功,后面就失败了,如果一定要操作,在hset a a 1,那么是不允许的,这就是注意事项。
业务场景
集团公司共具有12000名员工,内部OA系统中具有700多个角色,3000多个业务操作,23000多种数据,每位员工具有一个或多个角色,如何快速进行业务操作的权限校验?
这里不要较真,真正的权限校验有框架,包括spring,筛入框架,都可以做一个完美的权限校验,这里是说使用redis的set模型也可也做到这个事情。
一个人对应多个角色,每个人都有不同的权限,就会有一些交叉重叠的部分,我们就可以用set来完成这件事。
二、set 类型应用场景
解决方案
●依赖 set 集合数据不重复的特征,依赖 set 集合 hash 存储结构特征完成数据过滤与快速查询
●根据用户id获取用户所有角色
●根据用户所有角色获取用户所有操作权限放入 set 集合
●根据用户所有角色获取用户所有数据全选放入 set 集合
依赖 set 集合数据不重复的特征,我们把一个人所有的角色的所有的操作,放到一个 set 集合中,重复的就被去掉了,这件事就可以做快速的校验,我们设定一个人有两个角色,一个角色有好几种权限,先做出角色1的权限,
sadd rid:001 getall,sadd rid:001 getByid,然后sadd rid:002 getCount,sadd rid:002 getall,sadd rid:002 insert,
现在两个角色都有了,现在001有两个角色跟相应的操作,那么他对应的操作权限有哪些?
我们就做一个全新的合并的模型,用到了sunionstore uid:007 rid:001 rid:002,合成结束,然后进行校验,有两种方式,一种是直接查看所有的数据,smembers uid:007,然后判断需要的在不在里面,在的话调用,不在的话,不能调用,还有一个sismember insert,回车,可以使用,这是两种不同的方式,第一种是数据存储方提供数据,然后将校验的业务放到操作的业务层去,第二种是将数据放到校验端,直接校验,两种形式看上去都很不错,但是第一种的耦合度相对低一点,数据跟业务是分散开的,第二种是把数据校验移到了数据这一段,也就是说在取数据的同时还加入了业务校验。
校验工作:redis提供基础数据还是校验数据
三、Tips10
Redis 应用于不同类型不重复数据的合并操作
简易提供基础数据,不要融合,应用于不同类型不重复数据的合并操作。