SpringBoot-@Caching-@CachePut-@CacheEvict-@EnableCaching-redis注解缓存
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
启动类上加上:
import org.springframework.cache.annotation.EnableCaching;
@EnableCaching
package cn.jiangjiesheng.edu.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;
/**
* Redis 相关配置
*/
@Component
@Data
@RefreshScope
public class RedisConfig {
/**
* 设置序列化等缓存配置
*
* @return
*/
@Bean
public RedisCacheConfiguration redisCacheConfiguration() {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
// 设置序列化的方式
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(RedisSerializationContext
.SerializationPair
.fromSerializer(RedisSerializer.json()));
return redisCacheConfiguration;
}
}
package cn.jiangjiesheng.edu.service.rediscache;
import cn.jiangjiesheng.edu.entity.user.UserInformation;
import cn.jiangjiesheng.edu.mapper.user.UserInformationMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service;
import java.util.List;
// https://blog.csdn.net/m0_71890428/article/details/126440563
@Service
@CacheConfig(cacheNames = "cn.jiangjiesheng.edu.service.rediscache.RedisUserService" )
public class RedisUserService {
//另外paas中海油这个,按 : 号来
// @RedisClearCache(keys = {CacheConstants.ALL})
@Autowired
private UserInformationMapper userInformationMapper;
//'userAll' 表示的是常量,不加就是变量了
// 'userAll'+#user.id 表示常量加参数
// @CachePut(key = "#user.id")// 为添加的值指定id
@Caching(// 添加多个缓存操作
put = @CachePut(key = "#user.id"), //按这个key直接把入参user保存到redis,
evict = @CacheEvict(key = "'userAll'") //按这个key去失效
)
public UserInformation saveUser(UserInformation user) {
userInformationMapper.insert(user);
return user;
}
// @CachePut(key = "#user.id")
@Caching(
put = @CachePut(key = "#user.id"),
evict = @CacheEvict(key = "'userAll'")
)
public UserInformation updateUser(UserInformation user) {
userInformationMapper.updateByPrimaryKey(user);
return user;
}
// @CacheEvict(key = "#id")
@Caching(
evict = {@CacheEvict(key = "#id"), @CacheEvict(key = "'userAll'")}
)
public int removeUser(Integer id) {
return userInformationMapper.deleteByPrimaryKey(id);
}
@Cacheable(key = "#id")
public UserInformation findById(Integer id) {
return userInformationMapper.selectByPrimaryKey(id);
}
//@Cacheable(value = CacheConstants.GETDUPLICATEUSER,
key = "'containerId:'+ #containerId", unless = "#result==null || #result.size() <= 0")
//这个表示缓存了key 为 'userAll' 的list结果
@Cacheable(key = "'userAll'", unless = "#result==null || #result.size() <= 0")
public List<UserInformation> findAll() {
return userInformationMapper.selectAll();
}
}
package cn.jiangjiesheng.edu.controller.withoutLogin;
import cn.jiangjiesheng.edu.entity.user.UserInformation;
import cn.jiangjiesheng.edu.service.rediscache.RedisUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/withoutLogin/testRedisCache")
public class TestRedisCacheController {
@Autowired
private RedisUserService redisUserService;
@PostMapping("/saveUser")
public void saveUser(@RequestBody UserInformation user) {
redisUserService.saveUser(user);
}
@PostMapping("/updateUser")
public void updateUser(@RequestBody UserInformation user) {
redisUserService.updateUser(user);
}
@PostMapping("/removeUser")
public void removeUser(@RequestBody UserInformation user) {
redisUserService.removeUser(user.getId());
}
@GetMapping("/findById")
public UserInformation findById(Integer id) {
UserInformation byId = redisUserService.findById(id);
return byId;
}
@GetMapping("/findAll")
public List<UserInformation> findAll() {
return redisUserService.findAll();
}
}
正文到此结束
- 本文标签: Spring Boot
- 本文链接: https://code.jiangjiesheng.cn/article/26
- 版权声明: 本文由小江同学原创发布,转载请先联系本站长,谢谢。