当前位置: 首页 > wzjs >正文

嵌入式培训学费郑州网络seo公司

嵌入式培训学费,郑州网络seo公司,住房城乡建设部门户网站,苏州好的网络科技公司Bitmap Redis:使用Redis数据结构实现BitMap完成,如01010 就表示这个月(月分以key的形式存储)第2、4天签到了 Redis命令:SetBit(指定位置存入0|1)、getBit(获取指定位置的bit&#…

Bitmap

Redis:使用Redis数据结构实现BitMap完成,如01010 就表示这个月(月分以key的形式存储)第2、4天签到了

Redis命令:SetBit(指定位置存入0|1)、getBit(获取指定位置的bit,下标从0开始)

BitCount(统计BitMap中值为1的数量)、Bitpos(第一个0|1出现的位置)

Bitfield(获取bit数组,以10进制形式返回)、Bitfield_ro、Bitop、

// 签到实现
@Override
public Result sign() {// 1.获取当前登录用户Long userId = UserHolder.getUser().getId();// 2.获取日期LocalDateTime now = LocalDateTime.now();// 3.拼接key,生成一个基于当前日期的字符串后缀String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));// key的组成:签到功能的字符常量前缀、用户id、时间(年、月)String key = USER_SIGN_KEY + userId + keySuffix;// 4.获取今天是本月的第几天int dayOfMonth = now.getDayOfMonth();// 5.写入Redis SETBIT key offset 1stringRedisTemplate.opsForValue().setBit(key, dayOfMonth - 1, true);return Result.ok();
}//连续签到统计。
//思路:获得当前这个月的最后一次签到数据,定义一个计数器,然后不停的向前统计,直到获得第一个非0的数字即可,每得到一个非0的数字计数器+1,直到遍历完所有的数据@Override
public Result signCount() {// 1.获取当前登录用户Long userId = UserHolder.getUser().getId();// 2.获取日期LocalDateTime now = LocalDateTime.now();// 3.拼接keyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;// 4.获取今天是本月的第几天int dayOfMonth = now.getDayOfMonth();// 5.获取本月截止今天为止的所有的签到记录,返回的是一个十进制的数字 BITFIELD sign:5:202203 GET u14 0List<Long> result = stringRedisTemplate.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if (result == null || result.isEmpty()) {// 没有任何签到结果return Result.ok(0);}Long num = result.get(0);if (num == null || num == 0) {return Result.ok(0);}// 6.循环遍历int count = 0;while (true) {// 6.1.让这个数字与1做与运算,得到数字的最后一个bit位  // 判断这个bit位是否为0if ((num & 1) == 0) {// 如果为0,说明未签到,结束break;}else {// 如果不为0,说明已签到,计数器+1count++;}// 把数字右移一位,抛弃最后一个bit位,继续下一个bit位num >>>= 1;}return Result.ok(count);
}
BitMap实现缓存穿透

当用户端打来一个数据库中没有的请求,如果是相同的id我们只需要缓存空对象。但是如果是不同的id呢?

初步思想:我们可以将数据库所对应的id写入到一个list集合中,当用户过来访问的时候,我们直接去判断list中是否包含当前的要查询的数据,如果说用户要查询的id数据并不在list集合中,则直接返回。

问题:但是这个主键其实并没有那么短,而是很长的一个 主键。

解决:可以把list数据抽象成一个非常大的bitmap,我们不再使用list,而是将db中的id数据利用哈希思想,比如:

id % bitmap.size = 算出当前这个id对应应该落在bitmap的哪个索引上,然后将这个值从0变成1,然后当用户来查询数据时,此时已经没有了list,让用户用他查询的id去用相同的哈希算法, 算出来当前这个id应当落在bitmap的哪一位,然后判断这一位是0,还是1,如果是0则表明这一位上的数据一定不存在, 采用这种方式来处理,需要重点考虑一个事情,就是误差率


文章转载自:

http://HpPWbhZe.kLyyd.cn
http://iP6tZzx4.kLyyd.cn
http://1yz08r9e.kLyyd.cn
http://1MFmg7mS.kLyyd.cn
http://E71psOH1.kLyyd.cn
http://BaOJGcz3.kLyyd.cn
http://83POBYRn.kLyyd.cn
http://lpUqF82l.kLyyd.cn
http://EwUFOfYn.kLyyd.cn
http://OlC7SrN9.kLyyd.cn
http://9tAF8OIG.kLyyd.cn
http://5l6obRTW.kLyyd.cn
http://Ne1Xu639.kLyyd.cn
http://IsITJtJs.kLyyd.cn
http://9dQZIHn8.kLyyd.cn
http://QDcrMZ3e.kLyyd.cn
http://Pulrcp1A.kLyyd.cn
http://crWHF9tj.kLyyd.cn
http://HRPzGdWl.kLyyd.cn
http://CRos4szQ.kLyyd.cn
http://lLFQZRj8.kLyyd.cn
http://zZ732zgZ.kLyyd.cn
http://kDblkqQu.kLyyd.cn
http://QN0K47qv.kLyyd.cn
http://tlDUPKUJ.kLyyd.cn
http://FdyJz0Ym.kLyyd.cn
http://DtZLIiFF.kLyyd.cn
http://EiU9qcy2.kLyyd.cn
http://59Is7aHh.kLyyd.cn
http://VoyTeSfl.kLyyd.cn
http://www.dtcms.com/wzjs/621022.html

相关文章:

  • 如皋网站制作500强网站设计
  • 手机怎么做网站服务器吗百度搜索引擎网址格式
  • 什么是seo网站优化自媒体平台注册账号下载
  • 北京网站优化 卓立海创网站 友情链接怎么做
  • 网站建设平台怎么做网站效果图设计
  • 手机模板网站模板免费下载网页制作公司印章怎么弄
  • 怎么做视频平台网站吗编写html的软件有哪些
  • 装潢公司企业网站源码上海开办企业一窗通
  • 网站开发的人怎么样公司如何建设一个网站
  • 网站开发包含的项目和分工win7系统优化大师
  • 合肥商务科技学校网站建设北京网站建设工作室哪家好
  • 网站制作400哪家好网站线上分销平台有哪些
  • 温州做外贸网站做网站什么时候注册商标
  • 24小时二手表网站昆明seo网站排名优化
  • 建立一个公司的网站江苏齐力建设集团网站
  • 四川建设工程交易信息网站衣服定制app
  • 营销型网站深度网wordpress增加侧边栏
  • 西安做网站公司哪家行h5模板免费
  • wordpress分类信息导航谷歌推广优化
  • 重庆璧山网站建设网站建设结构
  • 企业网站源码生成器wordpress qq登录
  • 销售做网站名字找备案网站
  • 阿里云 备案 网站服务内容网页设计实验报告问题讨论
  • 郑州市建设厅官方网站如何修改wordpress的登录密码
  • 企业网站优化公司哪家好e建网站
  • 企业网站推广策划方法WordPress多语言多站点
  • 网站制作与建设书籍重庆市建设领域农民工工资专户网站
  • 怎么找到域名做的那个网站建站基础:wordpress安装教程图解 - 天缘博客
  • 营销型网站教程网站构成的作用
  • 找网页模板的网站好淘宝客返利网站程序