You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot Data JPA项目(MySQL/PG数据源)中使用Aerospike作为缓存

在Spring Boot + Spring Data JPA应用中集成Aerospike作为缓存

下面是一套可落地的实现方案,完全适配你的现有技术栈:

1. 添加Aerospike依赖

在你的Maven pom.xml 中加入以下依赖:

<dependency>
    <groupId>com.aerospike</groupId>
    <artifactId>aerospike-spring-boot-starter</artifactId>
    <version>2.0.0</version> <!-- 请使用最新稳定版 -->
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

如果用Gradle,在build.gradle中添加:

implementation 'com.aerospike:aerospike-spring-boot-starter:2.0.0'
implementation 'org.springframework.boot:spring-boot-starter-cache'

2. 配置Aerospike连接

在application.yml中配置Aerospike集群信息:

aerospike:
  hosts:
    - host: aerospike-host-1
      port: 3000
    - host: aerospike-host-2
      port: 3000
  namespace: your-cache-namespace # 提前在Aerospike中创建好命名空间
  timeout: 5000

3. 配置Spring Cache与Aerospike集成

创建一个缓存配置类,把Aerospike作为Spring Cache的实现:

import com.aerospike.spring.boot.cache.AerospikeCacheManager;
import com.aerospike.client.AerospikeClient;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public AerospikeCacheManager aerospikeCacheManager(AerospikeClient aerospikeClient) {
        AerospikeCacheManager cacheManager = new AerospikeCacheManager(aerospikeClient);
        // 可为不同缓存设置默认过期时间(单位:秒)
        cacheManager.setDefaultExpiration(3600);
        return cacheManager;
    }
}

4. 在业务层使用缓存

在你的Spring Data JPA Repository对应的业务服务类中,用Spring Cache注解实现缓存逻辑:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 查询时优先从缓存取,缓存不存在则查DB并写入缓存
    @Cacheable(value = "users", key = "#userId")
    public User getUserById(Long userId) {
        return userRepository.findById(userId).orElse(null);
    }

    // 更新DB后同步更新缓存
    @CachePut(value = "users", key = "#user.id")
    public User updateUser(User user) {
        return userRepository.save(user);
    }

    // 删除DB数据后清除对应缓存
    @CacheEvict(value = "users", key = "#userId")
    public void deleteUser(Long userId) {
        userRepository.deleteById(userId);
    }
}

5. 关键注意事项

  • 缓存键设计:确保key表达式能唯一标识缓存条目,避免不同业务数据冲突。
  • 过期时间:根据业务数据的更新频率调整过期时间,避免缓存失效数据。
  • 缓存一致性:写操作(更新/删除)必须用@CachePut或@CacheEvict同步缓存状态,保证缓存与MySQL/PostgreSQL数据一致。
  • 命名空间隔离:在Aerospike中为缓存单独创建命名空间,避免与其他业务数据混存。

内容的提问来源于stack exchange,提问作者Krish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:12:41