自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 Redisson快速入门,工厂模式结合AOP、SPEL动态切换锁类型与锁失败策略。

前面说到为了解决分布式环境下锁失效问题,我们最常用的一个第三方开源框架就是Redisson。

2023-07-07 00:49:39 379 1

原创 分布式锁失效问题

都会指向一个锁监视器,但是每个锁监视器同一时刻只能被一个线程持有,这样再单机模式下,不同服务的JVM当然不能通信,这样就会出现锁失效问题。这样线程2来的时候是可以获取锁的,线程2去执行业务中,线程1醒了,因为已经通过了校验,我给你锁删了,又发生了锁误删问题。当且仅当这个key不存在时setnx才能执行成功,并且返回1,其它情况都会执行失败,并且返回0.我们就可以认为返回值是1就是获取锁成功,返回值是0就是获取锁失败,实现互斥效果。锁的重入问题:同一个线程多次获取锁的场景,目前不支持,可能会导致死锁。

2023-07-04 21:24:36 1518 1

原创 一套学会并发安全、锁失效、事务边界、事务失效

并发安全问题

2023-07-03 20:08:48 403 2

原创 兑换码生成算法

基于BitMap:兑换或没兑换就是两个状态,对应0和1,而兑换码使用的是自增id.我们如果每一个自增id对应一个bit位,用每一个bit位的状态表示兑换状态,是不是完美解决问题。而2的5次幂刚好就是32,因此5个二进制位的结果就是0~31,所以我们直接把数字转成二进制,每五个一组转10进制的结果是不是刚好对应一个角标。为了避免密钥被猜出来,我们再在32位自增长序列号前加上一个4bit位的新鲜值,4位对应了16组密钥,值是多少就取第几组的密钥,最后再把加权的和也就是签名转为二进制14bit位拼在前面。

2023-07-01 21:20:19 4147 6

原创 虚拟机一直链接超时,连接不上网络。

虚拟机网络链接超时

2023-06-28 11:27:13 643 2

原创 苍穹外卖day02

解释一下上述代码,每增加一个菜品会对dish表插入一条新的菜品信息,一个菜品对应多个口味信息。插入一个菜品后,通过回显记录当前菜品id,遍历口味集合,判空后将dishId设置给DishFlavor再先口味表插入数据。下面在插入口味时可以get到当前菜品的id。工和菜品时都需要设置创建时间,创建人,修改时间,修改人,以及修改时间和修改人,每次在Impl中set会产生大量重复代码。在比较枚举类型的时候==和equals都可以,但是==更好,因为equals底层其实是==去实现的。

2023-05-11 12:14:54 1137 2

原创 苍穹外卖day01

编辑没什么注意的,记得在 ServiceImpl 类中使用 BeanUtils.copyProperties将DTO的数据拷贝到我们new出来的employee,并且设置当前修改时间和修改人(BaseContext.getCurrentId())在检验JWT时已经将 id 存入Thread的局部变量。如下会扫描entity下的所有类。此项目中,由于有关查询查询需要返回data数据,这里建议在Controllor的返回类型加上泛型,而其他的业务不需要返回data只用返回code就行,所以也可以不加泛型。

2023-05-09 13:55:34 1058 2

原创 Git的入门学习

1、Git是一个分布式版本控制工具,用于来管理开发过程的源代码。2、Git分为本地仓库和远程仓库3、在本地仓库中,被Git管理的文件夹会有一个.git的隐藏文件,4、远程仓库是一个远程服务器上的 Git 仓库(常用gitee码云)commit:提交,将本地文件和版本信息保存到本地仓库push:推送,将本地仓库文件和版本信息上传到远程仓库pull:拉取,将远程仓库文件和版本信息下载到本地仓库。

2023-05-06 22:44:11 217

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除