写一下java 将数据从数据库中查出来并存到缓存中的代码
时间: 2024-11-05 16:28:46 浏览: 13
使用JAVA实现高并发无锁数据库操作步骤分享
在Java中,将数据从数据库查询并存储到缓存中,通常会使用JPA (Java Persistence API) 或 Hibernate 进行数据库操作,加上 Ehcache、Redis 或者 Guava Cache 等缓存库。这里提供一个基本的例子,假设我们使用Spring Boot结合Ehcache作为缓存:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
@Repository
@Transactional
public class MyRepository {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private CacheManager cacheManager; // 使用Ehcache的CacheManager
public List<MyEntity> getDataFromDB() {
// 查询数据库
Query query = entityManager.createQuery("SELECT e FROM MyEntity e", MyEntity.class);
List<MyEntity> dataFromDB = query.getResultList();
// 如果数据不在缓存,将其存储到缓存中
if (!cacheManager.getCache("myDataCache").containsKey("allData")) {
cacheManager.getCache("myDataCache").putAll(dataFromDB);
}
return cacheManager.getCache("myDataCache").get("allData");
}
// 对于需要更新操作后自动同步到缓存的数据,可以用@CacheEvict注解
@Cacheable(value = "myDataCache", key = "#id")
public MyEntity findById(Long id) {
MyEntity entity = entityManager.find(MyEntity.class, id);
return entity;
}
}
```
在这个例子中,`getDataFromDB`方法首先尝试从缓存中获取数据,如果没有,则查询数据库并将结果放入缓存。`findById`方法则是一个缓存友好型版本的查找操作,查询结果会被自动缓存。
阅读全文