数据类型-set 实现权限校验| 学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习数据类型-set 实现权限校验

开发者学堂课程【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来完成这件事。

image.png


二、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 应用于不同类型不重复数据的合并操作

简易提供基础数据,不要融合,应用于不同类型不重复数据的合并操作。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
2月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
2月前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
20 0
|
3月前
|
NoSQL Redis
Redis set数据类型命令使用及应用场景使用总结
Redis set数据类型命令使用及应用场景使用总结
34 1
|
3月前
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
4月前
|
存储 C++ 容器
【C++】学习笔记——map和set
【C++】学习笔记——map和set
29 0
|
5月前
|
存储 Java Redis
redis-学习笔记(Jedis set 简单命令)
redis-学习笔记(Jedis set 简单命令)
44 1
|
5月前
|
NoSQL Java Redis
redis-学习笔记(string , hash , list , set , zset 前置知识)
redis-学习笔记(string , hash , list , set , zset 前置知识)
28 0
redis-学习笔记(string , hash , list , set , zset 前置知识)
|
5月前
|
搜索推荐
redis-学习笔记(set)
redis-学习笔记(set)
32 0
|
5月前
|
SQL NoSQL Java
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
50 0