- 博客(185)
- 问答 (1)
- 收藏
- 关注
原创 黑马点评项目总结
缓存穿透是指缓存失效和数据库也没有数据导致大量请求直达数据库导致服务数据库不可用缓存击穿是指同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
2025-04-03 19:27:26
1044
原创 redis的geo结构实现[附近商铺]功能
redis的geo数据结构本质是一个zset有序集合 key就是坐标对应的业务数据 value就是坐标的hash值 在这里可以将店铺分类id做为一个数据集的key 然后里面存店铺id和经纬度的集合 查询时根据分类查出下面的店铺 然后使用geosearch命令去检索出范围内的店铺。redis6.2+支持了经纬度数据格式 支持经纬度检索 需要将redis升级 否则会报错不支持命令。实际上我用我周围的坐标测 距离都是不准的 这个geo的数据存入和取出是不一致的会有误差。先写个用例提前将店铺数据导入redis。
2025-03-31 12:26:08
238
原创 使用redis完成点赞和关注数据
使用lua脚本保证一致性 如果有userId就删掉 没有就添加 然后发送消息到队列供消费端消费回写db。关注为最新的关注人显示在前面 所以要用倒序的命令reverseRange去取即可。和redis涉及写的操作都用lua保证原子性。key: 前缀+blogId。score: 当前时间戳。
2025-03-29 22:39:39
246
原创 黑马点评Feed流推送帖子zset实现
顾名思义就是投喂流 传统的信息查找方式用户需要手动去搜寻 Feed流就是不再是用户自己找 而是服务端主动投喂他喜欢/想看到的信息 考虑以下场景:张三关注了李四王五关注了李四当李四发了动态时 它的粉丝们在我的关注列表里就能看到自己关注的人发的动态且最新发布的在最上面以上场景需求捕捉:1.发布动态后要通知给所有粉丝2.粉丝读取时要能看到所有关注的人最新动态3.内容是按发布时间倒序的如何满足呢?
2025-03-29 00:56:58
299
原创 mybatis里in关键字拼接id问题
现在说一下为什么会造成这种现象, 原因是mybatis为了防止sql注入而对字符串拼接的片段会在首尾两端添加一对引号 这样就不存在and 1=1永真了 即’1011, 1012’的来源 所以在xml里写sql遍历集合还是要用foreach标签✅。
2025-03-27 16:29:10
375
原创 Data source rejected establishment of connection, message from server: “Too many connections“解决
【代码】Data source rejected establishment of connection, message from server: "Too many connections"解决。
2025-03-27 12:44:49
689
原创 springboot-mybatis-plus-starter和springboot-pagehelper-starter不兼容报错解决
原因是这两个库用的jsqlparser版本不一致导致的。
2025-03-27 12:21:58
369
原创 springboot启动事件CommandLineRunner使用
CommandRunner是springboot启动完成时会调用的一个runner 启动参数会传递到这个runner 我们能用来做一些初始化工作和缓存预热等工作。
2025-03-26 17:19:03
340
原创 黑马点评优惠券秒杀lua脚本缺失的时间判断
将下单条件写进lua脚本里判断 优惠券的库存和开始结束时间存入redis 优惠券的订单用户也写进redis里 如果秒杀成功则扣减库存 记录优惠券订单的用户做一人一单。
2025-03-25 15:49:45
242
原创 Spring事务管理和辨析
事务传播行为(Propagation Behavior)决定了当一个事务方法被另一个事务方法调用时,事务应该如何进行。例如,是否沿用现有事务、新建独立事务,或以非事务方式执行。
2025-03-22 10:28:31
233
原创 mybatis查询营业时间段内的店铺(含跨天情况)
开始时间转数字>结束时间转数字 跨天 查非营业时间段然后取反就是营业时间: not {CURTIME() <= start_time AND CURTIME() >= end_time}否则 不跨天: {start_time <= CURTIME() <= end_time}表字段用的time类型。
2025-03-12 17:38:24
119
原创 mybatis报错org/apache/commons/lang3/tuple/Pair] with root cause
mybatis一对多查询配置resultMap映射报错org/apache/commons/lang3/tuple/Pair] with root cause。
2025-03-07 11:36:03
338
原创 Failed to connect to raw.githubusercontent.com port 443 after 1 ms: Couldn‘t connect to server解决
etc/hosts写入:
2025-03-03 18:03:37
404
原创 RedisTemplate存储含有特殊字符解决
stringRedisTemplate继承了Redistemplate 使用的序列化器是默认的JdkRedisSerializer 所以会产生特殊字符前缀。自定义RedisTemplate 将数据结构的序列化器都改为StringRedisSerializer。避免使用默认的JdkRedisSerializer序列化器 自定义RedisTemplate的序列化器。
2025-02-18 02:11:09
298
原创 Bean named ‘redisTemplate’ is expected to be of type报错解决
Resource注解默认根据bean名称匹配的 名称会优先于类型 错把stringRedisTemplate写成了redisTemplate 所以注入了redisTemplate 导致类型不匹配报错。将redisTemplate改回stringRedisTemplate。不手写变量名 打出空格触发idea提示 用提示的变量名。
2025-02-18 01:12:01
140
原创 js实现两个大数的相加
当两个数的值超出int类型最大值时相加就会产生精度丢失 但是如果是字符串是不会丢失精度的 所以可以从个位开始按位想加最后拼起来。
2023-07-16 10:56:42
829
原创 使用rollup打包ts+react缓存组件发布npm
新建一个项目目录比如叫root,下面新建一个rollup的配置文件: rollup.config.ts 因为rollup良好支持ts和esmodule 所以用ts配置文件。
2023-05-05 19:31:50
1773
原创 数组移除头部元素最好的方式splice(0,1) VS shift()
经常在移除数组第一个元素时会不由自主的纠结用哪个方法好 于是深入研究了一下这两种方式的原理。
2023-04-06 19:39:34
1764
原创 js手写PromiseA+规范和六个静态方法
通过Promise构造函数new了一个实例,传入一个函数 函数入参为成功和失败的两个函数resolve和reject分别传入Promise成功的值和失败的拒因(失败的字符串或error对象) 等resolve/reject执行后拿到结果,执行promise.then传入的成功/失败的回调 所以promise.catch===promise.then(null,(reason)=>{})现在then是异步执行的了 如果executor中resolve也是在异步上下文中执行的,那就出问题了。
2023-03-29 16:44:10
498
原创 webpack+nginx开启gzip压缩部署项目
上传后我们去到/etc/nginx/conf.d目录 这个目录是nginx的子配置文件夹 里面的.conf文件会被/etc/nginx/nginx.conf主配置文件include进http节点中 我们只需要在/etc/nginx/conf.d新建子目录文件然后编写server节点即可。2.http://www.xxx.com/web publicPath: '/web/' 尾巴多加个/是因为按需加载的js拼static会少拼一个/ 拼出来就是/webstatic/js/... 导致资源加载不出来。
2023-03-25 00:28:50
1753
原创 hombrew/ubantu安装mysql8及配置
因为mysql8的用户密码认证策略由mysql_native_password变成了caching_sha2_password导致nodejs的mysql模块启动报错 mysql还不支持mysql8的最新认证策略。上述三条命令执行完之后install mysql时如果出现git相关报错就将报错中的提示命令cv执行一遍再重新执行brew install mysql即可。alter user 'root'@’%’ identified with mysql_native_password by '你的密码';
2023-03-16 22:01:07
1169
原创 react中使用socketio入门
总结: 客户端接收服务器的消息用socket.on 客户端给服务器推送消息用socket.emit。useEffect初始化建立连接 监听服务器推送的消息。客户端给服务器推送消息。
2023-03-01 21:02:34
1027
原创 前端react大文件切片上传
像视频这种大文件上传有很多缺点:1.后台可能设置了请求时长限制,太久会上传失败2.NGINX可能设置了文件上传的最大限制导致失败优点:1.文件太大分片上传能加快上传速度,提高用户体验2.能断点续传 如果上次上传失败或者中途离开的话下一次上传过的就不用重头开始了3.已经上传过的文件根据HASH查询直接秒传。
2023-03-01 20:28:35
1296
原创 浏览器缓存之强缓存和协商缓存
浏览器第一次请求一个资源的时候, 服务器返回的header中会加上Last-Modify,Last-modify是一个时间标识该资源的最后修改时间,例如Last-Modify: Thu,31 Dec 2037 23:59:59 GMT。这个时间代表着这个资源的失效时间,也就是说在xx年xx月xx日时间之前都是有效的,即命中缓存。与Last-Modify/If-Modify-Since (最后修改时间)不同的是,Etag/If-None-Match返回的是一个校验码(ETag: entity tag)。
2023-02-24 17:45:03
450
原创 移动端1像素边框问题
在移动端不同设备的dpr(物理像素比)不一样,导致1px的逻辑像素渲染出不同的粗细,比如dpr=3时1个逻辑像素点(1px)=3个物理像素点 这不是我们想要的 我们要在所有不同dpr的设备上显示1px的效果保持一致。
2023-02-17 20:30:22
330
原创 @craco/craco复写cra项目配置
cra内置了HtmlWebpackPlugin插件,直接用cra的getPlugin方法获取插件实例即可。cra默认打包后的产物文件夹名build,我们习惯性的叫dist。
2023-02-04 13:42:06
3687
原创 LeetCode 203 移除链表元素
这道题要删除全部符合val的节点,所以要在循环查找目标节点的同时移除节点。输入:head = [1,2,6,3,4,5,6], val = 6。输入:head = [7,7,7,7], val = 7。输入:head = [], val = 1。删除链表中等于给定值 val 的。输出:[1,2,3,4,5]
2023-01-27 14:44:21
168
原创 LeetCode 59 螺旋矩阵II js
如果n为奇数 我们还要处理中间值 n为偶数时遍历完就填充好了 奇数会漏掉中间的位置 需要手动填充。所有元素(n✖️n的正方形矩阵),且元素按顺时针顺序螺旋排列的。每遍历完一圈,下一圈遍历的起始位置就要+1,结束的边界位置也要-1。上行--->从左到右。右行--->从上到下。下行--->从右到左。左行--->从下到上。
2023-01-16 10:28:09
281
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人