Java 中使用 Redis 缓存数据

Redis 是一种高性能的键值存储数据库,常用于缓存数据以提高应用性能。以下是如何在 Java 中使用 Redis 缓存数据并查询校验的详细方法。


添加 Redis 依赖

在 Maven 项目中,添加 Jedis 或 Lettuce 客户端依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>

或使用 Spring Data Redis:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


连接 Redis 服务器

使用 Jedis 连接 Redis 服务器:

Jedis jedis = new Jedis("localhost", 6379);
// 设置密码(如果需要)
jedis.auth("password");

使用 Spring Data Redis 连接:

@Configuration
public class RedisConfig {
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("localhost", 6379);
        config.setPassword("password");
        return new LettuceConnectionFactory(config);
    }
}


缓存数据到 Redis

使用 Jedis 缓存数据:

// 设置键值对
jedis.set("user:1", "{\"name\":\"Alice\",\"age\":30}");
// 设置过期时间(秒)
jedis.expire("user:1", 3600);

使用 Spring Data Redis 缓存数据:

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void cacheUser(User user) {
    redisTemplate.opsForValue().set("user:" + user.getId(), user);
    redisTemplate.expire("user:" + user.getId(), 3600, TimeUnit.SECONDS);
}


查询并校验缓存数据

使用 Jedis 查询数据:

String userJson = jedis.get("user:1");
if (userJson != null) {
    User user = new Gson().fromJson(userJson, User.class);
    System.out.println("Cached user: " + user.getName());
} else {
    System.out.println("Cache miss, fetching from DB...");
}

使用 Spring Data Redis 查询数据:

public User getUserFromCache(String userId) {
    User user = (User) redisTemplate.opsForValue().get("user:" + userId);
    if (user != null) {
        System.out.println("Cached user: " + user.getName());
        return user;
    } else {
        System.out.println("Cache miss, fetching from DB...");
        return null;
    }
}


校验缓存数据的有效性

可以通过 TTL(生存时间)或手动校验缓存数据是否过期:

Long ttl = jedis.ttl("user:1");
if (ttl > 0) {
    System.out.println("Cache is valid, TTL: " + ttl + " seconds");
} else {
    System.out.println("Cache expired or does not exist");
}

或结合数据库校验:

public User getUserWithCache(String userId) {
    User user = getUserFromCache(userId);
    if (user == null) {
        user = fetchUserFromDatabase(userId);
        if (user != null) {
            cacheUser(user);
        }
    }
    return user;
}


删除缓存数据

手动删除缓存数据:

jedis.del("user:1");

或使用 Spring Data Redis:

redisTemplate.delete("user:" + userId);


以上方法涵盖了 Java 中 Redis 缓存的基本使用场景,包括连接、存储、查询和校验。根据实际需求,可以进一步优化缓存策略或集成更高级的功能。

更多推荐