自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis可以用作分布式共享session的解决方案

需要注意的是,为了使session能够跨域名共享,需要设置cookie的domain属性为公共域名。在上述示例中,通过设置DefaultCookieSerializer的domainNamePattern属性,可以将cookie的domain属性设置为公共域名。在项目中使用Redis作为session存储后,可以通过注入HttpSession对象来访问和操作session中的数据。在上述示例中,setSession方法用于设置session的值,getSession方法用于获取session的值。

2024-03-24 16:27:36 507

原创 redis集群模式下处理moved命令

业务场景:当客户端连接到Redis集群中的一个节点,并且想要读取某个数据时,这个节点可能并不是存储该数据的节点。当节点A收到客户端的读取命令时,它会检查数据所在的哈希槽,并知道该哈希槽属于节点B。举个例子来说,假设有一个Redis集群,其中有3个节点:节点A、节点B和节点C。但是,该数据实际上存储在节点B上。客户端接收到MOVED错误后,会重新连接到节点B,并再次发送相同的读取命令。需要注意的是,客户端在连接到集群中的节点时,应该处理MOVED错误,并根据错误信息重新连接到正确的节点来进行操作。

2024-03-24 16:20:52 442

原创 redis分布式锁的代码实现(加入看门狗)

加入看门狗监视锁过期问题

2024-03-24 15:49:34 212

原创 如何实现 SpringBoot 的热部署

导入依赖 spring-boot-devtools.jar 2.0.0导完坐标保存后我们的项目在开发工具中会有一个变化springloaded-1.2.9.jar注意:这个 jar 包我们直接导入不了,需要手动改变一下版本号。最后重启 IDEA,导入热部署的 依赖 jar 包即可!...

2021-02-21 21:11:19 140

原创 Springboot集成WebSocket简单开发(前端到后台)

