前端时间配合前端需求的时候出现一个场景,需要存储大量的state状态,例如是否开启推送、短信、夜间模式等状态。如果使用单表多字段去存这些信息就显得得不偿失。考虑到开关只有开关状态的情况下,使用01二进制的方式来存可能非常不错。

mysql数据库中:INT类型(0,4 294 967 295)可存储10位数字,也就是可以表示10个标志位开关。一般是够用的,如果不够那么可以考虑BIGINT(0,18 446 744 073 709 551 615)扩展到20位,比如:010101010101001010100......。

如果说20位还是不满足我们业务需求,那么其实存储的时候进行2进制转10进制,10位的1111111111转换成10进制只有1023一个SMALLINT类型即可存储。最大优化了mysql的存储内容,那么为什么我们要考虑直接用二进制的方式存呢,其实就是为了方便易读,如果是个标志位情况那么11110,最低位表示推送开关,那么只要我们字段注释写的ok,代表的含义基本上是非常清楚的,推送处于关闭状态。

数据库存储解决了,那么在程序里面应该如何更方便的存储呢?刚开始考虑到考虑到可以用二进制运算来方便运算。

如果当前场景有三个标志位,‘101’来表示 ‘open close open’ 三个开关。

场景1:我想知道某个开关是否开启

  private static boolean getBit(int num, int i){//true 表示第i位为1,否则为0return ((num & (1 << i)) != 0);}
复制代码

场景2:开启功能

    //将 整数 num 的第 i 位的值 置为 1private static int getBit(int num, int i){return (num | (1 << i));}
复制代码

场景3:关闭功能

    //将 整数 num 的第 i 位的值 置为 1private static int getBit(int num, int i){int mask = ~(1 << i);return (num & (mask));}复制代码

实际应用配合缓存,这样操作的效率感觉还是可以的。

如有不妥之处,请指明谢谢。

转载于:https://juejin.im/post/5a7feeff5188257a7c6c4be9

多个开关标志位存储的设计思路相关推荐

  1. 第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成

    文章目录 算术逻辑单元 逻辑运算 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 加法器原理 补码加法器原理 无符号整数加减法 标志位的生成 算术逻辑单元 算术逻辑单元就是运算器里面的AL ...

  2. mysql标志位_数据库状态标识位flag设计

    设计目的 减少各种状态值字段 减少数据库冗余和存储空间 增加状态值时可灵活调整,无需增加额外字段 运用场景 例子1:管理用户的支付方式 比如针对不同用户组设置了不同的支付方式支持,假设支付方式有支付宝 ...

  3. 计算机组成原理4位ALU运算器设计,计算机组成原理课程设计-alu设计和4位锁存器设计.doc...

    计算机与通信工程学院 计算机组成原理课程设计 专业名称班级学号学生姓名指导教师设计时间207.12.23~2018.1.3 课程设计任务书 专业:: 学生姓名(签名): 设计题目: 设计实验条件 20 ...

  4. 嵌入式cmp指令的判断标志位_嵌入式开发的基础知识

    搜索了一些有关于对嵌入式开发的一些基础知识,分享给大家! 1.ARM中一些常见英文缩写解释 MSB:最高有效位: LSB:最低有效位: AHB:先进的高性能总线: VPB:连接片内外设功能的VLSI外 ...

  5. 四则运算计算器c语言设计报告,8位四则运算计算器设计报告[五篇]

    单片机应用课程设计报告 设计题目 姓 名 学 号 年 级 专 业 指导教师 考核成绩 8位四则运算计算器 胡成.柏壮壮.王庆安.杜威.孙润 Z1141410 7.Z11414039 Z1141407 ...

  6. 汇编中有符号与无符号数以及CF,OF标志位的区分

    汇编中有符号与无符号数以及CF,OF标志位的区分 一. 只有一个标准! 首先需要知道,计算机对数值的存储采用补码形式存储,一来避免了+0和-0的尴尬,二来数值的加法和减法可以统一为补码的加法. 在汇编 ...

  7. 推理芯片的性能建立在优化的存储子系统设计上

    推理芯片的性能建立在优化的存储子系统设计上 Inference chip performance builds on optimized memory subsystem design 好的推断芯片可 ...

  8. PVS的内存和存储规划设计

    提示:这篇文章是本人在2012年12月11日有感而写的一篇电子邮件,因为其中的内容会在即将发表的一篇新博文被引用,故重新贴于此处.由于是近三年前的内容,技术也在不断进步,其中的部分内容已经不再适合于现 ...

  9. FPGA项目一:1位闪烁灯设计

    文章目录 项目一:1位闪烁灯设计 第一节 项目背景 第二节 设计目标 第三节 设计实现 3.1 顶层信号 3.2 信号设计 3.3 信号定义 第四节 综合和上板 4.1 新建工程 4.2 综合 4.3 ...

最新文章

  1. list对oracle结果集排序了_MySQL之排序分组优化
  2. 基于链表实现队列(基于Java实现)
  3. python安装流程-python安装流程和注意事项
  4. Android --- SharedPreferences的详细介绍
  5. 【企业管理】2020年的经营关键词
  6. 详细解读java IO
  7. OpenCV使用神经网络检测颜色检查器
  8. 万网mysql中文乱码_Linux下MySQL出现乱码的解决方法-阿里云开发者社区
  9. C++ 拷贝构造函数的使用场景
  10. 学习C/C++的简单方法
  11. oracle字段去重查询,oracle怎么去重查询
  12. SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常
  13. 最受开发人员欢迎的JDBC接口
  14. [RK3399][Android7.1] adb remount失败
  15. 深入浅出数据分析:寻找最大值Solver
  16. Wordpress源码文件详解
  17. oracle scan启动,scan listener 重启
  18. Shiro记住我无效,被拦截;
  19. 安卓虚拟机_安卓虚拟机Pro解锁付费版 自带root权限 可运行xp等框架
  20. 对于“高德地图”的使用感受

热门文章

  1. python一点基础都没有的怎么办-Python基础常见问题总结(一)
  2. python爬虫毕业设计题目-Python爬虫面试题170道:2019版【1】
  3. pyrosim有Linux版本吗,烟气流动分析软件Pyrosim版本 2020.4.092
  4. LeetCode Path Sum II(dfs或者bfs)
  5. LeetCode Nim Game
  6. Qt中用QuaZip来压缩和解压缩文件
  7. 网络编程学习笔记(TCP套接口选项)
  8. reGeorg+Proxifier使用
  9. nginx 访问控制之 认证
  10. Java中“==”的使用,以及“==”和equal的比较