短链接day8

news2024/12/23 20:48:04

短链接监控

开发访问单个短链接监控统计功能

不知道是哪里复制错了,反正就是一顿报错,改了这个又改那个,还是报错。。暂时不管了。

记录短链接访问日志

logdo新增networt、device、local属性。

分页查询短链接访问日志

分页查询短链接今日以及历史访问信息设计

统计短链接汇总访问数据

不知道为什么我的后管系统报错【用户Token验证失败】,但是调试中,只有admin的filter用来两次,其中都没有走错误,所以不知道会报错。。。导致后面的都无法校验了。

统计短链接监控之今日数据访问

分页查询短链接监控数据排序功能

COALESCE(s.today_pv, 0) AS todayPv 这段代码的作用是:如果 s.today_pv(即某个表 s 中的 today_pv 字段)的值为NULL,则使用0作为替代值;如果 s.today_pv 不是NULL,则直接使用 s.today_pv 的值。最后,这个表达式的结果被命名为 todayPv

要做绑定表的设置:

    bindingTables:
      - t_link, t_link_stats_today

exist:在某些场景下,我们可能想要表示某个属性不应该映射到数据库表的任何列上。

    @TableField(exist = false)

统计短链接监控之指定时间内PV、UV、UIP数据

统计分组短链接监控数据

分页查询分组短链接访问日志

功能扩展

短链接创建时指定默认域名

application.yml

short-link:
  domain:
    default: nurl.ink:8001

通过以下获取:

@Value("#{short-link.domain.default}")
    private String createShortLinkDefaultDomain;

shortlinkserverceimpl的restoreUrl增加这一部分。 

        String serverPort=Optional.of(request.getServerPort())
                .filter(each->!Objects.equals(each,80))
                .map(String::valueOf)
                .map(each->":"+each)
                .orElse("");
        String fullShortUrl=servername+serverPort+"/"+shortUrl;

批量创建短链接

为什么短链接中台返回标准数据,后管返回Excel?

因为短链接中台是提供通用能力的中台,供N多客户端系统使用,不只是短链接后管,应该返回公共的返回参数,而不是直接返回 Excel 流。

因为可能有些某些其他客户端系统不做 Excel 流处理,如果客户端系统希望这种交互,让他们根据返回参数自己做处理就好。

修复短链接跳转空指针问题

做判空处理:shortLinkDO.getValidDate()!=null

修复短链接修改有限期后无法跳转问题

如果有效期与之前不一致了,需要将缓存删除

hasShortLinkDO是数据库中查到的数据
// 短链接如何保障缓存和数据库一致性?详情查看:https://nageoffer.com/shortlink/question
        if (!Objects.equals(hasShortLinkDO.getValidDateType(), requestParam.getValidDateType())
                || !Objects.equals(hasShortLinkDO.getValidDate(), requestParam.getValidDate())
                || !Objects.equals(hasShortLinkDO.getOriginUrl(), requestParam.getOriginUrl())) {
            stringRedisTemplate.delete(String.format(GOTO_SHORT_LINK_KEY, requestParam.getFullShortUrl()));
            Date currentDate = new Date();
            if (hasShortLinkDO.getValidDate() != null && hasShortLinkDO.getValidDate().before(currentDate)) {
                if (Objects.equals(requestParam.getValidDateType(), VailDateTypeEnum.PERMANENT.getType()) || requestParam.getValidDate().after(currentDate)) {
                    stringRedisTemplate.delete(String.format(GOTO_IS_NULL_SHORT_LINK_KEY, requestParam.getFullShortUrl()));
                }
            }
        }

短链接变更分组记录功能

之前的代码逻辑,如果存在短链接记录修改分组,那么就会变成短链接记录不存在问题。

  1.  删除原始短链接记录t_link表是更具gid进行分表的,若修改短链接的gid,则需要先删除原gid分表中的记录,再在新gid分表中插入修改后的短链接记录。

  2. 修改唯一索引:

用url+flag如果修改后还在同一个表中,最多你就只能修改这一次,多一次都改不了,用了时间戳,想改多少次都可以。

3. 迁移相关业务表数据

将短链接相关的表进行数据修改,如果涉及到分片行为,先删除原有数据再新增。如果不涉及分片行为,只需要修改对应的数据库表记录即可。

4. 引入读写锁

如果短链接正在修改分组,这时有用户正在访问短链接,统计监控相关的分组还是之前的数据,是否就涉及到无法正确统计监控数据问题?

