- 博客(8)
- 收藏
- 关注
原创 Redisson快速入门,工厂模式结合AOP、SPEL动态切换锁类型与锁失败策略。
前面说到为了解决分布式环境下锁失效问题,我们最常用的一个第三方开源框架就是Redisson。
2023-07-07 00:49:39
604
1
原创 分布式锁失效问题
都会指向一个锁监视器,但是每个锁监视器同一时刻只能被一个线程持有,这样再单机模式下,不同服务的JVM当然不能通信,这样就会出现锁失效问题。这样线程2来的时候是可以获取锁的,线程2去执行业务中,线程1醒了,因为已经通过了校验,我给你锁删了,又发生了锁误删问题。当且仅当这个key不存在时setnx才能执行成功,并且返回1,其它情况都会执行失败,并且返回0.我们就可以认为返回值是1就是获取锁成功,返回值是0就是获取锁失败,实现互斥效果。锁的重入问题:同一个线程多次获取锁的场景,目前不支持,可能会导致死锁。
2023-07-04 21:24:36
1779
1
原创 兑换码生成算法
基于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
5501
6
原创 苍穹外卖day02
解释一下上述代码,每增加一个菜品会对dish表插入一条新的菜品信息,一个菜品对应多个口味信息。插入一个菜品后,通过回显记录当前菜品id,遍历口味集合,判空后将dishId设置给DishFlavor再先口味表插入数据。下面在插入口味时可以get到当前菜品的id。工和菜品时都需要设置创建时间,创建人,修改时间,修改人,以及修改时间和修改人,每次在Impl中set会产生大量重复代码。在比较枚举类型的时候==和equals都可以,但是==更好,因为equals底层其实是==去实现的。
2023-05-11 12:14:54
1326
2
原创 苍穹外卖day01
编辑没什么注意的,记得在 ServiceImpl 类中使用 BeanUtils.copyProperties将DTO的数据拷贝到我们new出来的employee,并且设置当前修改时间和修改人(BaseContext.getCurrentId())在检验JWT时已经将 id 存入Thread的局部变量。如下会扫描entity下的所有类。此项目中,由于有关查询查询需要返回data数据,这里建议在Controllor的返回类型加上泛型,而其他的业务不需要返回data只用返回code就行,所以也可以不加泛型。
2023-05-09 13:55:34
1207
2
原创 Git的入门学习
1、Git是一个分布式版本控制工具,用于来管理开发过程的源代码。2、Git分为本地仓库和远程仓库3、在本地仓库中,被Git管理的文件夹会有一个.git的隐藏文件,4、远程仓库是一个远程服务器上的 Git 仓库(常用gitee码云)commit:提交,将本地文件和版本信息保存到本地仓库push:推送,将本地仓库文件和版本信息上传到远程仓库pull:拉取,将远程仓库文件和版本信息下载到本地仓库。
2023-05-06 22:44:11
245
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人