黑马点评
文章平均质量分 90
LDM>W<
大二|网络工程
java后端&网工|努力学习者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
黑马点评-分布式锁Lua脚本
这个时候线程2来获取这个锁成功了,这个时候线程1的业务完成了,线程1就直接把这个redis锁给释放了,而线程2还在执行自己的业务,这是线程3也来获取锁成功,也执行业务,可能再次发生线程安全问题。不同服务器内部有不同的JVM,每个JVM里面有不同的锁监视器,每一个锁都可以有一个线程获取。指定的key不存在时,将key的值设为value,如果设置成功返回1,如果key已经存在,就不做任何操作,返回0。,要准备释放这个锁的时候发生了阻塞(JVM内部垃圾回收),锁过期,线程2来获得,线程1恢复正常后直接就释放锁。原创 2025-05-25 14:39:08 · 1467 阅读 · 0 评论 -
黑马点评-乐观锁/悲观锁/synchronized/@Transactional
这时候,可能会出现多个线程同时通过第5.1步的查询(count=0),然后都进入扣减库存和创建订单的步骤,导致用户A创建了多个订单,违反了“一人一单”的要求。2.或者在网上订票,系统显示还有1个座位,你点击预订,系统会先让你填写信息,然后提交的时候检查是否还有座位。了,也查到为1,线程1按照逻辑扣减库存,线程2也按照逻辑扣除库存,这样就导致最终库存为-1。更多个线程,可能导致库存更低,这就是超卖。本质还是版本思想,做了简化,每个线程在查询到库存后,要想修改数据,必须在当前库存基础上实现,否则不成功。原创 2025-05-24 16:26:46 · 796 阅读 · 0 评论 -
黑马点评-Redis缓存更新/穿透/雪崩/击穿
在我们之前的想法就是,根据key查redis,redis里有的话直接返回其中的数据,如果没有,就查数据库的数据返回,并同时将数据库里查到的数据保存在redis里,这样下一次查询的速度就会更快。A先查询缓存,恰好失效了没命中,查数据库(10),但此时立刻来了B来更新数据库(改为20),然后删除缓存,最后A将之前查到的数据库(10)写入缓存,最后导致缓存(10)和数据库(20)不一致。指定的key不存在时,将key的值设为value,如果设置成功返回1,如果key已经存在,就不做任何操作,返回0。原创 2025-05-19 14:03:57 · 917 阅读 · 0 评论 -
黑马点评-短信验证码登录/校验登录
我们从数据库根据手机号查找,如果没有,我们就根据手机号创建用户,保存在数据库中,同时,生成随机token作为key,也将用户信息也保存在redis中,这里redis采用Hash结构(Redis 的 Hash 结构中,不过呢,这里存在一个问题,比如说用户登录后,但他一直访问的是不需要拦截的页面,这里就没有进行更新redis有效期操作,那用户30分钟后就被清空了redis数据,这不合常理。里取出来)校验,通过后,我们要知道这个人到底注册过没有,从而进行相应的注册或登录。4.刷新token有效期。原创 2025-05-18 00:08:45 · 627 阅读 · 0 评论
分享