开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:设计的改进】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15974
设计的改进
代码里面有很多跟 java1 有关的技术,所以除了有看设计是怎样落实到代码上的,还有很多 java1 中间可能之前没有碰到过的技术。
1、Redis 存储设计
(1)在 Redis 中存储用户的权限位信息
(2)Key:"p_"+ 用户 ID·Value: BitMap
设计做了更新,需求没有变化,数据库的结构有发生一些变化。主要的变化在于 Redis 的存储。
Redis 存储打算用 bitmap 来存储,把每一个用户权限用二进制的 value 存,角色也用一个 value 来存。对于单个的权限只有一个 value 是1的 value 来存,然后做 value 操作来完成权限的较练,发现没有必要用 bitmap 来存。
代码可以改成一个集合,因为集合的操作更加方便,写代码做一个决定不是因为好写、方便才这样做,主要的原因是集合做法的好处是写起来方便一些,坏处是比较
占空间。
用集合不用 bitmap 是因为权限 value 不是特别多,在系统中间最多有五六百个权限,每一个人拥有的权限是不同的。假如系统里面最多有500或者600个权限,一个
人最多是500或600个权限,不会弄出七百、八百个,没有很多。
500乘8才 4000个bit,500或600个字节就能把一个人的权限,或者一个角色的权限存完。假如同时在线有1万人是五兆的数据,用五兆的数据把1万个人的权限至全部充完。
五兆的数据对于内存不是问题,如果用 bitmap 来存会要除8,所以 bitmap 会更加
节约空间。
对于需求量不是特别大没必要用到 bitmap 这种高级的东西,所以最后的代码是用集合方式来做的,集合方式做还更加简单,代码会更加简洁,这是设计和实现的差异。设计上做的东西,但在实现的时候会发现有更好的方案,所以进行改变。