杂项8

简介: 缓存三剑客(穿透、击穿、雪崩)解析及解决方案:穿透指请求数据在Redis和数据库均不存在,可通过校验、空值缓存、布隆过滤器应对;击穿针对热点数据失效,可用互斥锁或永不过期策略;雪崩因大量缓存同时失效,可采用随机过期、集群部署、降级机制缓解。

缓存三剑客:本质:导致大量请求直达数据库,数据库压力骤增(可理解为:redis:货架,数据库:仓库)

穿透:redis和数据库中都不存在(货架和仓库都没有),(有点类似攻击,请求查询不存在的信息,等于忙碌之后没有结果)

解决方案:

校验(先校验,在访问,在redis之前加一层过滤网)针对“格式 / 规则错误的请求”(驴头不对马嘴)

空值缓存(第一次发现没有,就设置空值(下次直接redis返回空值),并设置有效期(避免后续真的增加相应的数据)),

布隆过滤器(类似一个白名单,先查询白名单,有去访问redis)拦截:数据本身不存在的请求(合规)

击穿:主要针对热点数据,redis中没有,数据库中有(货架没有仓库有)

解决方案:锁(只放一个线程进行访问),永不过期(不设置过期时间)

雪崩:过期时间一致,或者redis宕机,

解决方案:随即过期(避免同时过期),集群(就是把redis在细分,解决的是rdis宕机),降级(丟车保帅,维持核心)

id自增实现

  • 单库单表:优先用数据库自增(MySQL AUTO_INCREMENT),简单高效。
  • 分布式系统:推荐雪花算法(性能好)或 Redis INCR(实现简单)。
  • 特殊需求:若需自定义规则(如包含业务标识),可在自增基础上拼接前缀(如 ORDER_1001)。

private RedisTemplate<Object, Object> redisTemplate;与private RedisTemplate redisTemplate;没有区别只是一个规定了泛型一个没有规定

spring事务和底层数据库的关系

spring事务相当于是个管理者,底层数据库更相当于是一个执行者

spring一般有

传播行为

事务失效

mysql有:

特性:ACID(原子性,持久性,隔离性,一致性)

事务的隔离机制:

读未提交

读已提交

可重复读

串行化

Spring 事务本身不直接实现 ACID,但它通过有效管理支持 ACID 的数据库事务,让开发者在使用时 “感知到 ACID 特性的存在”。ACID 的核心实现者始终是数据库。

针对配置类中的一些信息(yml)

  • Spring Boot 会自动读取 yml 配置,无需手动加载。
  • 简单配置用 @Value 更方便;复杂配置用配置类更规范。
  • 配置类的核心作用是 “结构化管理配置”,而非 “让配置被读取”(读取本身是 Spring 自动完成的)。
@Service
public class MyService {
    // 直接用@Value读取yml中的配置
    @Value("${app.name}")
    private String appName;
    
    @Value("${app.port}")
    private Integer port;
    
    // 使用这些配置...
}
方式二:
yml文中的配置信息:
user:
    name: "张三"
    age: 20
配置类
@Data
@Configuration
@ConfigurationProperties(prefix = "baidu")
public class BaiduAIProperties {
    private String apikey;
    private String qianfanModel;
}
通过配置类调用yml中的配置信息

定时任务有点类似于aop,单独调用(放在单独的job任务中)

@Component("contractJob")
@Slf4j 
public class ContractJob {
    @Autowired private IContractService contractService;
    public void updateContractStatusJob() { 
        contractService.updateContractStatus(); //需要设置定时任务的方法
        log.info("定时更新合同状态成功!"); } }

建造者模式:

