3 张伟光

尚未进行身份认证

好玩的不是技术,好玩的是用技术玩转业务

等级
TA的排名 8k+

SpringBoot使用RateLimiter通过AOP方式进行限流

引言:我们为了防止接口防刷操作,我们需要对接口做一些处理,如下是简单的对接口进行防刷的操作,具体是用aop+redis设置过期时间来实现的一、方法上添加注解@InvokeRateLimit(rate=1*60)二、配置一个要拦截的接口packagecom.sunlands.app.common.annotation;importjava.lang.annota...

2019-11-11 15:31:06

srpingboot整合shiro简单应用

引言:推荐一篇博客https://blog.csdn.net/qq_41737716/article/details/82948729,我下边写得只是简单的应用一、添加pom依赖<!--shirospring.--><dependency><groupId>org.apache.shiro</groupId>&l...

2019-11-08 18:57:02

【MySQL】之性能优化-事务+锁+MVCC

事务1、概念**数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务是一组不可再分割的操作集合(工作逻辑单元);**是什么**updateuser_accountsetbalance=balance-1000whereuserID=3;updateuser_accountsetbalance=balance+1000where...

2019-09-26 21:48:49

【MySQL】之性能优化-索引+查询优化

索引A、索引真的去了解正确的创建合适的索引是提升数据库的查询性能的基础。索引是为了加速对表中数据的检索而创建的一种分散存储的数据结构。是什么为什么1、极大地减少存储引擎需要扫描的数据量。2、把随机io编程顺序io。3、帮助我们在分组、排序等操作时避免使用临时表。B、索引为什么选B+Tree?二叉树到平衡二叉树再到B-Tree、B+Tree。平衡二叉树B-Tre...

2019-07-07 19:33:57

【并发编程】--AQS实现原理

AQSlock之所以能实现线程安全的锁,主要的核心是AQS(AbstractQueuedSynchronizer),AQS提供了一个FIFO队列,可以用来实现锁以及需要同步功能的框架。称为AQS。AQS使用依靠继承来完成,子类通过继承自AQS并实现所需的方法来管理同步状态。ReentrantLock、CountDownLatch。AQS分为两种:独占和共享。独占锁模式下,每次只能有...

2019-06-30 21:19:22

【并发编程】synchronized底层实现原理

synchronized原子性、可见性、有序性应用加锁的三种方式:1、普通同步方法,锁的是实例对象2、静态同步方法,锁的是当前类的对象。3、同步方法块,锁的是synchronized括号里的对象synchronized的字节码指令:对于同步块的实现使用了monitorenter和monitorexit指令,前面我们在讲JMM的时候,提到过这两个指令,他们隐式的执行...

2019-06-23 23:09:14

继承中黑狗与狗的关系

所有的黑狗都是狗,在new黑狗的时候首先走狗的构造方法,在走狗的构造方法时,用this依旧是黑狗,如果在狗中写方法时,要用狗做形参,是为了让所有的黑狗,白狗,黄狗都用这个方法。...

2019-06-15 16:39:02

rmi运行机制

【RMI】远程方法调用,纯java的RPC框架,在RMI中最核心的为远程对象。A发布了服务,生成stub对象,B拿到stub对象,调用对象的方法进行传输。【远程对象发布】远程对象必须实现UnicastRemoteObject,这样才能保证客户端访问获得远程对象时,该远程对象会把自身的一个拷贝以Socket形式传输给客户端,客户端获得的拷贝称为“stub”,而服务器端...

2019-06-15 11:51:50

【并发编程】--volatile底层实现原理

1、volatile解决可见性使用缓存一致性。防止指令重排序使用内存屏障,保证有序性。有volatile变量修饰的共享变量,编译时会有lock前缀。volatile实现原则:·Lock前缀指令会引起处理器缓存回写到内存。(总线锁、缓存锁)·一个处理器的缓存回写到内存会导致其他处理器的缓存无效。(MESI、嗅探)缓存一致性协议:处理器上有一套完整的协议,来保证Cac...

2019-06-09 19:35:40

深入理解设计模式

