随笔分类 -  高并发秒杀系统方案

摘要:基于Redis的分布式锁 使用常用命令 SETNX SETNX key val当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。 Expire expire key timeout 为key设置一个超时时间,单位为second,超过这个时间锁会自动 阅读全文
posted @ 2019-02-22 14:28 虚极静笃 阅读(226) 评论(0) 推荐(0)
摘要:Nginx优化: 两个监控工具: Nginx配置并发、长连接、压缩、状态监控: 关闭和重启: 在该文件下添加属性: 客户端和nginx之间的长连接: 服务器和nginx之间的长连接(这里如果30s内两次失败,那么该服务器会被踢出去:): 然后测试一下有没有问题: 访问(有时8080,有时8081): 阅读全文
posted @ 2018-03-16 11:51 虚极静笃 阅读(397) 评论(0) 推荐(0)
摘要:Tomcat优化包括: 1.内存优化 2.并发优化 3.APR优化 注意:这里讲的tomcat版本是8.5.20,其他版本不一定适用。 第一:内存优化catalina 找到JAVA_OPTS,加入如下: 第二节:并发优化 把该节点改为如下: 第三节:其他优化 以下都是默认的,不用改 接下来把ajp禁 阅读全文
posted @ 2018-03-16 09:53 虚极静笃 阅读(8198) 评论(0) 推荐(0)
摘要:并发的问题,瓶颈就在数据库,所以我们要加缓存。 从用户发请求开始,我们可以把页面缓存在用户的浏览器端,请求在到达我们的网站之前我们可以部署一些CDN节点,让请求首先访问CDN。 然后我们可以在nginx加缓存,接着到应用程序的页面缓存,然后到对象缓存,最后才到达数据库 阅读全文
posted @ 2018-03-15 14:03 虚极静笃 阅读(155) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2018-03-15 13:53 虚极静笃 阅读(127) 评论(0) 推荐(0)
摘要:补充: 实际项目中的主键不能用自增id,我们可以用snowflake算法。 参考:http://mp.weixin.qq.com/s/bIkdcYo32yTEOGn0t8ABeg 核心代码: 阅读全文
posted @ 2018-03-14 15:51 虚极静笃 阅读(295) 评论(0) 推荐(0)
摘要:编程要有一个习惯:做参数校验 所谓的分布式session:就是用redis统一管理session。 我们这里的思路是:把token写入cookie中,客户端在随后的访问中携带cookie,服务端就能根据cookie中携带的token去redis中查找到user信息。 这里要注意:session的有效 阅读全文
posted @ 2018-03-14 10:33 虚极静笃 阅读(575) 评论(0) 推荐(0)
摘要:由于秒杀的并发量太大,所以仅仅使用缓存是不够的,还需要用到RabbitMQ。 这里推荐一款用于分库分表的中间件:mycat 解决超卖的问题(看第五章节): 秒杀接口优化: 实操: 然后把下载好的文件上传到服务器上: 验证一下: OK,到这一步,erlang安装好了。 启动rabbitMQ: 关闭: 阅读全文
posted @ 2018-03-13 15:32 虚极静笃 阅读(4790) 评论(0) 推荐(0)
摘要:页面静态化(注意和页面缓存的区别):直接把html缓存到用户的浏览器上,动态数据通过接口从服务器获取。 所谓的页面静态化或者说前后端分离,就是html+ajax。 阅读全文
posted @ 2018-03-13 14:14 虚极静笃 阅读(206) 评论(0) 推荐(0)
摘要:页面缓存(如果redis缓存里有就直接返回,如果没有的话就进行手动渲染,同时放入redis缓存): 注意一点,页面缓存一般有效期都不长,以防止更新不及时。 对象缓存(注意,更新数据库以后一定要记住更新缓存或者删除缓存): 注意,一个service引用别人的时候一定要引用别人的service,因为有可 阅读全文
posted @ 2018-03-13 09:54 虚极静笃 阅读(967) 评论(0) 推荐(0)
摘要:然后修改下入口: 这样程序既可以以war也可以以jar的形式run。 右键项目properties,找到项目位置,然后: 然后放到tomcat的webapps的目录下: 然后启动tomcat:startup.bat 阅读全文
posted @ 2018-03-12 23:02 虚极静笃 阅读(219) 评论(0) 推荐(0)
摘要:然后依次测试如下命令: 上面第三个命令写错了,要改为: 阅读全文
posted @ 2018-03-12 22:42 虚极静笃 阅读(277) 评论(0) 推荐(0)
摘要:JMeter在windows下图形界面的使用: 下载: 解压后: 双击打开: 压测不带参数的接口: 然后保存,查看结果: 然后更改线程数多测试几次。 下面我们边用测试边看服务器的负载情况: 这里说个小技巧,怎样使登录服务器的时候直接显示这个画面呢? 明白了吧?直接复制到该文件下即可。 言归正传,执行 阅读全文
posted @ 2018-03-12 22:22 虚极静笃 阅读(9646) 评论(0) 推荐(0)
摘要:补充: 用户登录: http协议是在网络上是明文传输,如果数据包被截取到了,那么别人就会得到明文密码。 第一次MD5是防止用户的明文密码在网络上传输 第二次MD5是防止数据库泄露以后密码被反查出 GlobalException: GlobalExceptionHandler: 然后service层需 阅读全文
posted @ 2018-03-12 20:09 虚极静笃 阅读(2927) 评论(0) 推荐(0)
摘要:如何验证呢: 第一步,加上注解@Valid 第二步,在属性上加注解 自定义校验器: ValidatorUtil : IsMobileValidator: 阅读全文
posted @ 2018-03-12 18:38 虚极静笃 阅读(1741) 评论(0) 推荐(0)
摘要:1.集成Mybatis 第一步,添加依赖: 第二步:配置properties: 在这里我们测试了一下事务: UserService: UserDao: 2.安装redis: 下载Redis:https://redis.io/ redis的配置文件(vim进入的时候,输入/+关键字是从上往下搜索,?+ 阅读全文
posted @ 2018-03-12 15:10 虚极静笃 阅读(449) 评论(0) 推荐(0)
摘要:项目框架搭建: DemoController: CodeMsg: Result: MainApplication: hello.html: application.properties: 阅读全文
posted @ 2018-03-12 11:56 虚极静笃 阅读(712) 评论(0) 推荐(0)
摘要:memcatch相比redis而言,无法做持久化。 JSR303:服务端的验证框架。 首先我们可以将静态页面缓存在用户的浏览器端或者是手机端,然后用户的请求会到达CDN(网站的缓存和镜像),进一步到达网关(我们这里是nginx,在nginx上继续做缓存),再到我们的应用服务器(同样可以做缓存(red 阅读全文
posted @ 2018-03-12 10:33 虚极静笃 阅读(358) 评论(0) 推荐(0)