跳至主要內容
Guava Cache 异步刷新技巧

Guava Cache是一款非常优秀的本地缓存框架。

这篇文章,我们聊聊如何使用 Guava Cache 异步刷新技巧带飞系统性能 。

1 经典配置

Guava Cache 的数据结构跟 JDK1.7 的 ConcurrentHashMap 类似,提供了基于时间、容量、引用三种回收策略,以及自动加载、访问统计等功能。


勇哥大约 5 分钟cachecacheGuava
深入剖析Guava Cache原理

Guava Cache 是非常强大的本地缓存工具,提供了非常简单 API 供开发者使用。

这篇文章,我们将详细介绍 Guava Cache 的基本用法回收策略刷新策略实现原理实战招式

1 基本用法

1.1 依赖配置

<dependency>
     <groupId>com.google.guava</groupId>
     <artifactId>guava</artifactId>
     <version>31.0.1-jre</version>
</dependency>

勇哥大约 17 分钟cachecacheGuava
如何设计一个Redis客户端SDK

这篇文章,我们聊聊如何设计一个 Redis 客户端 SDK 。

1 SDK 设计思路

SDK 的设计理念核心两点:

  1. 提供精简的 API 供开发者使用,方便与用户接入;

  2. 屏蔽三方依赖,用户只和对外 API 层交互 。


勇哥大约 7 分钟cachecacheRedis
对象池化框架Commons Pool 2

Apache Commons Pool 提供了通用对象池的实现,用于管理和复用对象,以提高系统的性能和资源利用率。

对象池是一种设计模式,它维护一组已经创建的对象,并在需要时将其提供给应用程序,而不是每次需要时都创建新的对象。

1 基础用法

1.1 添加依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.0</version>
</dependency>

勇哥大约 4 分钟cachecache
数据库连接池 Druid

在 Spring Boot 项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。

在这篇文章中,我们将探讨数据库连接池,深入解析其实现机制,以便更好地理解和规避潜在的风险。

1 为什么需要连接池

假如没有连接池,我们操作数据库的流程如下:


勇哥大约 11 分钟cachecache
本地缓存 VS 分布式缓存

缓存的世界很广阔,对于应用系统来讲,我们经常将缓存划分为本地缓存分布式缓存

本地缓存 :应用中的缓存组件,缓存组件和应用在同一进程中,缓存的读写非常快,没有网络开销。但各应用或集群的各节点都需要维护自己的单独缓存,无法共享缓存。

分布式缓存:和应用分离的缓存组件或服务,与本地应用隔离,多个应用可直接共享缓存。

1 缓存的本质

我们常常会讲:“加了缓存,我们的系统就会更快” 。


勇哥大约 11 分钟cachecache
四种强大的JDK本地缓存

这篇文章,笔者想聊聊那些在业务系统中较少被使用,但却活跃于中间件或者框架里,强大却又低调的缓存,笔者愿称他们为缓存世界的扫地僧

1 HashMap/ConcurrentHashMap 配置缓存

HashMap 是一种基于哈希表的集合类,它提供了快速的插入、查找和删除操作。


勇哥大约 8 分钟cachecache
分页列表缓存

开源中国的红薯哥写了很多关于缓存的文章,其中多级缓存思路,分页列表缓存这些知识点给了我很大的启发性。

写这篇文章,我们聊聊分页列表缓存,希望能帮助大家提升缓存技术认知。

1 直接缓存分页列表结果

显而易见,这是最简单易懂的方式。


勇哥大约 6 分钟cachecache分页
布隆过滤器原理与实战

布隆过滤器是一个精巧而且经典的数据结构。

你可能没想到: RocketMQ、 Hbase 、Cassandra 、LevelDB 、RocksDB 这些知名项目中都有布隆过滤器的身影。

对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。

1 缓存穿透


勇哥大约 12 分钟cachecache布隆过滤器
Redis 事务模式和 Lua 脚本

准确的讲,Redis 事务包含两种模式 : 事务模式Lua 脚本

先说结论:

Redis 的事务模式具备如下特点:

  • 保证隔离性;
  • 无法保证持久性;
  • 具备了一定的原子性,但不支持回滚;
  • 一致性的概念有分歧,假设在一致性的核心是约束的语意下,Redis 的事务可以保证一致性。

但 Lua 脚本更具备实用场景,它是另一种形式的事务,他具备一定的原子性,但脚本报错的情况下,事务并不会回滚。Lua 脚本可以保证隔离性,而且可以完美的支持后面的步骤依赖前面步骤的结果


勇哥大约 14 分钟cachecacheRedis
2