数据库
未读
Redis 基础
这是一篇Redis介绍与应用的文章,主要概述了Redis作为一种内存数据库的特性及其在缓存和分布式锁中的应用。文章首先解释了Redis的高性能和高并发优势,介绍了其与传统数据库的差异,并对比了Redis和Map/Guava缓存的区别。接着,文章详细分析了Redis与Memcached的不同,列举了Redis的常见数据结构(如String、Hash、List、Set、Sorted Set)及其对应的应用场景。此外,还讲解了Redis的过期时间设置、内存淘汰机制、持久化机制(RDB与AOF)、事务功能,以及解决缓存雪崩和缓存穿透问题的方法。文章还探讨了如何处理Redis的并发竞争问题与保证缓存与数据库的双写一致性。
Java
未读
MQ如何保证消息顺序性?
这篇文章主要讨论了消息的有序性及其在RocketMQ中的实现。消息有序性指的是在消费一类消息时,能够按照发送顺序进行消费。文章区分了全局顺序消息和部分顺序消息,并解释了部分顺序消息的实现方式。为了实现顺序消息,生产者需要有序地发送消息,消费者则需要使用有序消费模式。生产者通过消息队列选择器将相同的消息发送到同一队列中,以保证顺序性。消费者则通过MessageListenerOrderly接口,结合分布式锁和本地锁,确保同一时刻只有一个线程消费同一队列的消息,从而实现顺序消费。
数据库
未读
RedLock 分布式锁
这是一篇介绍Redis RedLock分布式锁实现的文章,主要讲解了如何通过RedLock算法保证分布式环境中的锁安全性、避免死锁和提高容错性。文章首先介绍了如何在单节点上实现分布式锁,接着讲解了RedLock算法的基本原理,即通过多个Redis节点(至少5个)申请锁并确保只有大部分节点存活时才有效锁。文章还说明了如何处理锁申请失败、放锁操作以及节点崩溃后的恢复机制。同时,文章探讨了RedLock的性能问题以及如何通过持久化机制避免数据丢失,确保系统稳定性。
Java
未读
MQ如何保证消息不丢失?
这是一篇关于消息队列(MQ)消息丢失及其防止机制的文章,介绍了RabbitMQ、RocketMQ和Kafka在不同场景下的消息丢失原因以及如何通过不同机制防止消息丢失。RabbitMQ主要通过事务机制、确认模式和消息持久化来保障消息不丢失,消费者通过手动确认消息来避免丢失。RocketMQ则通过同步和异步发送方式、刷盘策略、集群模式和消费者ack机制来保证消息的可靠性。Kafka通过设置ack=all、复制因子、min.insync.replicas等参数以及手动提交消费者的offset来确保消息不丢失。
数据库
未读
MySQL Explain执行计划
这篇文章介绍了MySQL中的EXPLAIN命令,它用于显示MySQL如何使用索引处理SELECT语句和连接表。通过EXPLAIN提供的信息,用户可以优化查询语句和选择更合适的索引。文章列出了EXPLAIN命令的使用方法,以及SELECT_TYPE字段、TYPE字段和EXTRA列的解释。SELECT_TYPE字段包括不同查询类型,如UNION、DEPENDENT UNION、SUBQUERY、DERIVED、SIMPLE、PRIMARY和UNION RESULT。TYPE字段和EXTRA列则提供有关查询处理方式的更多细节,帮助优化查询性能。
运维
未读
ELK Stack 日志检索
这篇文章介绍了ELK Stack(Elasticsearch、Logstash和Kibana)的概述及其工作原理。Elasticsearch是一个分布式、实时的搜索引擎,Logstash用于数据收集和处理,Kibana则负责数据的可视化分析。ELK Stack常用于日志管理、应用监控和安全分析。文章进一步描述了如何将Spring Boot与ELK Stack集成,通过配置Logback、Logstash以及Elasticsearch,来收集和分析Spring Boot应用程序的日志数据。具体步骤包括添加依赖、配置Logback和Logstash,以及在Kibana中设置索引模式,帮助用户实现高效的日志收集与分析。
数据库
未读
MySQL 多版本并发控制
这是一篇关于MVCC(多版本并发控制)的文章,介绍了其在数据库中的应用及原理。MVCC通过维护数据的多个版本来避免写操作阻塞读操作,从而实现高效的并发访问。文章详细解释了Undo Log和Redo Log的作用,分别用于回滚操作和恢复提交后的数据。MVCC通过快照读和当前读来区分数据读取方式,前者避免加锁以提高并发性能,后者通过加锁确保读取的是最新数据。文章进一步介绍了ReadView的概念,它用于在快照读时判断数据版本的可见性,并提供了ReadView的生成规则和查询流程。总结指出,在不同隔离级别下,MVCC的行为会有所不同,Read Committed可能会导致不可重复读,而Repeatable Read则能避免此问题。
数据库
未读
MySQL 事务隔离级别
这篇文章介绍了事务的基本概念及其隔离级别,事务是指一组逻辑操作,要么全部成功,要么完全失败。事务的四大特性是原子性、一致性、隔离性和持久性。文章讨论了并发事务可能带来的问题,如脏读、丢失修改、不可重复读和幻读,并解释了这些问题的含义及区别。接着,文章详细介绍了SQL标准定义的四个事务隔离级别:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ和SERIALIZABLE,并阐述了它们如何影响脏读、不可重复读和幻读的发生。在MySQL InnoDB存储引擎中,默认的隔离级别是REPEATABLE-READ,这已能避免幻读。文章还提供了实际的操作示例,展示了如何设置事务隔离级别以及并发控制语句的使用。
数据库
未读
MySQL SQL的执行过程
这篇文章分析了 MySQL 的基本架构和 SQL 语句的执行流程。首先,介绍了 MySQL 的主要架构组件,包括 Server 层(连接器、查询缓存、分析器、优化器、执行器等)和存储引擎层(如 InnoDB、MyISAM)。接着,详细说明了查询语句和更新语句的执行流程。查询语句会先进行权限校验,查询缓存,经过分析器和优化器处理后由执行器调用存储引擎执行。更新语句则在执行时会涉及日志模块(如 binlog 和 redo log)以确保数据一致性,并通过两阶段提交机制实现崩溃恢复。总的来说,MySQL 通过这一系列流程保证了高效的数据操作和事务一致性。
Java
未读
Spring Boot的自动配置原理
这是一篇关于Spring Boot自动配置的文章。文章首先介绍了Spring Boot如何通过自动配置简化配置任务,减少了传统Spring框架中繁琐的手动配置代码。自动配置的原理基于条件化配置,通过条件注解(如@ConditionalOnClass、@ConditionalOnProperty等)来决定是否启用某个配置项。Spring Boot使用自动配置类来创建和配置bean,这些类通常位于org.springframework.boot.autoconfigure包中。配置属性可以通过@ConfigurationProperties注解绑定,且可以从多种来源获取配置值。开发人员也可以自定义自动配置类,通过创建带有@Configuration注解的类并使用条件注解来控制生效条件。此外,还可以自定义条件注解,通过实现Condition接口来实现灵活的自动配置控制。最后,文章介绍了自动配置的优先级,Spring Boot根据条件注解和配置属性加载适合当前应用的自动配置类。
Java
未读
Spring Boot简介和特性
这是一篇Spring Boot简介和特性的文章。Spring Boot 是一个开源的 Java 框架,用于快速创建基于 Spring 的应用程序,通过自动配置和约定优于配置的原则简化开发过程,帮助开发者专注于业务逻辑而不需过多关注底层配置。其主要特性包括简化的配置、内嵌的服务器(如 Tomcat、Jetty)、自动化依赖管理(通过 Starter)、智能的开发工具、健康监测与管理功能、集成测试支持和外部化配置。Spring Boot 还继承了 Spring 框架强大的生态系统,支持丰富的扩展模块和第三方库,适用于从小型项目到大型企业级应用的开发。
运维
未读
Nginx 简介、使用
这是一篇Nginx简介和特性的文章。Nginx是一款高性能的开源Web服务器和反向代理服务器,采用事件驱动的异步架构,能够高效处理大量并发连接。其主要特点包括高性能、轻量级、反向代理、静态文件服务和支持动态模块加载。Nginx配置文件(nginx.conf)采用简单的文本格式,包含多个配置块,如http块、server块和location块,分别用于定义全局设置、虚拟主机配置和请求处理规则。Nginx广泛用于负载均衡、SSL终止、反向代理及提供静态内容服务,且支持高度可定制的配置和功能扩展。
搜索引擎
未读
ElasticSearch 基础案例
这是一篇Elasticsearch开发案例的文章。文章列出了30个Elasticsearch开发案例,涵盖了索引创建、文档操作、搜索、聚合统计等多个方面。例如,如何创建索引、向索引添加文档、获取和更新文档、删除文档、执行关键词搜索、过滤查询、进行聚合操作(如计算平均值、最大值、最小值等)。文章还包括了创建多个示例索引(如products、logs、articles、users)并提供了相应的实战代码示例,帮助开发者理解如何在实际项目中应用Elasticsearch的基本功能和高级查询操作。
Java
未读
散列函数(哈希)
这是一篇散列函数(哈希算法)的文章。文章介绍了散列函数的基本原理和实现步骤,包括输入数据处理、初始哈希值设置、数据合并、压缩函数等。常见的散列算法如MD5、SHA-1、SHA-256、SHA-512和SHA-3被讨论,其中SHA-256和SHA-512作为SHA-2系列算法,因其较高的安全性被广泛应用。文章详细解释了SHA-256和SHA-512的实现过程,包括数据预处理、消息块划分和压缩函数的多次迭代,并指出这两种算法的安全性较高,适用于数据完整性验证和密码学领域。最后,提供了一个Java实操示例,展示了如何使用Java实现SHA-256和SHA-512算法。