Java后端爱上SpringBoot 第七节:SpringBoot中缓存应用
PS:缓存是个好东西,个人理解将一些复用率高,但是不经常进行修改的数据放到缓存里是最好的。
缓存配置
先加上redis配置
redis:
database: 0
host: 127.0.0.1
port: 6379
password:
jedis:
pool:
max-active: 10
max-idle: 8
max-wait: 1000
min-idle: 0
启动类加上 @EnableCaching 开启缓存。
主要贴一下实现类,说几个注解:
package com.hyn.spring.service.impl;
import java.util.List;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.hyn.spring.entity.UserInfo;
import com.hyn.spring.repository.UserRepository;
import com.hyn.spring.service.UserInfoService;
@Service
public class UserInfoServiceImpl implements UserInfoService{
private static final Logger log = LoggerFactory.getLogger(UserInfoServiceImpl.class);
@Autowired
UserRepository userInfoDao;
@Override
@CachePut(value = "userinfocache",key="#userInfo.id") //@CachePut缓存新增的或更新的数据到缓存,其中缓存名称为people,数据的key是person的id。
public UserInfo save(UserInfo userInfo) {
UserInfo u = userInfoDao.save(userInfo);
log.info("为userinfo的id(也是cache的key):" + u.getId() + "数据做了缓存");
return u;
}
@Override
@CacheEvict(value = "userinfocache") //@CacheEvict从缓存people中删除key为id的数据。
public void remove(Long id) {
log.info("删除了userinfo的id(也是cache的key):" + id + "数据缓存");
userInfoDao.deleteById(id);
}
@Override
@Cacheable(value = "userinfocache",key="#userInfo.id") //@Cacheable缓存key为person的id数据到缓存people中。
public UserInfo findOne(UserInfo userInfo) {
Optional<UserInfo> u = userInfoDao.findById(userInfo.getId());
log.info("为userinfo的id(也是cache的key):" + u.get().getId() + "数据做了缓存");
return u.get();
}
@Override
@Cacheable(value = "alluserinfo") //@Cacheable缓存key为person的id数据到缓存people中。
public List<UserInfo> findAll() {
return userInfoDao.findAll();
}
}
@CachePut 给缓存添加数据
你将以将新增的接口加上此注解@CachePut注解将数据放进缓存,可以理解为 value 为这一数据的名称,key为这一数据的ID。
@Cacheable 取缓存数据
@Cacheable 的value 可以理解为取哪一类数据,key为这一类数据的id