项目
介绍一些实际项目中出现的问题以及解决思路
学nm个锤子
Qtmd
展开
-
分布式架构的秒杀系统设计与实现
记录一下自己毕业设计作品的流程-基于分布式微服务架构的秒杀系统内存状态位:concurrentHashMap使用分布式锁的原因:防止秒缓存击穿异步多线程:同时去多个微服务查数据令牌桶限流:使用谷歌提供的apiMD5防止盗链,隐藏真正的秒杀接口库存list:skuid=1,skunum=100,rediskey-prefix-skuid-rediskey-suffix 1 1 1 1 1 1…死信队列:基于死信队列构建定时任务,保证消息不被重复消费,保证消息不丢失。...原创 2021-01-23 00:34:20 · 427 阅读 · 3 评论 -
单机秒杀系统的架构设计与实现
一,秒杀系统1,秒杀场景电商抢购限量商品抢购演唱会的门票火车票抢座12306…2.为什么要做个系统如果项目流量非常小,完全不用担心并发请求的购买,那么做这样一个系统的意义并不大。但是如果你的系统要是像12306一样,接受高并发访问和下单的考验,那么你就需要一套完整的流程保护措施,来保证你系统在用户流量高峰期不会被搞挂了。严格防止超卖:库存一百件,卖出去120件。防止黑产:一个人全买了,其他人啥也没有。保证用户体验:高并发下,网页打不开,支付不成功,购物车进不去,地址改不了,这个问题非常之原创 2020-12-11 01:07:21 · 589 阅读 · 2 评论 -
SpringBoot整合minio文件系统实现文件上传并返回文件的可访问路径
今天项目中甲方指定了一个以前没用过的文件服务器,捅咕半天,记录一下使用方法。1.导入依赖 <!-- springboot整合minio --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version&g原创 2020-10-16 11:55:28 · 6139 阅读 · 4 评论 -
SpringBoot利用Nginx作为文件服务器实现文件上传和访问
本来使用springboot做的文件上传本地测试没问题,但是后端部署到公司的服务器以后,前后端联调就会上传文件后,根据返回路径访问不到图片(linux并不会让你直接根据域名/路径/文件名 的方式获取资源)。解决办法:使用nginx反向代理。1.提前在服务器的nginx配置 server { listen 80; server_name 域名; location / { root html;原创 2020-10-12 23:48:22 · 6556 阅读 · 5 评论 -
关于简单权限系统的设计
一,表的结构分析我的个人思路是用户应该关联着角色,每个角色关联着对应的权限(路径),这个思路分析的话,就要建立五张表。二,业务代码分析做权限模块的设计首先要考虑两部分,对于分布式微服务架构,我们可以通过留出来一个专门的接口来给网关调用,进行鉴权,其次我们可以通过一个图形化的界面来帮助我们管理用户,角色,权限,以及它们之间的关联关系。这样我们的思路就很明确了,接口分为两部分,一部分提供给外部调用,另一部分提供给权限模块自己的图像化界面。接着再分析对外提供的接口需要做什么?根据传递过来的用户id来原创 2020-09-06 15:27:02 · 262 阅读 · 0 评论 -
分布式架构生成全局唯一自增ID
1.使用redis来生成全局唯一自增的ID适宜用redis的原子操作incr和incrby来实现。可以使用Redis集群来获取更高的吞吐量。假如一个集群中有5台Redis。可以初始化每台Redis的值分别是1,2,3,4,5,然后步长都是5。各个Redis生成的ID为: A 0 5 10 15 21 B 1 6 11 16 22 C 2 7 12 17 23 D 3 8 13 18 24 E 4 9 14 20 25比如生成订单号:可以考虑日期+redis的当日自增长好优点:1.不依原创 2020-08-26 18:27:37 · 893 阅读 · 0 评论 -
电商项目-购物车(合并购物车问题)
1.添加购物车分析 1.商品详情页添加购物车 2.商品详情页添加购物车时,先判断用户是否登陆,如果没有登录,在判断是否存在临时用户,如果cookie中也没有临时用户,则生成临时用户。 3.购物车商品与临时用户ID关联,当用户登录后,将临时用户ID的购物车商品与登录用户id的商品合并。2.临时用户处理 1.因为userId我们是从网关统一传递过来的,那么临时用户ID我们也可以从网关传递过来,改造网关。 2.在过滤器中添加一个获取当前用户临时ID的方法 3.先原创 2020-08-26 00:57:00 · 5060 阅读 · 0 评论 -
使用redisson+aop自定义注解解决缓存查询和对应问题
1.问题分析1.考虑很多线程去查数据库,对数据库冲击较大,效率也比较低。2.所以需要引入缓存。3.考虑缓存击穿,缓存失败。4.考虑redis集群宕机。5.考虑很多方法都要使用缓存,都要解决这些问题。6.锁需要支持集群7.综合以上几点,技术选型:redisson+aop+redisTemplate2.思路梳理1.首先定义一个注解,标识这个注解的方法会被我们自定义的切面获取并解析,实现查询缓存。2.可以在注解里面定义一个前缀属性,每个方法查询的数据肯定不一样,所以为了防止key重复,每个原创 2020-08-26 00:51:41 · 665 阅读 · 0 评论