自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解析Spring内置作用域

例如,在一个电子商务网站中,可以将用户的购物车信息存储在会话作用域的Bean中,以便在用户浏览多个页面或提交订单时保持一致。而对于处理表单提交的场景,可以将表单数据封装在请求作用域的Bean中,从而方便地实现数据的传递和验证。在web应用中,每次发起一个HTTP请求时,将创建一个新的Bean实例,该实例仅在该请求的处理过程中有效。单例作用域适用于无状态的Bean或共享数据的场景。通过在Web应用中创建一个会话,并从Spring容器中获取SessionBean的实例,可以在不同的页面或请求中共享该实例。

2023-07-10 14:37:05 180 1

原创 CDN设计原理

CDN,即Content Delivery Network,中文名为内容分发网络,指的是分布式存储、缓存和调度技术,它将源站内容存储至全国甚至全球各地的节点服务器上,在用户请求时通过智能调度技术,使用户访问最近的服务节点,从而提高用户体验和网络传输质量。CDN中的DNS服务器,被称为“全局负载均衡器”,主要作用是根据用户请求的DNS域名,自动返回最佳的访问IP地址给客户端,以达到快速响应并降低网站出口带宽的目的。利用Java的日志系统,CDN系统可以记录和分析用户请求和系统状态。2. 大规模分布式计算。

2023-06-26 14:11:45 187 1

原创 分布式事务的一致性

目前,主要的解决方案包括两阶段提交协议(Two-Phase Commit Protocol,2PC)、三阶段提交协议(Three-Phase Commit Protocol,3PC)、Paxos算法、Raft算法等。否则,协调者会通知参与者回滚。除了以上这些常用的方法外,其他的保持分布式事务系统一致性的方案还有很多,例如基于数据库的两阶段提交,TCC(Try、Confirm和Cancel)等。当协调者收到所有参与者的ack消息时,发送doCommit请求,执行事务提交,并等待参与者的响应消息。

2023-06-09 15:57:41 374

原创 一文了解java序列化

Java 序列化是指将对象转换为字节流以便于传输。需要序列化的对象必须实现 java.io.Serializable 接口引擎,这个接口没有任何方法,可以通过简单地声明即可实现。通过这个接口的定义,编译器就可以自动维护一个表示对象的变量,并用于序列化及反序列化过程中。

2023-06-01 16:12:01 347

原创 Redis缓存过期策略

基于时间的过期策略通过设置生存时间来实现,而基于LRU算法的淘汰机制则根据访问频率和时间排序来删除最近没有使用的key。定期删除是与惰性删除相对应的一种过期策略,它会每隔一段时间主动检查过期 key,并删除过期的 key。与惰性删除不同,定期删除会消耗一定的CPU资源和IO资源,但相对惰性删除而言,它可以更快的将大量过期 key 删除掉。它不会把所有的过期 key 都删除掉,而是等到有客户端来查询这个 key 的时候才检查该 key 是否已过期,并在发现过期的情况下删除该 key。

2023-05-29 10:01:08 3130

原创 防超卖策略-Redis队列分流库存方案

本文介绍了如何使用Redis队列来实现一个队列分流库存方案。首先,我们定义了一个类来管理每个商品的库存数量。接着,我们定义了一个类来实现队列分流库存的具体逻辑。最后,我们编写了一个启动方法来调用方法,并在新线程中持续地处理请求。使用Redis队列分流库存方案能够高效地管理库存数量和状态,避免竞争条件,并且具有高吞吐量、低延迟等特点。

2023-05-11 16:39:56 393

原创 RabbitMq集群化与镜像队

RabbitMQ是一个开源的消息队列软件,它是使用Erlang编写的,而且采用了AMQP(高级消息队列协议)作为其消息传递的标准。RabbitMQ支持多种客户端语言,包括Java、Python、Ruby等,可以帮助我们构建起分布式的系统架构。在真实的生产环境中,我们需要考虑如何保证RabbitMQ的可用性,并避免单点故障导致整个系统瘫痪。此外,在业务高峰期,单个RabbitMQ节点可能会受到过大的压力,导致消息处理速度变慢,这也是我们需要解决的问题。

2023-05-09 16:17:40 92

原创 单例模式如何优化系统性能

单例模式是一种常用的设计模式,它保证了一个类只有一个实例并提供了全局访问点。在某些情况下,单例模式可以优化系统性能,本文将探讨在哪些情况下使用单例模式可以获得性能优化,并介绍如何实现单例模式。本文介绍了单例模式的优化场景、实现方式、注意事项以及常见问题解答。单例模式可以优化系统性能,在资源共享、对象生成开销大、频繁使用的对象等场景下使用单例模式可以获得性能优化。在实现单例模式时,可以选择饿汉式、懒汉式、双重检查锁、枚举等方式。

2023-05-08 11:23:56 238

原创 Synchronized与Lock锁的优化方法