【前言】做了几个可大可小的项目,或多或少的接触了代码复用,代码解耦,代码高扩展等一系列优秀的代码的实用性,提高了代码的可读性,可扩展性,维护成本,复杂的业务问题。而我们生活上也是如此,如果一件事情,总要不断重复去做,虽然我们可以把事情做好,但是总是杂乱无章,这不免会浪费我们的时间成本,对生活深度分析,并且用代码实现这种思想,不断思考,思想与代码并驾齐驱,灵活运用设计模式,理清应...

2019-06-08 14:55:27

Java秒杀实战(十二) 优化秒杀业务流程

优化后的秒杀业务流程【总结】秒杀实现的优化思路,能缓存就去redis缓存起来,然后放到队列中,让队列去处理。

2019-06-02 15:32:52

Java秒杀实战(十一) RabbitMQ四种常见应用模式

先把数据放到路由上。【Direct模式】添加配置类packagecom.wings.seckill.config;importorg.springframework.amqp.core.Queue;importorg.springframework.context.annotation.Bean;importorg.springframework.context....

2019-06-02 11:29:26

Java秒杀实战(十) SpringBoot框架集成RabbitMQ

【安装RabbitMQ及其相关依赖】下载erlanghttps://www.erlang.org/downloads下载rabbitMQhttp://www.rabbitmq.com/download.html安装相关依赖yuminstallncurses-develtarxfotp_src_21.0.tar.gzcdotp_src_21.0...

2019-06-02 10:29:23

Java秒杀实战(九)页面优化技术(Redis缓存页面,url,对象)

【页面缓存】把页面的数据放到reids里面,然后从redis取出后直接返回html @RequestMapping(value="/to_list",produces="text/html") @ResponseBody publicStringtoList(HttpServletRequestrequest,HttpServletResponseresponse...

2019-06-02 09:43:15

Java秒杀实战(八)JMeter压测

下载链接http://jmeter.apache.org/download_jmeter.cgi添加线程组设置10个线程同时并发,下面的0表示多长时间启动起来这10个线程(0表示10个线程同时启动起来,1表示1秒钟10个线程先后启动起来),最下面的1表示循环多少次。设置http请求默认值添加待压测的http请求添加聚合报告监听器启动测试,下面是...

2019-05-31 21:42:02

Java秒杀实战(七)分布式session

1.首先通过uuid生成唯一标识的token信息Stringtoken=UUIDUtil.uuid();2.然后把token信息连带着user用户信息放到缓存服务器中redisService.set(MiaoshaUserKey.token,token,user);3.再new出来一个cookie对象,往里面填充值,设置信息。Cookiecookie=ne...

2019-05-30 21:33:04

Java秒杀实战(六)系统异常拦截

运行的过程中,已知的异常信息,通过定义一个GlobleException类即全局异常类,再按一定的格式来抛出异常。packagecom.imooc.miaosha.exception;importcom.imooc.miaosha.result.CodeMsg;/***Createdby张伟光on2019/5/16.*/publicclassGlobleE...

2019-05-30 20:47:13

Java秒杀实战(五) SpringBoot框架集成Redis

【Linux系统安装Redis】官网下载redis包,上传到linux服务器上。1.解压并移动目录tar-zxvfredis-4.0.10.tar.gzmvredis-4.0.10/usr/local/rediscd/usr/local/redis/2.译并把编译后的可执行文件添加到启动目录make-j4makeins...

2019-05-29 21:44:23

Java秒杀实战(四) SpringBoot框架集成Mybatis

如果linux系统没有安装mysql的话,推荐一篇博客来进行安装mysqlhttps://www.cnblogs.com/duanrantao/p/8988116.html1.maven添加mybatis依赖,druid依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> ...

2019-05-29 19:19:05

Java秒杀实战(三) 系统结果集返回数据封装

Controller在开发过程,通常主要有两个作用:1.返回json结果;2.返回页面路径。在现在前后端分离的项目中,如果你是用的vue或者angular等,控制器只用返回json信息就行了。返回的信息我们定义一个数据结构publicclassResult<T>{ privateintcode; privateStringmsg; privateTd...

2019-05-29 17:16:16

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。