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

太原市建设北路小学网站手机品牌网站

太原市建设北路小学网站,手机品牌网站,网页制作人员的工作内容,wordpress 获取时间函数springboot项目Redis统计在线用户 我的项目有个显示用户的遗忘曲线,需要统计在线用户以计算他们的曲线 思考了两种方案,但都是用Redis的bitmap数据结构Bitmap是一种特殊类型的数组,其中每个元素只能存储0或1。在Redis中,Bitmap实际…

springboot项目Redis统计在线用户

我的项目有个显示用户的遗忘曲线,需要统计在线用户以计算他们的曲线

  • 思考了两种方案,但都是用Redis的bitmap数据结构
  • Bitmap是一种特殊类型的数组,其中每个元素只能存储0或1。在Redis中,Bitmap实际上是字符串,每个字符的每一位都被视为一个独立的位,因此一个字符串可以存储多达8*字符串长度的位。 这段代码中,markUserActive方法接收一个用户ID作为参数。然后,它创建一个键,该键由字符串"active_users:"和当前日期组成,格式为ISO_DATE。这样,每天都会有一个新的键,用于存储当天活跃的用户。 然后,它使用redisUtils.setBit方法将用户ID对应的位设置为1。这里,用户ID被用作位的索引。例如,如果用户ID为10,那么第10位将被设置为1。 这样,我们就可以通过检查特定位的值来确定用户是否活跃。如果位的值为1,那么用户就是活跃的;如果位的值为0,那么用户就是不活跃的。 这种方法的优点是,它可以在非常小的空间内存储大量的信息。此外,由于Redis是内存数据库,因此这种方法的速度非常快。
方案一
  • 使用心跳包来追踪和统计用户活跃状态,客户端每隔30分钟或者一段时间给服务端发送一个心跳,服务端获取到用户id然后存储到Redis
  • 但这样的话客户端要定时任务,且依赖客户端。
方案二
  • 在用户每次请求操作的时候,由于我后端配置了Shiro的拦截器判断每次请求是否token过期,加入标记用户活跃的逻辑,并redis设置过期时间2小时
  • 缺点是资源消耗大,每次请求都要标记
@Overridepublic void markUserActive(int userId) {String key = "active_users:" + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);redisUtils.setBit(key, userId, true);// 设置2小时的过期时间redisUtils.expire(key, 2, TimeUnit.HOURS);}

markUserActive(int userId) 方法: 这个方法用于标记一个用户为活跃状态。它接收一个用户ID作为参数。方法首先构造一个键,键的格式是 “active_users:” 加上当前的日期和时间。然后,它在 Redis 数据库中将这个键对应的位(由用户ID指定)设置为 true,表示该用户是活跃的。最后,它设置这个键的过期时间为2小时。这意味着,如果2小时内没有再次标记该用户为活跃,那么这个键就会从 Redis 数据库中删除。

@Overridepublic List<Integer> getActiveUserIds() {List<Integer> activeUserIds = new ArrayList<>();// 当前时间LocalDateTime currentTime = LocalDateTime.now();for (int i = 0; i < 2; i++) {// 遍历过去2小时内的键String key = "active_users:" + currentTime.minusHours(i).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);if (redisUtils.hasKey(key)) {// 遍历1000个用户for (int j = 0; j < 1000; j++) {Boolean isUserActive = redisUtils.getBit(key, j);if (isUserActive != null && isUserActive) {activeUserIds.add(j);}}}}return activeUserIds;}
  • 但是之后测试的时候发现在查找活跃用户的时候并没有找到,可能是时间戳精度问题,所以修改代码将其key保留到分钟形式
    String key = "active_users:" + LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
    
http://www.yayakq.cn/news/107283/

相关文章:

  • 我看别人做系统就直接网站下载软件产教融合平台建设网站
  • 上海 网站建设 案例个人建筑资格证书查询
  • 邯郸建网站如何辨别官方网站
  • 茂名专业网站建设网站怎么做宣传
  • 做网站是用什么语言网站内容包括哪些
  • 大悟县城乡建设局网站巩义网站推广
  • 如何建设网站安全管理制度jsp网站开发中英文页面切换
  • 鞍山网站页设计制作wordpress搬家lnmp
  • 苏州建设网站找网络公司更新备案 网站 打开
  • 东莞市做网站微信上的网站
  • 沈阳做网站公司有哪些html5网页制作实例代码
  • 南京小程序开发公司郑州网站优化外包
  • 郑州网站建设q.479185700強wordpress justmedia
  • 宁波海曙网站开发学校网站建设成功案例
  • 企业网站 优秀接广告的网站怎么做
  • 大学网站开发策划施工企业绩效考核管理办法
  • 湘潭网站建设 水平磐石网络kleo wordpress
  • 江西省工程建设信息官方网站阜宁有做网站的吗
  • alexa全球网站排名重庆菜谱制作
  • 网站制作公司排名前十网站兼容性怎么调
  • 买的网站模板怎么做企业网站的推广阶段
  • 关注网站建设wordpress会员中心vip收费
  • 株洲网站平台搭建wordpress文章页面修改
  • 做外贸有哪些网站平台英语网站排名
  • 用dw做的代码怎么放在网站上WordPress 大数据
  • 中国南京网站企业vi设计价格
  • 小昆山网站建设wordpress安卓版怎么用
  • 怎么用centos做网站电力公司建设安全文化
  • 专门做钱币的网站网站建站流程有哪些
  • 山东建设网站广告现在哪个网站做网站好