短链接day8

短链接监控

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

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

记录短链接访问日志

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.mfbz.cn/a/802232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt 多语言

记录Qt多语言的实现过程 目录 1.项目配置文件.pro配置 2.程序中的字符串用tr()封装 3.生成翻译文件 4.使用Qt语言家修改翻译文件 4.1使用Qt语言家打开 4.2 .更改文件配置 5. 生成qm文件 6.代码执行切换语言 6.1入口处 6.2 事件执行 0.效果 1.项目配置文件.pro配置 T…

集合媒体管理、分类、搜索于一体的开源利器:Stash

Stash&#xff1a;强大的媒体管理工具&#xff0c;让您的影音生活井井有条- 精选真开源&#xff0c;释放新价值。 概览 Stash是一个专为个人媒体管理而设计的开源工具&#xff0c;基于 Go 编写&#xff0c;支持自部署。它以用户友好的界面和强大的功能&#xff0c;满足了现代用…

2024华为数通HCIP-datacom最新题库(变题更新⑥)

请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了&#xff0c;如果你准备去考试&#xff0c;还是用的之前的题库&#xff0c;切记暂缓。 1、…

ModuleNotFoundError: No module named ‘_cffi_backend‘的二中情况解决方案

1、问题概述? 创作时间:2024年7月 在pycharm中执行python脚本出现如下问题: No module named _cffi_backend 主要说明二中情况: 第一种原因:最常见的原因就是没有安装cffi模块,我们通过命令安装就可以了。 第二种原因:不常见的原因,如果你在pycharm中运行了别人的…

【UE5.1】NPC人工智能——02 NPC移动到指定位置

效果 步骤 1. 新建一个蓝图&#xff0c;父类选择“AI控制器” 这里命名为“BP_NPC_AIController”&#xff0c;表示专门用于控制NPC的AI控制器 2. 找到我们之前创建的所有NPC的父类“BP_NPC” 打开“BP_NPC”&#xff0c;在类默认值中&#xff0c;将“AI控制器类”一项设置为“…

记录些MySQL题集(8)

ACID原则、事务隔离级别及事务机制原理 一、事务的ACID原则 什么是事务呢&#xff1f;事务通常是由一个或一组SQL组成的&#xff0c;组成一个事务的SQL一般都是一个业务操作&#xff0c;例如聊到的下单&#xff1a;「扣库存数量、增加订单详情记录、插入物流信息」&#xff0…

gradle学习及问题

一、下载安装 参考&#xff1a;https://blog.csdn.net/chentian114/article/details/123344839 1、下载Gradle并解压 安装包&#xff1a;gradle-6.7-bin.zip 可以在idea的安装目录查看自己适配的版本 路径&#xff1a;D:\IDEA2021.3\plugins\gradle\lib 下载地址&#xff1a…

idea中使用maven

默认情况下&#xff0c;idea会自动下载并安装maven&#xff0c;这不便于我们管理。 最好是自行下载maven&#xff0c;然后在idea中指定maven的文件夹路径

VMware安装CentOS 7

在虚拟机中安装无论是Windows还是Linux其实都差不多&#xff0c;主要还是需要熟悉VMware的使用&#xff0c;多新增几次就熟悉了&#xff0c;可以反复删除再新增去练习… 如下是安装CentOS 7 安装过程&#xff1a; VMare Workstation 16 PRO 中安装CentOS 7 CentOS 7 下载推荐…

工业三防平板可优化工厂流程管理

在当今高度自动化和数字化的工业生产环境中&#xff0c;工业三防平板正逐渐成为优化工厂流程管理的关键工具。其强大的功能和卓越的性能&#xff0c;为工厂带来了更高的效率、更低的成本以及更出色的质量控制。 工业三防平板&#xff0c;顾名思义&#xff0c;具备防水、防尘、防…

在AWS创建一台Windows主机并登录

正文共&#xff1a;1111 字 21 图&#xff0c;预估阅读时间&#xff1a;1 分钟 因为之前微软云Azure免费&#xff0c;我们还做了简单的测试&#xff08;白嫖党618福利&#xff01;来Azure领200美刀&#xff01;外加云主机免费用一年&#xff01;&#xff09;&#xff1b;并且通…

linux中.a和.so库文件

区别 在Linux系统中&#xff0c;.a和.so文件是两种常见的库文件格式&#xff0c;它们在功能、使用方式及编译链接过程中存在显著的区别。以下是这两类文件的具体区别&#xff1a; 1. 文件类型与功能 .a文件&#xff1a; 类型&#xff1a;归档库文件&#xff0c;也称为静态库。…

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…

微软研究人员为电子表格应用开发了专用人工智能LLM

微软的 Copilot 生成式人工智能助手现已成为该公司许多软件应用程序的一部分。其中包括 Excel 电子表格应用程序&#xff0c;用户可以在其中输入文本提示来帮助处理某些选项。微软的一组研究人员一直在研究一种新的人工智能大型语言模型&#xff0c;这种模型是专门为 Excel、Go…

MongoDB常用命令大全

文章目录 一、MongoDB简介二、服务启动停止备份三、数据库相关四、集合操作五、文档操作六、其他常用命令 一、MongoDB简介 MongoDB是一款流行的NoSQL数据库&#xff0c;以其灵活的文档模型、高可用性、易于扩展等特性而受到广泛关注。 MongoDB 是由C语言编写的&#xff0c;是…

<数据集>UA-DETRAC车辆识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;20500张 标注数量(xml文件个数)&#xff1a;20500 标注数量(txt文件个数)&#xff1a;20500 标注类别数&#xff1a;4 标注类别名称&#xff1a;[car, van, others, bus] 序号类别名称图片数框数1car201871259342…

Excel 学习手册 - 精进版(包括各类复杂函数及其嵌套使用)

作为程序员从未想过要去精进一下 Excel 办公软件的使用方法&#xff0c;以前用到某功能都是直接百度&#xff0c;最近这两天跟着哔哩哔哩上的戴戴戴师兄把 Excel 由里到外学了一遍&#xff0c;收获良多。程序员要想掌握这些内容可以说是手拿把掐&#xff0c;对后续 Excel 的运用…

在 Linux 系统中安装MySQL 8.x(Ubuntu和CentOS)

文章目录 0. 前言1. 查看 Linux 的发行版本2. 在 Ubuntu 中安装MySQL 8.x2.1 更新包索引2.1.1 更改 Ubuntu 的镜像源2.1.2 更新软件包、升级软件包&#xff08;耗时可能较长&#xff09;2.1.3 可能遇到的问题 2.2 安装MySQL2.3 安全配置2.3.1 密码安全级别2.3.2 删除匿名用户2.…

【算法笔记自学】第 9 章 提高篇(3)——数据结构专题(2)

9.1树与二叉树 #include <cstdio>int main() {int n, m;scanf("%d%d", &n, &m);printf(n m 1 ? "Yes" : "No");return 0; } 9.2二叉树的遍历 #include <cstdio> #include <vector> using namespace std;const int…

NLP入门——RNN、LSTM模型的搭建、训练与预测

在卷积语言模型建模时&#xff0c;我们选取上下文长度ctx_len进行训练&#xff0c;预测时选取句子的最后ctx_len个分词做预测&#xff0c;这样句子的前0~seql-1-ctx_len个词对于预测没有任何帮助&#xff0c;这对于语言处理来说显然是不利的。 在词袋语言模型建模时&#xff0c…