Synchronized锁和Lock锁都是Java中常用的同步控制机制。Synchronized锁是Java中最基本的同步控制方式,它简单易用,并且能够满足大部分场景的需求。但是,在竞争激烈或者需要更细粒度控制的场景下,Synchronized锁可能会导致性能下降或者无法满足需求。此时,我们可以使用Lock锁来进行优化,通过可重入锁、公平锁、读写锁等特性来满足不同场景的需求。无论使用哪种同步控制方式,我们都需要避免死锁、竞争等问题,并根据实际情况对锁进行精细化调整,以提高程序的性能和可靠性。

2023-05-06 15:36:09 292

原创 异步确保型与最大努力型

异步确保型和最大努力型都是常见的异步处理方式,具有各自的优缺点。在实际开发中,需要根据具体的场景选择合适的方式。无论选择哪种方式,都需要注意异常处理和数据同步控制,保证异步操作的正确性和可靠性。

2023-05-06 10:30:00 139

原创 TCC方案与补偿性方案策略

总之,TCC方案和补偿性方案都是有效的分布式事务处理方案。选择哪种方案取决于具体业务需求和技术实现,同时也需要综合考虑性能、可靠性和数据一致性等因素。通过优化方案和完善实现,才能实现高效稳定的分布式事务处理。

2023-05-05 13:37:07 882

原创 Redis自增生成

Redis 是一个开源的内存数据结构存储系统,可以用来作为数据库、缓存和消息中间件。Redis 的特点是高性能、可扩展性强,支持多种数据结构等。在使用 Redis 时,常常需要用到自增 ID 的功能,例如生成订单 ID 等。本文将介绍如何使用 Java 实现 Redis 自增生成 ID 的功能。本文介绍了如何将 Redis 自增生成 ID 封装成一个工具类。通过封装,可以更方便地使用 Redis 自增生成 ID 的功能,并且避免了重复代码的出现。

2023-04-28 11:22:00 4008 1

原创 Redis短链接生成

本文介绍了如何使用Redis和Java实现一个简单的短链接生成系统。具体来说,我们采用随机码法将长URL转换成短链接,并将其存储在Redis中。然后,我们通过短链接进行访问,并记录访问量和访问者IP等统计信息。这个短链接生成系统还有很多可以优化的地方,比如增加过期时间、缩短短链接长度等。但是总的来说,它展示了Redis和Java的强大能力,同时也为我们提供了一个思路,可以在实际项目中应用。短链接生成算法主要有哈希函数法、自增数字法和随机码法。

2023-04-27 10:47:02 638

原创 RabbitMQ消息拒绝怎么解决

RabbitMQ是一个可靠的、高效的、易于使用的分布式消息队列系统。它支持多种消息协议,如AMQP、STOMP、MQTT等。RabbitMQ被广泛应用于企业级应用中,尤其是在异步通信、解耦合和负载均衡方面。在使用RabbitMQ时,有时候我们会遇到消息被拒绝的情况。这种情况不仅会影响系统的正常运行,还可能导致消息丢失或重复消费。本文将介绍RabbitMQ消息拒绝的原因和解决方法。

2023-04-26 10:08:20 2851

原创 浅谈内置锁和显示锁

同时,除了内置锁和显示锁之外,Java还提供了其他的同步机制,例如volatile关键字、原子类、信号量等。内置锁,也称为JVM锁或者监视器锁,是Java语言提供的一种基本锁机制。4. 内置锁和显示锁都需要手动释放锁,因此在使用锁时需要注意避免出现死锁等问题。例如,可以使用Lock接口提供的tryLock()方法尝试获取锁,如果无法获取到锁则立即返回false,避免线程阻塞。为了避免死锁,可以按照一定的顺序获得锁,例如从外向内依次获取锁,或者使用tryLock()方法尝试获取锁并设置超时时间等。

2023-04-25 10:07:44 470 1

原创 多线程高并发场景下为什么需要锁

如果线程A执行完了x=x+1的操作,但还没有来得及将修改后的值写入内存中,此时线程B先执行了x=x-1的操作,那么最终x的值就是原始值,而不是应该的值。4.StampedLock:StampedLock是Java中提供的一种乐观锁,它采用了乐观锁和悲观锁相结合的方式实现同步,可以在保证线程安全的同时提高程序的并发性。虽然锁会引入一定的开销,但是在多线程高并发的情况下,使用锁可以避免线程之间的竞争,从而提高程序的性能和效率。在Java语言中,提供了多种类型的锁,每种锁都有其特定的应用场景和使用方式。

2023-04-24 17:45:23 1777

原创 redis分布式锁

在分布式系统中,多个节点共同协作完成一项任务,为了保证数据的一致性和避免并发冲突,需要对共享资源进行加锁,以保证同一时间只有一个线程对资源进行访问。分布式环境下的锁需要保证可靠性、高可用性和高性能。使用Redis实现分布式锁可以简单、高效地保护共享资源,提高系统并发处理能力。但是需要注意锁的过期时间、线程安全性、连接池管理等方面,以确保锁的可靠性和性能。侵删!

2023-04-24 17:06:09 118

空空如也

空空如也

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

TA关注的人

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