引入分布式锁?

引入分布式锁,则同一时间仅允许一个用户访问,显然不现实。

引入读写锁?

原来没有获取锁,现在获取了,其实还是会有性能损耗的,可能几十毫秒。。。

但是这里为了实现功能,引入读写锁是没毛病的。

5.引入延迟队列 

如果用户正在修改短链接分组,因为涉及到表操作很多,我们假设可能会操作 300ms。

这 300ms 内难道就不允许用户访问?

可以用mq或者redis基于redisson的队列...

6. 回收站删除

因为加了 del_time,所以回收站删除功能也要改造。

7. 修改短链接分组查询数量接口

添加 del_flag 条件。

短链接创建和修改验证跳转链接白名单

  short-link:
    goto-domain:
        white-list:
          enable: true
          names: '拿个offer,知乎,掘金,博客园'
          details:
            - nageoffer.com
            - zhihu.com
            - juejin.cn
            - cnblogs.com

变更用户已登录状态下异常行为

用户已登录状态如果重复登录返回Token:

用户登录实现类中

        Map<Object, Object> hasLoginMap = stringRedisTemplate.opsForHash().entries(USER_LOGIN_KEY + requestParam.getUsername());
        if (CollUtil.isNotEmpty(hasLoginMap)) {
            stringRedisTemplate.expire(USER_LOGIN_KEY + requestParam.getUsername(), 30L, TimeUnit.MINUTES);
            String token = hasLoginMap.keySet().stream()
                    .findFirst()
                    .map(Object::toString)
                    .orElseThrow(() -> new ClientException("用户登录错误"));
            return new UserLoginRespDTO(token);
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Bind提供的域名解析服务

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、DNS域名解析服务 二、安装Bind服务程序 1、正向解析 2、反向解析 三、部署从服务器 四、安全的加密传输 五、部署缓存服务器 六、分…

AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS

偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法&#xff0c;它集中了主成分分析、典型相关分析和线性回归的特点&#xff0c;特别在解决回归中的共线性问题具有无可比拟…

在JavaScript中,什么是解构赋值(destructuring assignment)?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介在JavaScript中&#xff0c;什么是解构赋值&#xff08;destructuring assignment&#xff09;&#xff1f;1. 引言2. 解构赋值的概念3. 数组解构赋值3.1 基本语法3.2 跳过元素3.3 默认值3.4 交换变量值 4. 对象解构赋值4.1 基本语…

“解锁物流新纪元:深入探索‘沂路畅通‘分布式协作平台“

"解锁物流新纪元&#xff1a;深入探索沂路畅通分布式协作平台" 在21世纪的数字浪潮中&#xff0c;物流行业作为连接生产与消费的关键纽带&#xff0c;其重要性不言而喻。然而&#xff0c;随着市场规模的持续扩大和消费者需求的日益多样化&#xff0c;传统物流模式已…

150个pb网站模板(都是成品网站,上传php空间即可使用),建站必备

一网友提供的150个pb网站模板&#xff0c;其实就是成品网站&#xff0c;上传php空间即可使用&#xff0c;属于建站公司或者建站开发人员必备的资源。 一共150个基于pb的成品网站&#xff0c;基本上都可以找到适应你手头客户需要的一款&#xff0c;简单修改一下即可交活收钱了。…

LinuxShell编程1———shell基础命令

文章目录 前言 一、shell基础知识 1、shell概念 2、Shell的功能 接收&#xff1a;用户命令 调用&#xff1a;相应的应用程序 解释并交给&#xff1a;内核去处理 返还&#xff1a;内核处理结果 3、Shell种类&#xff08;了解&#xff09; 3.1、MS-DOS 3.2、Windows的…

图片在线怎样做二维码?制作二维码展示图片的制作方法

图片想要更快捷的分享给其他人展示&#xff0c;除了通过网站平台之外&#xff0c;比如朋友圈、qq空间、微博等方式外&#xff0c;现在很多人也会通过生成二维码的方法&#xff0c;让其他人可以通过扫描二维码查看图片。图片转换二维码的好处有很多&#xff0c;比如可以节省空间…

【C++航海王:追寻罗杰的编程之路】智能指针

目录 1 -> 为什么需要智能指针&#xff1f; 2 -> 内存泄漏 2.1 ->什么是内存泄漏&#xff0c;以及内存泄漏的危害 2.2 -> 内存泄漏分类 2.3 -> 如何避免内存泄漏 3 -> 智能指针的使用及原理 3.1 -> RAII 3.2 -> 智能指针的原理 3.3 -> std…

IDEA创建普通Java项目

环境准备 Java环境 运行javac查看java环境是否安装完成 开发工具Intellij IDEA 下载地址&#xff1a;https://www.jetbrains.com/idea/download/?sectionwindows 创建项目 点击新建项目 填入项目名字&#xff0c;项目路径&#xff0c;选择maven,点击下面的创建 运行项目 …

贪心,CF 1891C - Smilo and Monsters

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1891C - Smilo and Monsters 二、解题报告 1、思路分析 操作二显然很划算的&#xff0c;但是操作2有代价&#xff0c;为了更划算&#xff0c;我们要让操作2的操作次数最少 即&#xff0c;操作二尽可能用在…

Apollo docker-compose

来源 https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 路径 /usr/apollo Sql 自己复制 Vim docker-compose.yml #如果安装过了 记得删除mysql 历史文件 rm -r /var/lib/mysql version: 2.1services:apollo-quick-start:image: nobodyiam/apollo-quick…

MongoDB教程(六):mongoDB复制副本集

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

React 速通笔记

前言 最近刚学完 React&#xff0c;想着把笔记分享给大家&#xff0c;本笔记特别适合从事后端想要学习前端的人。我看视频是黑马最新的 React 视频&#xff08;黑马程序员前端React18入门到实战视频教程&#xff0c;从reacthooks核心基础到企业级项目开发实战&#xff08;B站评…

Windows 2012安装之实现远程连接

新建虚拟机 点击稍后安装操作系统 点击Microsoft Windows(W) 选择Windows Server 2012 设置虚拟机名称、安装位置 选择你的电脑核数 点击编辑虚拟机设置 点击CD/DVD(SATA) 使用ISO映像文件(M) 配置完之后点击确定 然后开启虚拟机 下一步&#xff1a; 点击现在安装&#xff1a…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动大屏_硬件SPI4_参考代码(v1.3)

单片机实际不限&#xff0c;这里采用的STC最新、主推的型号&#xff0c;比如STC8H8K64U、STC8051U34K64进行实验测试&#xff0c;您可以换用不同型号。目前测试这两个系列&#xff0c;显示速度均相当不错&#xff0c;软件设计也是极为简单。各篇文章下方均提供源码供参考下载。…

Java 反射用法和8道练习题

目录 一、什么是反射二、反射的核心接口和类三、测试代码 Bean 类和目录结构Person 类代码目录结构 四、获取 Class 对象五、获取构造方法 Constructor 并使用六、获取成员变量 Field 并使用七、获取成员方法 Method 并使用八、练习1. 使用反射获取String类的所有公有方法&…

在python里构建你的投资组合portfolio--最好用的pandas零基础

有人可能觉得软件数据分析门槛很高&#xff0c;自学也坚持不下来&#xff0c; 其实分解成一个小的功能和任务&#xff0c;对零基础自学者非常有帮助。 今天用python中最好用的数据分析包pandas为例&#xff1a; 用最简单的代码完成全流程 构建投资组合 → 获取数据 → 进行分…

均匀性大于98%均匀光源积分球

在光学技术的浩瀚星空中&#xff0c;均匀光源积分球犹如一颗璀璨的明珠&#xff0c;以其卓越的均匀性能&#xff0c;照亮了科研、检测、照明等多个领域的探索之路。当谈及均匀性超过98%的积分球时&#xff0c;我们不禁要深入其内部&#xff0c;探索这一科技奇迹背后的原理与应用…

phenocycler发现免疫治疗反应关键的肿瘤微环境区域

T 细胞介导的抗原特异性反应对于有效的免疫监视至关重要。然而T细胞如何进入肿瘤微环境并操纵局部组织微环境来实现效应器功能&#xff0c;以及这些局部的细胞结构如何对T细胞疗法或者其他免疫治疗做出反应仍然不清楚。近期来自斯坦福大学的研究者利用小鼠模型和临床患者样本&a…

10位工程师做SW大装配设计工作站怎么选

在日益复杂的工程环境中&#xff0c;SolidWorks&#xff08;SW&#xff09;作为一款全球装机量较大的三维设计、动画、仿真模拟计算软件&#xff0c;已成为工程师们不可或缺的工具。 对于涉及大型装配设计的项目&#xff0c;选择一款合适的SW工作站显得尤为关键。在选择SW大装…