Aetherial
多花点钱会心疼,生命少了一天却无所感知
acme.sh 是一个免费申请和自动续期 HTTPS 证书的开源工具。安装后自动配置定时任务,在证书过期前 30 天自动续期,实现全自动化管理。
解析 ACME 协议及其定义的 HTTP-01、DNS-01 和 TLS-ALPN-01 三种验证方式,探讨自动化证书签发的底层逻辑、技术细节及适用场景。
学习Git的笔记
记录一次因 Spring Session URL 重写机制(jsessionid)导致的静态资源首次访问加载失败的问题及解决方案。
探讨 Web 应用中“按需登录”的实现方案,通过 sessionStorage 持久化用户操作意图,在 SSO 认证回调后实现精准的“意图回跳”与 URL 净化。
1. IOC和AOP机制
- IOC就是将对象的创建、初始化、销毁等过程交给Spring容器来管理,而不是由程序员在代码中手动管理,也就是控制反转。当需要使用某个对象时,直接通过依赖注入的方式在Spring容器中获取即可。依赖注入包含属性注入、setter注入和构造器注入。
- AOP就是将通用的功能,如日志记录从业务代码中抽离出来,通过动态代理的方式在运行时增强目标对象的方法。因为是将代码中的横向切入点(公共的功能)剥离出来形成一个一个的切面所以称为面向切面编程。
- AOP的通知类型包含前置通知:在方法执行之前操作;后置通知:在方法执行之后操作;环绕通知:在方法执行之前和之后都可以操作;返回通知:在方法正常执行返回内容之后操作;异常通知:在方法抛出异常后操作。
2. Redis
Redis常见类型
- redis几种常见的类型:String、List、Set、Zset、Hash
- string是最常用的数据类型,是一种二进制安全的数据类型,可以存储字符串、整数、浮点数、图片等。
- list是一个双向链表的实现,可以存储多个元素,支持从两端插入和查找元素。
- set是一个无序的集合,元素不可重复。并且可以使用set实现求交集的功能,例如将用户的所有关注放在一个set中,将用户的所有粉丝放在另一个set中,然后求交集就可以得到用户的互相关注。
- zset是一个有序的集合,元素可以重复,并且增加了一个分数的权重参数,可以将元素按照分数来进行排序。
- hash是一个string的key-vaule键值对,可以用来存对象,后续操作可以直接修改这个对象中的某些字段的值。
缓存穿透、缓存预热、缓存击穿、缓存雪崩
- 缓存穿透是有大量的key不存在于redis并且也不存在于数据库,此时如果这些key被同时访问会直接查库造成数据库压力暴增。可以通过参数校验、设置默认值的方法解决。
- 缓存预热是系统启动时,将热点数据加载到缓存中,避免冷启动时大量请求直接打到数据库。
- 缓存击穿是指某个key的缓存过期了,此时大量请求同时访问这个key,会直接查库造成数据库压力暴增。可以通过设置互斥锁的方法解决。当一次请求发现缓存过期会加锁的方式去查库并重写缓存,其他进程只能等待锁释放然后从缓存中获取数据。
- 缓存雪崩指的是有大量的Key在同一时间类过期,此时如果这些key被同时访问会直接查库造成数据库压力暴增。可以通过设置不同的过期时间来解决。
3. MySQL
4. ES