Java后端爱上SpringBoot 第七节:SpringBoot中缓存应用

Java后端爱上SpringBoot 第七节:SpringBoot中缓存应用

  • 缓存配置
  • @CachePut 给缓存添加数据
  • @Cacheable 取缓存数据

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

你可能感兴趣的:(SpringBoot)