- 博客(22)
- 收藏
- 关注
原创 Redis-黑马点评项目-07-jmeter测试-200个线程抢购100个秒杀券超卖问题
在高并发场景下,秒杀系统容易出现超卖问题。本文通过Java代码展示了如何利用乐观锁(CAS)解决这一问题。代码中,通过判断库存是否大于0来确保库存扣减的原子性,避免超卖。同时,使用Redis生成全局唯一订单ID,确保订单的唯一性。在测试过程中,通过JMeter模拟高并发场景,发现数据库中的库存已全部售出,但测试结果未达到预期。通过清理缓存和添加响应断言,最终验证了系统的正确性。最终效果图显示,系统在高并发下能够正确处理库存扣减和订单生成,解决了超卖问题。
2025-05-22 16:53:37
203
原创 Redis-黑马点评项目-06-jmeter测试-200个线程抢购秒杀券全部报错401问题
在性能测试中,200个线程报错401,表明请求未授权。问题出在路径/voucher-order/seckill/22需要登录验证,而测试工具JMeter未携带有效的token。解决方法是获取有效的token(HASH码),并在JMeter中添加一个Http信息头管理器,将token以键authorization的形式放入。这样,JMeter在发送请求时会携带授权信息,从而避免401错误。
2025-05-22 14:57:23
165
原创 Redis-黑马点评项目-05-postman测试-新增优惠券报错以及前端展示优惠劵报错NaN问题
在使用Postman向数据库添加优惠券信息时,遇到了JSON解析错误。错误信息显示,beginTime字段的当前令牌(VALUE_STRING)不是数字,无法使用数字值访问器。原因是JacksonConfig.java中配置了从JSON中读取时间戳(毫秒值),而原始请求体中传递的是日期字符串"2022-01-26T10:09:17"。
2025-05-21 21:31:28
418
原创 Redis-黑马点评项目-04-使用逻辑过期来解决缓存击穿问题
在高并发环境下,只查了一次数据库,而且我们故意修改的是,数据库和redis数据不一样,这样过期了,就会有一个线程去修改,也只能由一个修改,谁拿到了锁就修改呗,也就是查数据库,写回到redis,其他线程,在修改之前查询返回的是旧数据,可能会出现短时间数据不一致问题。以防有一个线程完成缓存重建,刚刚释放完lock,另外一个线程拿到lock,再判断一下是否完成有没有这个key,若有,就判断是否到期,没到期就会直接返回,2次返回前都是先执行的finally,保证锁被释放。无法解析符号 ‘zset’
2025-05-20 22:54:08
723
原创 Redis-黑马点评项目-03-使用RedisSETNX模拟锁来解决缓存击穿问题
本文介绍了一种基于Redis的分布式锁方案,结合布隆过滤器解决缓存穿透问题。方案的核心是通过Redis的SETNX命令实现分布式锁,确保在高并发场景下,只有一个线程能够访问数据库,避免缓存击穿。同时,利用布隆过滤器预先判断数据是否存在,防止无效请求穿透缓存直接访问数据库。代码实现中,首先通过布隆过滤器判断请求的ID是否存在,若不存在则直接返回错误。若存在,则尝试从Redis缓存中获取数据,若缓存未命中,则尝试加锁并查询数据库。查询成功后,将结果写入缓存并释放锁。通过该方案,可以有效提升系统的并发处理能力和缓
2025-05-19 23:21:10
137
原创 Redis-黑马点评项目-02-使用布隆过滤器来解决缓存穿透问题
本文介绍了如何通过Redisson实现布隆过滤器来优化查询性能,避免缓存穿透问题。首先,在pom.xml中引入Redisson依赖,然后编写配置类注册RedissonClient对象。接着,实现布隆过滤器类,将所有店铺ID加载到布隆过滤器中。在查询时,通过布隆过滤器拦截无效的店铺ID,避免直接查询数据库。最后,文章提到需要动态更新布隆过滤器以应对店铺ID的增删操作,并展示了拦截效果图。通过这种方式,可以有效提升系统性能并减少不必要的数据库查询。
2025-05-19 20:31:59
482
原创 Redis-黑马点评项目-01-postman测试-时间戳-localDate序列化问题
安装postman后发送请求地址和请求体中,采用 RestFul 风格,修改采用putIDEA报错:原来是Jackson无法将时间戳转换为LocalDateTime 类型数据。
2025-05-19 17:02:54
465
原创 IDEA 中github首次使用细节
因为要用开启了代理模式(魔法)来访问github,所以要修改git提交的端口号,弄了一个脚本文件,使用后开启代理端口号,报错消失,访问完可以恢复。
2025-05-10 22:07:02
177
原创 MyBatis之动态生成类
MyBatis底层使用的就是Javassist,在内存中生成class文件,然后就不用写dao层的实现类了。也把这个放到环境变量中,就不会报错了。
2025-04-22 21:36:04
387
原创 MyBatis事务管理与jdbc事务管理代码对照关系
具体对照关系,写在了代码里面,MyBatis采用JDBC事务管理方式时,实际上底层封装JDBC事务管理机制。
2025-04-17 12:37:58
166
原创 包装类中的字符串转换API对比
Double.parseDouble() 转的是普通double 类型。Double.valueOf() 转的是包装类。:都是字符串转数字类型。
2025-04-16 22:48:41
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人