Redis 实战
Redis 实战缓存缓存是 Redis 最常见的应用场景。 Redis 有多种数据类型,以及丰富的操作命令,并且有着高性能、高可用的特性,非常适合用于分布式缓存。 缓存应用的基本原理,请参考 缓存基本原理 第四 ~ 第六节内容。 BitMap 和 BloomFilterRedis 除了 5 种基本数据类型外,还支持 BitMap 和 BloomFilter(即布隆过滤器,可以通过 Redis Module 支持)。 BitMap 和 BloomFilter 都可以用于解决缓存穿透问题。要点在于:过滤一些不可能存在的数据。 什么是缓存穿透,可以参考:缓存基本原理 小数据量可以用 BitMap,大数据量可以用布隆过滤器。 分布式锁使用 Redis 作为分布式锁,基本要点如下: 互斥性 - 使用 setnx 抢占锁。 避免永远不释放锁 - 使用 expire 加一个过期时间,避免一直不释放锁,导致阻塞。 原子性 - setnx 和 expire 必须合并为一个原子指令,避免 setnx 后,机器崩溃,没来得及设置 expire,从而导致锁永不释放。 更多分布式锁的实现方式...
深入理解 Java 反射和动态代理
深入理解 Java 反射和动态代理反射简介 什么是反射反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 通过反射机制,可以在运行时访问 Java 对象的属性,方法,构造方法等。 反射的应用场景反射的主要应用场景有: 开发通用框架 - 反射最重要的用途就是开发各种通用框架。很多框架(比如 Spring)都是配置化的(比如通过 XML 文件配置 JavaBean、Filter 等),为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射——运行时动态加载需要加载的对象。 动态代理 - 在切面编程(AOP)中,需要拦截特定的方法,通常,会选择动态代理方式。这时,就需要反射技术来实现了。 注解 - 注解本身仅仅是起到标记作用,它需要利用反射机制,根据注解标记去调用注解解释器,执行行为。如果没有反射机制,注解并不比注释更有用。 可扩展性功能 - 应用程序可以通过使用完全限定名称创建可扩展性对象实例来使用外部的用户定义类。 反射的缺点 性能开销...
Mysql 优化
Mysql 优化慢查询慢查询日志可以帮我们找到执行慢的 SQL。 可以通过以下命令查看慢查询日志是否开启: 1234567mysql> show variables like '%slow_query_log';+----------------+-------+| Variable_name | Value |+----------------+-------+| slow_query_log | ON |+----------------+-------+1 row in set (0.02 sec) 启停慢查询日志开关: 12345# 开启慢查询日志mysql > set global slow_query_log='ON';# 关闭慢查询日志mysql > set global slow_query_log='OFF'; 查看慢查询的时间阈值: 1234567mysql> show variables like '%long_query_time%';+--...
Mysql 事务
Mysql 事务 不是所有的 Mysql 存储引擎都实现了事务处理。支持事务的存储引擎有:InnoDB 和 NDB Cluster。不支持事务的存储引擎,代表有:MyISAM。 用户可以根据业务是否需要事务处理(事务处理可以保证数据安全,但会增加系统开销),选择合适的存储引擎。 事务简介事务概念“事务”指的是满足 ACID 特性的一组操作。事务内的 SQL 语句,要么全执行成功,要么全执行失败。可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。 ACIDACID 是数据库事务正确执行的四个基本要素。 原子性(Atomicity) 事务被视为不可分割的最小单元,事务中的所有操作要么全部提交成功,要么全部失败回滚。 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。 一致性(Consistency) 数据库在事务执行前后都保持一致性状态。 在一致性状态下,所有事务对一个数据的读取结果都是相同的。 隔离性(Isolation) 一个事务所做的修改在最终提交以前,对其它事务是不可见的。 持久性(Durab...
6.Spring 安全
Spring 集成 章节主要针对:Spring 与第三方框架、库集成。如:Cache、Scheduling、JMS、JMX 等。 📖 内容 Spring 安全 📚 资料 官方 Spring 官网 Spring Framework 官方文档 Spring Github 书籍 《Spring In Action》 教程 《小马哥讲 Spring 核心编程思想》 geekbang-lessons 跟我学 Spring3 🚪 传送◾ 💧 钝悟的 IT 知识图谱 ◾ 🎯 我的博客 ◾
3.Spring Web
Spring Web 章节主要针对:Spring 在 web 领域的应用。如:Spring MVC、WebSocket 等。 📖 内容 SpringWeb 综述 SpringWeb 应用 DispatcherServlet Spring 过滤器 Spring 跨域 Spring 视图 SpringBoot 之应用 EasyUI 📚 资料 官方 Spring 官网 Spring Framework 官方文档 Spring Github 书籍 《Spring In Action》 教程 《小马哥讲 Spring 核心编程思想》 geekbang-lessons 跟我学 Spring3 🚪 传送◾ 💧 钝悟的 IT 知识图谱 ◾ 🎯 我的博客 ◾
Spring 其他
Spring 其他📖 内容 Spring4 升级 SpringBoot 之 banner SpringBoot 之 Actuator 📚 资料 官方 Spring 官网 Spring Framework 官方文档 Spring Github 书籍 《Spring In Action》 教程 《小马哥讲 Spring 核心编程思想》 geekbang-lessons 跟我学 Spring3 🚪 传送◾ 💧 钝悟的 IT 知识图谱 ◾ 🎯 我的博客 ◾
Spring AOP
Spring AOPAOP 概念什么是 AOPAOP(Aspect-Oriented Programming,即 面向切面编程)与 OOP( Object-Oriented Programming,面向对象编程) 相辅相成,提供了与 OOP 不同的抽象软件结构的视角。 在 OOP 中,我们以类(class)作为我们的基本单元,而 AOP 中的基本单元是 Aspect(切面) 术语Aspect(切面)aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中.AOP 的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. advice(增强)由 aspect 添加到特定的 join point(即满足 point cut 规则的...
1.Spring 核心
Spring 核心 章节主要针对:Spring & Spring Boot 框架的核心技术。如;Spring Bean、IoC、依赖查找、依赖注入、AOP、数据绑定、资源管理等。 📖 内容 Spring Bean Spring IoC Spring 依赖查找 Spring 依赖注入 Spring IoC 依赖来源 Spring Bean 作用域 Spring Bean 生命周期 Spring 配置元数据 Spring AOP Spring 资源管理 Spring 校验 Spring 数据绑定 Spring 类型转换 Spring EL 表达式 Spring 事件 Spring 国际化 Spring 泛型处理 Spring 注解 SpringBoot 教程之快速入门 SpringBoot 之属性加载 SpringBoot 之 Profile 📚 资料 官方 Spring 官网 Spring Framework 官方文档 Spring Github 书籍 《Spring In Action》 教程 《小马哥讲 Spring 核心编程思想》 geekbang-l...
5.Spring 集成
Spring 集成 章节主要针对:Spring 与第三方框架、库集成。如:Cache、Scheduling、JMS、JMX 等。 📖 内容 Spring 集成缓存中间件 Spring 集成定时任务中间件 Spring 集成 Dubbo 📚 资料 官方 Spring 官网 Spring Framework 官方文档 Spring Github 书籍 《Spring In Action》 教程 《小马哥讲 Spring 核心编程思想》 geekbang-lessons 跟我学 Spring3 🚪 传送◾ 💧 钝悟的 IT 知识图谱 ◾ 🎯 我的博客 ◾