1.引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>2.开启websocket支持端点@Beanpublic ServerEndpointExporter serverEndpointExporter() {ret

2020-12-29 17:54:13 218

原创 volatile无法保证原子性验证

回顾Java 内存模型中的可见性、原子性和有序性:可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的原子性,指的是这个操作是原子不可拆分的,不允许别的线程中间插队操作有序性指的是你写的代码的顺序要和最终执行的指令保持一致。因为在Java内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。volatile要解决的就是可见性和有序性问题。public class VolatileTest extends Thread

2020-12-17 17:17:54 184 1

原创 具有原子性的atomic使用和注意事项

public class Test { private static AtomicInteger i= new AtomicInteger(); public int get(){ return i.get(); } public void inc(){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } i.incrementAndGet(); }

2020-12-17 16:51:09 220

原创 锁的分类及详解

锁的分类都是从不同的纬度由人去划分的,基本上都是成对的出现。1.乐观锁/悲观锁乐观锁顾名思义,很乐观的认为每次读取数据的时候总是认为没人动过,所以不去加锁。但是在更新的时候回去对比一下原来的值,看有没有被别人更改过。适用于读多写少的场景。java中的atomic就属于乐观锁的表现。就是CAS。悲观锁在每次读取数据的时候都认为其他人会修改数据,所以读取数据的时候也加锁,这样别人想拿的时候就会阻塞,直到这个线程释放锁,这就影响了并发性能。适合写操作比较多的场景。for select xxx for u

2020-12-17 16:36:21 1179 1

原创 GC实战项目中的调优方法参考

1.调整内存调整内存是最基本的手段,不过要结合业务来调,个人的经验就是临时对象多,new的多,对象存活的时间比较短。就把young区给整大了,尽量让gc都发生在young区里面,适合及时响应和低延迟的应用#设置堆内存为1024m#设置年轻代⼤⼩为512m,默认是堆内存的1/3#设置初始的Metaspace⼤⼩为64mJAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms1024m -Xmx1024m -XX:NewSize=512m -X

2020-12-06 17:38:00 404 1

原创 GC常用参数设置

堆栈设置-Xss:每个线程的栈大小-Xms:初始堆大小,默认物理内存的1/64-Xmx:最大堆大小,默认物理内存的1/4-Xmn:新生代大小-XX:NewSize:设置新生代初始大小-XX:NewRatio:默认2表示新生代占年老代的1/2,占整个堆内存的1/3。-XX:SurvivorRatio:默认8表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存。-XX:MetaspaceSize:设置元空间大小-XX:MaxMetaspaceSize:设置元空间最大允许大

2020-12-06 16:37:46 965

原创 可视化GC⽇志分析⼯具

-XX:+PrintGC 输出GC⽇志-XX:+PrintGCDetails 输出GC的详细⽇志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以⽇期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进⾏GC的前后打印出堆的信息-Xloggc:…/logs/gc.log ⽇志⽂件的输出路径#JDK8-XX:+UseG1GC -XX:Ma

2020-11-30 00:27:34 207 1

原创 Optional简化空值判断,减少代码中的if-else代码块

为了防止空指针异常的出现,Java8中引入了一个新类Optional,对于它之前我们已经进行了简单的实现。其本质就是通过Optional类对值进行封装, 当有值的时候,会把该值封装到Optional类中。如果没有值的话,则会在该类封装一个Empty创建Optional对象//empty()会直接返回一个空的Optional实例,内部不会存在任何值。Optional<Student> studentOptional = Optional.empty();//of()会返回一个存在值的Op

2020-11-26 01:44:42 1908

原创 CompletableFuture异步编程

在CompletableFuture中提供了四个静态方法用于创建异步任务runAsync(Runnable runnable)runAsync(Runnable runnable,Executor executor)supplyAsync(Supplier<U> supplier)supplyAsync(Supplier<U> supplier,Executor executor)在该方法内部会创建异步任务,并把任务放入线程池中。并且runAsync()是没有返回值的。

2020-11-26 01:20:02 213

原创 nginx的限流操作(控制速率||控制并发量)

nginx的限流主要有两种形式,控制速率或者控制最大的连接数控制速率先上conf配置: #限流设置 limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=10r/s;server { listen 80; #监听的域名 server_name localhost; #表示所有以 localhost/read_content的请求都由该配置处理 loc

2020-11-25 01:31:17 442 1

原创 openResty+lua+nginx实现缓存操作

openResty+lua实现缓存操作

2020-11-25 01:02:06 703

原创 数据库调优(开启慢查询)

#配置文件方式,需要重启mysql#日志文件位置log-slow-queries=/opt/data/slowquery.log#超时时间,默认10slong_query_time=2#临时开启,不需要重启set global slow_query_log=on;set global long_query_time=10;set global slow_query_log_file=‘/opt/data/slow_query.log’-- 慢查询日志以文本打开,可读性很高-- 查询次

2020-11-24 09:56:13 90

原创 大型项目中对于过期的订单应该如何取消

场景:抢单不支付会占据大批量资源,如商品库存。如何取消过期订单是一个必须面对的问题。主要有以下几种方案:1、扫表实现:原理:通过定时任务轮询扫描订单表,超时的批量修改状态优点:实现非常简单缺点:大量数据集,对服务器内存消耗大。数据库频繁查询,订单量大的情况下,IO是瓶颈。存在延迟,间隔短则耗资源,间隔长则时效性差,两者是一对矛盾。不易控制,随着定时业务的增多和细化,每个业务都要对订单重复扫描,引发查询浪费2、java延迟队列实现原理:通过DelayQueue,每下一单,放入一个订单

2020-11-24 01:08:09 978

原创 JDK8以上提高开发效率有哪些(其三——stream流详解)

此处以操作学生集合为例,查询年龄小于20岁的学生,并且根据年龄进行排序,得到学生姓名,生成新集合public class Demo1 {public static void main(String[] args) {//java7 查询年龄小于20岁的学生,并且根据年龄进行排序,得到学生姓名,生成新集合List<Student> studentList = new ArrayList<>();studentList.add(new Student(1,"张三","M",19

2020-11-22 18:32:31 277

原创 JDK8以上提高开发效率有哪些(其二——Lambda表达式详解(二))

JDK8以上提高开发效率有哪些(其二——Lambda表达式详解(二))在Java8中为了让现在有的函数能够更加友好的使用Lambda表达式,因此引入了函数式接口这个概念。其是一个仅有一个抽象方法的普通接口。如果声明多个抽象方法则会报错。但是默认方法和静态方法在此接口中可以定义多个。要想自定义一个函数式接口的话,需要在接口上添加 @FunctionalInterface 。@FunctionalInterfacepublic interface MyFunctionalInterface {vo

2020-11-22 16:16:46 138

原创 JDK8以上提高开发效率有哪些(其二——Lambda表达式详解(一))

JDK8以上提高开发效率有哪些(其二——Lambda表达式详解)先定义好一个学生类,在下面都会以此为例:当我们没用使用lambda表达式之前:public class Student {private int id;private String name;private String sex;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName()

2020-11-22 15:36:29 143

原创 JDK8以上提高开发效率有哪些(其一——接口的默认方法和静态方法)

接口的默认方法和静态方法public interface MyDSService {//抽象方法String abstractMethod();}public class MyDSServiceImpl implements MyDSService {public String abstractMethod() {return "execute abstract method";}}public interface MyDSService {//抽象方法String abstra

2020-11-22 14:48:30 211

原创 git每次都要输入账号密码的解决方案

git每次都要输入账号密码的解决方案1.生成本地文件保存账号和密码git config --global credential.helper store git pull /git push (第一次输入,后续就不用再次数据)2.通过git生成ssh密匙ssh-keygen -t rsa -C "此处填写自己的邮箱@qq.com"之后会在本地C盘/用户/用户名/.ssh中生成ssh密匙右键记事本打开.pub文件并复制,然后在git的setting中SSH and GPG keys中ne

2020-11-18 17:36:58 430

原创 fastdfs删除后页面还有缓存的解决方法

fastdfs删除后页面还有缓存的解决方法在nginx中配置location ~ /M00{root /data/fast_data/data;ngx_fastdfs_module;add_header Cache-Control no-store;}

2020-11-17 23:10:26 672

原创 spring cloud整合fastdfs实现文件上传

spring cloud整合fastdfs实现文件上传首先是pom文件<dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </dep

2020-11-17 22:52:32 458

原创 Idea解决Could not autowire. No beans of ‘xxxx‘ type found的错误提示

Idea解决Could not autowire. No beans of ‘xxxx’ type found的错误提示更新了idea版本之后,在使用autowired注解都爆了错,虽然发觉不影响使用,但是看着红红的一片就十分别扭,以下有两种解决方案1:修改idea对auto错误的警告级别改成warning就不会报错了2:造成这个问题的原因是没有将bean注入,可以在接口上加上注释...

2020-11-17 18:19:05 3030

原创 多线程开发下可能出现的问题及解决方案

多线程开发下可能出现的问题及解决方案int a;int b;@Actorpublic void actor1(II_Result r) {b = 1;r.r2 = a;}@Actorpublic void actor2(II_Result r) {a = 2;r.r1 = b;}上述代码根据线程的执行顺序,可能会有四种情况b = 1; // 线程1r.r2 = a; // 线程1a = 2; // 线程2r.r1 = b; // 线程2// 结果 r1==1, r2==

2020-11-16 17:56:36 761

原创 基于spring cloud的电商项目全技术栈架构推荐(从前到后到运维)

前端:vue+node.js+lua+elementUI+thymeleaf后端: spring boot+oauth2.0+jwtspring AMQPspring cloudspring cloud gateway | spring cloud bus | spring cloud eurekaspring cloud config | spring cloud openFeign | spring cloud Netflixspring cloud .

2020-11-13 02:21:51 536

原创 大数据分析项目推荐整体架构及使用技术

上图中涉及的技术名词解释如下:1)Sqoop:sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。2)Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进.

2020-11-13 01:39:14 533

原创 Apache Hadoop架构分布

Apache Hadoop:是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架构。2、Apache Hive:是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。3、Apache Pig:是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫PigLati.

2020-11-13 01:37:03 204

原创 maven添加本地jar包

mvn install:install-file -Dfile=D:/taobao-sdk-java-auto-20160607.jar -DgroupId=com.ganshane.specs -DartifactId=taobao-sdk-java-auto-20160607 -Dversion=1.0.0 -Dpackaging=jar

2020-11-13 01:32:56 72

原创 电脑wifi密码忘了使用cmd查询

netsh wlan show profile “xxx” key =clear

2020-11-13 01:31:52 116

原创 电商项目中设计模式的使用(其四 策略模式——结算价格计算,根据Vip不同等级进行运算

电商项目中设计模式的使用(其四 策略模式——结算价格计算,根据Vip不同等级进行运算

2020-11-13 01:19:27 982

原创 电商项目中设计模式的使用(其三 装饰者模式——嵌套的会员等级优惠价格计算

电商项目中设计模式的使用(其三 装饰者模式——嵌套的会员等级优惠价格计算定义:动态的向一个现有的对象添加新的功能,同时又不改变其结构。它属于结构型模式。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。...

2020-11-12 18:18:30 941

原创 电商项目中设计模式的使用(其二 享元模式——通过享元模式实现用户下单,会话共享

电商项目中设计模式的使用(其二 享元模式——通过享元模式实现用户下单,会话共享定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。优点:特定环境下,相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。缺点:为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。...

2020-11-12 16:38:33 653 2

原创 电商项目中设计模式的使用(其一 代理模式——通过代理模式实现分布式文件上传至不同的服务器

电商项目中设计模式的使用(其一 代理模式)使用代理模式实现分布式文件代理服务

2020-11-12 11:00:33 515

原创 常用设计模式整理及分析(其五 适配器模式)

常用设计模式整理及分析(其五 适配器模式)定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。优点:1、可以让任何两个没有关联的类一起运行。2、提高了类的复用。3、灵活性好。缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。Spring Aop适配器+代理模式案例创建打卡接口及实现类public inter

2020-11-12 02:32:09 64

原创 常用设计模式整理及分析(其四 工厂设计模式)

常用设计模式整理及分析(其四 工厂设计模式)定义:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。创建产品接口以及两个实现类都继承该接口public interface Product { void show();}public class Phone implements Produ

2020-11-12 02:09:14 126 1

原创 常用设计模式整理及分析(其三 代理模式)

常用设计模式整理及分析(其三 代理模式)定义:给某对象提供一个代理对象,通过代理对象可以访问该对象的功能。主要解决通过代理去访问[不能直接访问的对象],例如租房中介,你可以直接通过中介去了解房东的房源信息,此时中介就可以称为代理。优点:1、职责清晰。2、高扩展性。3、智能化。缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。实现方式: 1.基于接口的动态代理 提供者:J

2020-11-12 01:58:22 53

原创 常用设计模式整理及分析(其二 观察者模式)

常用设计模式整理及分析(其二 观察者模式)定义:对象之间存在一对多或者一对一依赖,当一个对象改变状态,依赖它的对象会收到通知并自动更新。MQ其实就属于一种观察者模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。优点:1、观察者和被观察者是抽象耦合的。2、建立一套触发机制。缺点:1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系

2020-11-12 01:06:30 815 1

原创 常用设计模式整理及分析(其一 单例模式)

常用设计模式整理及分析(其一 单例模式)1.单例模式1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。适用的场景1、网站的计数器2、应用程序的日志应用3、数据库连接池设计4、多线程的线程池设计饿汉式在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。在这里不展开描述。懒汉式1、延迟加载创建,也就是用到对象的时候,才会创建2、线程安全问题需要手动处理(不添加同步方法,线程不安全,添加了同步方法,效率低)3、实现

2020-11-12 00:37:37 68 1

空空如也

空空如也

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

TA关注的人

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