- 博客(9)
- 收藏
- 关注
原创 SnowFlake 雪花算法生成分布式 ID
随机生成的起始 ID 可能很大,会很快到达单位毫秒内的最大值,比如 4095(12 位序列号情况下),所以需要对 4095 处理,比如取模、或者和二进制位数&运算 循环使用单位毫秒内的可用数字,避免浪费。总共 64 个 bit 位,对应于 Java 基本数据类型的 Long 类型 1 位符号位,正数是 0,负数是 1,id 一般是正数,因此最高位是 0 41 位时间戳(毫秒级),41 位时间戳不是存储当前时间的时间戳,而是存储时间戳差值(当前时间戳 - 开始时间戳)。
2023-09-17 16:46:10
415
1
原创 Redis 热 key 是什么问题,如何导致的?有什么解决方案?
做一些C端业务,不可避免的要引入一级缓存来代替数据库的压力并且减少业务响应时间,其实每次引入一个中间件来解决问题的同时,必然会带来很多新的问题需要注意,比如缓存一致性问题。那么其实还会有一些其他问题比如使用Redis作为一级缓存时可能带来的热key、大key等问题,本文我们就热key(hot key)问题来讨论,如何合理的解决热key问题。以上就是笔者大概了解或实践过的的如何应对热key的一些方案,从发现热key到解决热key的两个关键问题的应对。
2023-09-12 23:54:48
271
原创 RabbitMQ在springboot中的使用
通过本文的介绍,你已经学习了如何在 Spring Boot 中使用 RabbitMQ 实现异步消息的发送和接收。你了解了如何配置 RabbitMQ 连接信息,并使用 Spring Boot 提供的和注解进行消息的发送和接收。通过实际的案例,我们展示了如何使用 RabbitMQ 实现任务队列,以邮件发送服务为例。你学习了如何创建消息发送者和消息接收者,并使用队列来实现任务的异步处理。使用 RabbitMQ 可以帮助我们实现解耦和异步处理,提高系统的可靠性和性能。
2023-09-12 23:27:39
290
原创 领域驱动设计在业务开发中的实践
至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven Design,简称DDD)。在互联网开发“小步快跑,迭代试错”的大环境下,DDD似乎是一种比较“古老而缓慢”的思想。然而,由于互联网公司也逐渐深入实体经济,业务日益复杂,我们在开发中也越来越多地遇到传统行业软件开发中所面临的问题。本文就先来讲一下这些问题,然后再尝试在实践中用DDD的思想来解决这些问题。
2023-09-07 23:46:11
250
1
原创 http远程调用工具类
feign、http,有时候在调用第三方api的时候、使用httpclient,别人的接口不可能提供它的配置,自己项目框架是spring的,使用feign相互配置,都是okhttpclient的方式。Feign是一个接口声明式调用框架,实现了一个抽象层的逻辑,没有真正实现底层http请求,提供了一个client接口用于实现底层http操作,默认提供的实现是基于httpurlconnection,也有基于apachehttpclient的实现,且feign具有分布式负载均衡功能。编写httpUtils类。
2022-09-07 23:06:00
1049
原创 Java-直接内存 DirectMemory 详解
直接内存(DirectMemory)并不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError异常出现,所以我们放到这里一起讲解。-Xmx等参数信息,但经常忽略掉直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现OutOfMemoryError异常。...
2022-07-21 01:06:30
1348
1
原创 软件的23种设计模式的通俗解释
1 工厂方法追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。2 建造者模式MM 最爱听的就是「我爱你」这句话了,见到不同地方的 MM,要能够用她们的方言跟她说这
2022-07-21 00:40:36
609
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人