正文分布式锁的演进基本原理我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。“占坑”可以去redis,可以去数据库,可以去任何大家都能访问的地方。等待可以自旋的方式。阶段一public Map<String, List<Catalog2Vo>> getCatalogJsonDbWithRedisLock() { //阶段一 Bo
消息发送异常时重复发送首先,我们来瞅瞅RocketMQ发送消息和消费消息的基本原理。如图,简单说一下上图中的概念:Broker,就是RocketMQ的服务端,如上图就有两个服务实例Topic就是一类消息集合的名字Queue就是Topic的对应的队列,消息都存在Queue上,每个Topic都会有自己的几个Queue所以,整个消息发送和消费过程大致如下:生产者在发送消息之前根据负载均衡策略(默认是轮询
一、Redis为什么变慢了1.Redis真的变慢了吗?对 Redis 进行基准性能测试例如,我的机器配置比较低,当延迟为 2ms 时,我就认为 Redis 变慢了,但是如果你的硬件配置比较高,那么在你的运行环境下,可能延迟是 0.5ms 时就可以认为 Redis 变慢了。所以,你只有了解了你的 Redis 在生产环境服务器上的基准性能,才能进一步评估,当其延迟达到什么程度时,才认为 Redis 确
官网命令大全](http://www.redis.cn/commands.html)八大基本数据类型分别为:• String(字符串类型)• Hash(散列类型)• List(列表类型)• Set(集合类型)• SortedSet(有序集合类型,简称zset)• Bitmap(位图)• HyperLogLog(统计)• 
如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面。一、单体架构单体架构比较初级,典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的Java Spring mvc或者Python Django框架的应用。其架构图如下所示:单体架构单体架构的应用比
做一些C端业务,不可避免的要引入一级缓存来代替数据库的压力并且减少业务响应时间,其实每次引入一个中间件来解决问题的同时,必然会带来很多新的问题需要注意,比如缓存一致性问题。那么其实还会有一些其他问题比如使用Redis作为一级缓存时可能带来的热key、大key等问题,本文我们就热key(hot key)问题来讨论,如何合理的解决热key问题。背景热key是什么问题,如何导致的?一般来说,我们使用的缓
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java 中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。泛型是 JDK1.5
DooTask 是一款轻量级的开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具。功能特性可查看日历提醒事项、仪表盘支持个人、群组聊天,创建聊天室支持创建文件夹、上传文件,创建文本、流程图、思维导图、Word、Excel、PPT支持指定范围共享文件、共享文件夹支持文档协作支持创建项目里程碑、添加子任务、更新进度、创建任务给指定人支
本文介绍策略模式的具体应用以及Map+函数式接口如何 “更完美” 的解决 if-else的问题。文章目录需求策略模式Map+函数式接口最后捋一捋本文讲了什么需求最近写了一个服务:根据优惠券的类型resourceType和编码resourceId来 查询 发放方式grantType和领取规则实现方式:根据优惠券类型resourceType -> 确定查询哪个数据表根据编码resourceId
在开发订单系统时,我们常遇见支付问题,既用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常问题。如果保证一个订单从创建到支付成功整个订单生命周期
前言最近粉丝在字节面试中遇到这样一个面试题,这个问题也是前端面试的高频问题,因为在前端开发的日常开发中我们总是会与post请求打交道,一个小小的post请求也是牵扯到很多知识点的,在这给大家细细道来。同源策略在浏览器中,内容是很开放的,任何资源都可以接入其中,如 JavaScript 文件、图片、音频、视频等资源,甚至可以下载其他站点的可执行文件。但也不是说浏览器就是完全自由的,如果不加以控制,就
相同点1.null和undefined都是js的基本数据类型2.undefined和null都是假值(falsy),都能作为条件进行判断,所以在绝大多数情况下两者在使用上没有区别if(undefined){ console.log('真的'); }else{ console.log('假的'); //执行 } if(null){ console.log('真的'); }else{
Linux当中有很多比较有趣的命令,可以动手看看,很简单的。1.rev命令一行接一行地颠倒所输入的字符串。运行:$rev如输入:shiyanloushiyanlou2.asciiview命令1.先安装aview$sudo apt-get install aview2.再安装imagemagick$sudo apt-get install imagemagick3.使用asciiview$ascii
反射是java提供的一个重要功能,可以在运行时检查类、接口、方法和变量等信息,无需知道类的名字,方法名等。还可以在运行时实例化新对象,调用方法以及设置和获取变量值。Class对象检查一个类之前,必须获取到java.lang.Class对象,java中的所有类型,包括long,int,数组等基本数据类型,都和Class对象有关系。我们很多人去医院参加体检的时候,都做过B超检查,医生只需把一个探头在我
一、引言流式编程的概念和作用Java 流(Stream)是一连串的元素序列,可以进行各种操作以实现数据的转换和处理。流式编程的概念基于函数式编程的思想,旨在简化代码,提高可读性和可维护性。Java Stream 的主要作用有以下几个方面:简化集合操作:使用传统的 for 循环或迭代器来处理集合数据可能会导致冗长而复杂的代码。而使用流式编程,能够用更直观、更简洁的方式对集合进行过滤、映射、排序、聚合
前言我们日常开发中,经常涉及到DO、DTO、VO对象属性拷贝赋值,很容易想到org.springframework.beans.BeanUtils的copyProperties 。它会自动通过反射机制获取源对象和目标对象的属性,并将对应的属性值进行复制。可以减少手动编写属性复制代码的工作量,提高代码的可读性和维护性。但是你知道嘛?使用BeanUtils的copyProperties&nb
在这篇文章中,我们将讨论最常用的python技巧。大多数这些技巧都是我在日常工作中使用过的简单的Trick,我觉得好东西就是要拿出来和大家一起分享。闲话少说,我们直接开始吧!:)处理用户的多个输入有时我们需要从用户那里获得多个输入,以便使用循环或任何迭代,一般的写法如下:# bad practice码 n1 = input("enter a number : ") n2 = input("ente
在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流可以认为服务降级的一种,限流通过限制请求的流量以达到保护系统的目的。一般来说,系统的吞吐量是可以计算出一个阈值的,为了保证系统的稳定运行,一旦达到这个阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。否则,很容易导致服务器的宕机。常见限流算计数器限流计数器限流算法是最为简单粗暴的解
日常开发中,我们经常会遇到一些重复冗余的代码。大家都知道重复代码不好,它主要有这些缺点:可维护性差、可读性差、增加错误风险等等。最近呢,我优化了一些系统中的重复代码,用了好几种的方式,感觉挺有用的。所以本文给大家讲讲优化重复冗余代码的几种方式~抽取公用方法抽个工具类反射泛型继承和多态设计模式函数式LambdaAOP切面1. 抽取公用方法抽取公用方法,是最常用的代码去重方式~比如这个例子,分别遍历n
在业务开发的时候,经常会遇到某一个接口不能对外暴露,只能内网服务间调用的实际需求。面对这样的情况,我们该如何实现呢?今天,我们就来理一理这个问题,从几个可行的方案中,挑选一个来实现。1. 内外网接口微服务隔离将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的接口均对外暴露,另一个服务的接口只能内网服务间调用。该方案需要额外编写一个只对内部暴露接口的微服务,将所有只能对内暴露的业
这篇文章,将使用 canal 将 MySQL 增量数据同步到 ES 。如果想学Java项目的,强烈推荐我的?项目消息推送平台Austin(8K stars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。 仓库地址(可点击阅读原文跳转):https://gitee.com/zhongfucheng/austin1 集群模式图中 server 对应一个 can
一个其他团队的比较老的dubbo服务,spring的版本在3.2.x范围,用的还是spring那一套。由于这个服务比较核心,而且集成的组件比较多:rabbit、dubbo、es、kafka、zk、redis、cas等等一系列组件,然后开发的痛点就是本地启动时间太慢了,常常耗时接近10分钟、机器配置差点夸张到10+。抱着好奇的心理开始这一次排查之旅。启动耗时 : Artifact xxxx
引言在各个项目中,我们都可能需要用到签到和 统计功能。签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。签到功能,我们可以通过Redis中的 BitMap功能来实现一、Redis BitMap 基本用法BitMap 基本语法、指令签到功能我们可以使用MySQL来完成,比如下表:用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条每签
简介引入maven依赖后台代码创建模板XLS表达式jx:areajx:each 最常用的xls表达式jx:mergeCells 合并单元格动态列-综合使用总结简介相信大家能经常性的遇到项目上各类excel的导出,简单的excel格式,用简单的poi,easyExcel等工具都能导出。但是针对复杂的excel,有固定的样式、合并单元格、动态列等各类要求,导致excel 导出需要花很大一部分精力去写代
来源:laker.blog.csdn.net/article/details/130957301每个Spring Boot版本和内置容器不同,结果也不同,这里以Spring Boot 2.7.10版本 + 内置Tomcat容器举例。概序在SpringBoot2.7.10版本中内置Tomcat版本是9.0.73,SpringBoot内置Tomcat的默认设置如下:Tomcat的连接等待队列长度,默认
做一些C端业务,不可避免的要引入一级缓存来代替数据库的压力并且减少业务响应时间,其实每次引入一个中间件来解决问题的同时,必然会带来很多新的问题需要注意,比如缓存一致性问题。那么其实还会有一些其他问题比如使用Redis作为一级缓存时可能带来的热key、大key等问题,本文我们就热key(hot key)问题来讨论,如何合理的解决热key问题。基于 Spring Boot + MyBatis Plus
正文目录异常处理方案分类基于请求转发基于异常处理器基于过滤器常见异常处理实现方案BasicExceptionController@ExceptionHandler@ControllerAdvice+@ExceptionHandlerSimpleMappingExceptionResolverHandlerExceptionResolverFilter全局异常处理实现方案请求转发异常处理器+请求转发
在Linux环境下安装和使用Nginx是相对简单的。下面是一步步详解:安装依赖软件: 首先,打开终端并以管理员权限登录到Linux系统。然后,执行以下命令安装Nginx所需的依赖软件:sudo apt update sudo apt install curl gnupg2 ca-certificates lsb-release添加Nginx官方软件仓库: 执行以下命令将Nginx的官方软件仓库添加
随着互联网的发展项目中的业务功能越来越复杂,有一些基础服务我们不可避免的会去调用一些第三方的接口或者公司内其他项目中提供的服务,但是远程服务的健壮性和网络稳定性都是不可控因素。在测试阶段可能没有什么异常情况,但上线后可能会出现调用的接口因为内部错误或者网络波动而出错或返回系统异常,因此我们必须考虑加上重试机制重试机制 可以提高系统的健壮性,并且减少因网络波动依赖服务临时不可用带来的影响,让系统能更
redis实现用于限制非法登录次数为5次,锁定10分钟,并设置登录连接超时时间为10分钟要使用 Redis 实现限制非法登录次数、锁定和设置登录连接超时时间,可以结合 Redis 的计数器(counter)、设置过期时间(expire)和获取剩余有效时间(ttl)的功能。下面是一个示例的 Java 代码,使用 Redis 来实现这个功能:import redis.clients.jedis.Jed
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号