- 博客(9)
- 收藏
- 关注
原创 使用布隆过滤器解决缓存穿透问题:Spring Boot 实战
缓存穿透是指查询一个不存在的数据时,由于缓存中没有命中,请求会直接打到数据库。如果攻击者频繁发起这样的请求,会导致数据库压力剧增,甚至崩溃。请求查询一个不存在的键。缓存中未命中,查询数据库也未找到,返回空结果。如果大量类似的请求涌入,数据库将成为瓶颈。通过布隆过滤器,我们可以有效解决缓存穿透问题,避免对数据库的无效查询。布隆过滤器以其高效的内存占用和快速的查询能力,成为分布式系统中不可或缺的工具。当然,布隆过滤器也有一定的误判率,因此在实际应用中需要根据业务需求权衡其准确性和性能。
2025-03-31 18:56:34
722
原创 什么是缓存击穿、缓存穿透、缓存雪崩?
缓存穿透就是大量请求的key不存在于缓存中,也不存在于数据库中。这就导致了这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力。缓存雪崩指的是在同一个时间内,大量的缓存失效,导致用户请求大量打在数据库上,给数据库造成了巨大的压力。
2025-03-17 11:29:58
817
原创 Spring Boot 框架下结合 Redis 集群实现排行榜系统
通过以上步骤,我们成功地使用 Spring Boot 和 Redis 集群实现了基本的排行榜系统。这个系统可以轻松扩展,以适应更复杂的应用场景。注意:确保 Redis 集群已经正确配置并且正在运行,以便上述代码能够正常执行。
2025-03-13 18:46:32
2011
原创 mysql数据库常见面试题
哪些情况下会索引失效- 查询where条件使用了左模糊或者左右模糊- 对索引使用函数- 对索引使用表达式计算- 对索引隐式类型转换(mysql在遇到字符串与数字比较的时候,会自动把字符串转为数字)- 联合索引不是遵循最左匹配原则- where使用的or中,前后两个条件不全是使用索引(在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。这是因为 OR 的含义就是两个只要满足一个即可,因此只有一个条件列是索引列是没有意义的,只要有条件列不是索引
2025-03-12 10:16:06
854
原创 基于 Spring Boot 与自定义注解实现全局日志记录
首先,我们需要定义一个自定义注解。这个注解将用于标记那些需要记录日志的方法。// 注解在运行时仍然有效 @Retention(RetentionPolicy . RUNTIME) // 该注解用于方法上 @Target({// 操作类型,默认为空字符串 String type() default "";// 操作者,默认为空字符串 String operator() default "";
2025-03-11 14:33:53
686
原创 JAVA注解
自定义注解用关键字@interface表示,下面就是定义了一个MyAnnotation的注解,表示是使用在方法上,运行期间都存在,它可以设置一个值value,默认为空。} }} }} }} }单这么看,感觉注解没啥用,我刚开始学注解的时候就是这么认为的。但其实,注解往往都会结合反射来实现一些非常棒的逻辑。比如我们经常会在框架中看到各种各样的注解,其中Springboot就是一个代表,它利用注解简化了Spring配置(毕竟Spring被称为配置地狱哈哈哈),比如@Autowired。
2025-03-10 17:46:45
1471
原创 JAVA中几种常见的常量池
在JAVA程序的运行过程中,常常需要重复使用大量的常量,如果每使用一次就重新创建一次常量的话,不仅会造成内存的浪费,同时也会因为频繁的创建常量而导致性能下降。使用常量池,本质上就是一个缓存池,把使用的常量放入池中,在使用的时候,如果常量池中有对应的常量,则将对象地址指向常量池的常量,避免了频繁的创建常量带来的内存和性能的损耗。
2025-03-07 10:15:12
767
原创 解决浮点数精度丢失问题:BigDecimal
解决浮点数精度丢失问题:会有一些例外的情况发生,如十进制0.2转为二进制数时,则会发生无限循环情况,而实际的计算机存储的位数是有限的,只能截断存储,这就导致了小数精度丢失问题。compareTo() 方法可以比较两个 BigDecimal 的值,如果相等就返回 0,如果第 1 个数比第 2 个数大则返回 1,反之返回-1。在计算机中,十进制的整数是不断除以2直到商为0为止,然后把余数逆序组成二进制小数,如十进制中的10转为二进制的过程,如下图所示,最终二进制为。时,为了防止精度丢失,推荐使用它的。
2025-02-27 10:13:44
1758
原创 Java类中的6种关系
关联体现的是两个类之间语义级别的一种强依赖关系,比如人和鞋子,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。依赖是一种使用的关系,use a,一个类使用到了另外一个类,这种关系是具有偶然性、临时性,非常弱的关系,但是类B的变化会影响到类A。举例说明,人和电脑的关系,人没必要一定要有电脑,但是人在写代码的时候需要使用电脑,这种关系是一种临时的关系。在UML类图中,一般用箭头+实现,由使用方指向被使用方,表示使用方对象持有被使用方对象的引用。
2025-02-26 11:41:20
426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人