使用@build(lombok的注解),首先@NoArgsConstructor@AllArgsConstructor(只能生成全参和无参构造器,少参数的必须用空值替代

import lombok.Builder;
// @Builder: 自动生成建造者模式相关代码
@Builder
public class User {
    // @NonNull: 标记为必选参数,会自动生成非空校验  可有可无
    @NonNull
    private String id;          // 必选:用户ID
    @NonNull
    private String username;    // 必选:用户名
    private int age;            // 可选:年龄,默认0
    private String email;       // 可选:邮箱,默认null
    private String address;     // 可选:地址,默认null
}
public class Main {
    public static void main(String[] args) {
        // 1. 创建包含所有属性的 User 对象
        User user1 = User.builder()
                .id("1001")
                .username("张三")
                .age(25)
                .email("zhangsan@example.com")
                .address("北京市海淀区")
                .build();
        // 2. 创建只包含必选属性的 User 对象(可选属性用默认值)
        User user2 = User.builder()
                .id("1002")
                .username("李四")
                // 不设置 age、email、address,使用默认值
                .build();
    }
}
使用@NoArgsConstructor 和 @AllArgsConstructor则是要么全参要么是无参

JSONObject jsonObject = JSONUtil.parseObj(shadow.get(0).getReported().getProperties());理解下,一般在不知类型的话,可以使用转化为JSONObject,可以调用相应的方法进行操作,JSONObject是增强版map

相关文章
|
12月前
|
消息中间件 存储 安全
初始kafka
Kafka因高吞吐量被广泛使用,适合处理大量用户行为数据,支持实时推荐和数据展示。其优势包括提升响应速度、故障隔离、低耦合、流量削峰等。但也有架构复杂、依赖Broker等缺点。为避免消息丢失,可通过同步/异步发送、重试机制、设置ACK确认级别、副本机制及手动提交offset等方式保障消息可靠性。
|
12月前
|
存储 SQL 缓存
spring基础2
本文介绍了 MyBatis 动态 SQL 的执行原理及常用标签,AOP 的实现原理与应用场景,Spring 的三级缓存机制及其在解决循环依赖中的作用,以及事务传播行为及其使用场景,帮助理解 Java 开发中的核心概念与实现机制。
|
12月前
|
SQL XML JSON
在了解三层架构
该文档详细介绍了在Java开发中,如何使用注解定义Mapper接口并实现数据库操作,包括SQL语句的编写与字段映射处理。同时涵盖了Service层的接口与实现类的结构,以及Controller层的请求处理方式,涉及RESTful API设计、参数绑定、数据传递与响应封装等内容,适用于基于Spring框架的Web应用开发。
|
12月前
|
Java Nacos Sentinel
了解微服务
本文对比了微服务与单体架构的优缺点,指出单体架构适合小规模系统,开发部署简单,而微服务适合复杂系统,具备良好的扩展性和灵活性。同时介绍了Spring Cloud相关组件如Nacos、OpenFeign、Sentinel的原理与应用,以及微服务中的熔断、降级、限流机制和AT模式的工作原理。
|
12月前
|
存储 JavaScript 前端开发
初始前端1
本文介绍了 Vue 组合式开发中使用 `ref` 实现响应式数据的方法,强调不依赖 `this`。内容包括创建 `.vue` 文件的模板结构、使用 `ref` 定义响应式变量(如 `count2.value`)与非响应式变量(如 `count3`)的区别,以及如何在模板中绑定数据。同时通过表格对比了 `ref` 在 JavaScript 和模板中的使用方式,指出在 JS 中需用 `.value` 操作数据,而在模板中可直接访问。最后以生活化的类比解释 `ref` 的作用,帮助开发者更好地理解响应式原理。
|
12月前
|
存储 安全 Java
java常识2
本内容介绍了并发编程中的核心概念与实现机制,包括悲观锁与乐观锁的原理及应用、Java中的synchronized与ReentrantLock的区别、线程池的参数配置、线程创建方式、Lambda表达式的特性、反射机制及其应用场景。内容涵盖了数据库锁、第三方中间件锁、JUC并发包中的常用工具类,以及BIO、NIO、AIO的基本原理和使用场景,适合对Java并发编程有深入学习需求的开发者参考。
|
安全 Linux Shell
SSH服务器拒绝密码登录的解决方法
SSH服务器拒绝密码登录的解决方法
5825 2
|
存储 缓存 NoSQL
Redis缓存设计与性能优化
Redis缓存设计与性能优化涵盖缓存穿透、击穿、雪崩及热点key重建等问题。针对缓存穿透,可采用缓存空对象或布隆过滤器;缓存击穿通过随机设置过期时间避免集中失效;缓存雪崩需确保高可用性并使用限流熔断组件;热点key重建利用互斥锁防止大量线程同时操作。此外,开发规范强调键值设计、命令使用和客户端配置优化,如避免bigkey、合理使用批量操作和连接池管理。系统内核参数如vm.swappiness、vm.overcommit_memory及文件句柄数的优化也至关重要。慢查询日志帮助监控性能瓶颈。
675 9
|
8月前
|
消息中间件 Java Spring
MQ收发消息
本文介绍如何使用SpringAMQP实现RabbitMQ消息收发。RabbitMQ基于AMQP协议,支持跨语言通信。通过SpringBoot整合SpringAMQP,可快速实现消息发送与接收。文中演示了创建队列、配置生产者与消费者、使用RabbitTemplate发送消息及@RabbitListener监听消息的完整流程,并简要对比了推模式与拉模式的应用场景。
MQ收发消息
|
3月前
|
存储 缓存 监控
【Redis】Redis性能优化:Pipeline、批量操作、Lua脚本、内存优化、慢日志分析
本体系构建Redis性能优化完整知识链,覆盖Pipeline(降RTT)、批量命令(提原子性)、Lua脚本(强一致+可编程)、内存优化(控碎片/精结构)及慢日志分析(根因诊断)五大模块,强调“先诊断、再优化、重闭环”,兼顾性能、稳定与可观测性。

热门文章

最新文章