SpringBoot--使用Spring Cache整合redis
一、简介
Spring Cache是Spring对缓存的封装,适用于 EHCache、Redis、Guava等缓存技术。
二、作用
主要是可以使用注解的方式来处理缓存,例如,我们使用redis缓存时,查询数据,如果查询到,会判断查到的结果是否为空,如果不为空,则会将结果存入redis缓存,此处需要一层判断;而如果使用Spring Cache的注解进行处理,则不需要判断就可以达到目的。
示例:
使用前:
public List<User> selectByUsernameRedis(String username) {
String key = "user:username:"+username;
List<User> userList = userMapper.selectByuserName(username);
if(!userList.isEmpty()){
stringRedisTemplate.opsForValue().set(key, JSON.toJSONString(userList));
}
return userList;
}
使用后:
@Cacheable(value = "user", key = "#username")
public List<User> selectByUsernameRedis1(String username) {
return userMapper.selectByuserName(username);
}
三、配置及使用
导入包和配置文件与单独集成redis时一致,此处不做描述。
1、主函数增加@EnableCaching配置,如果主函数不添加@EnableCaching配置,则后面的配置不生效。
package com.example.demo; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication
@EnableCaching
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
} }
2、代码实现
主要有@Cacheable、@CachePut、@CacheEvict三个注解,对应关系如下:
@Cacheable 查询,先查询缓存,如果存在直接返回;如果不存在,查询数据库,结果不为空,直接存入缓存。
@CachePut 存入缓存,适用于新增或更新方法。
@CacheEvict 删除缓存,适用于删除方法。
@CachePut(value = "user")
@Override
public String saveOrUpdate(User user) {
userMapper.insert(user);
return JSON.toJSONString(user);
} @Cacheable(value = "user", key = "#id")
@Override
public String get(Long id) {
return JSON.toJSONString(userMapper.selectByUserId(id));
} @CacheEvict(value = "user", key = "#id")
@Override
public void delete(Long id) {
userMapper.deleteByUserId(id);
}
SpringBoot--使用Spring Cache整合redis的更多相关文章
- SpringBoot 结合 Spring Cache 操作 Redis 实现数据缓存
系统环境: Redis 版本:5.0.7 SpringBoot 版本:2.2.2.RELEASE 参考地址: Redus 官方网址:https://redis.io/ 博文示例项目 Github 地址 ...
- spring cache整合redis
在项目中,我们经常需要将一些常用的数据使用缓存起来,避免频繁的查询数据库造成效率低下.spring 为我们提供了一套基于注解的缓存实现,方便我们实际的开发.我们可以扩展spring的cache接口以达 ...
- 【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案
前言 之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的. ...
- springboot整合spring @Cache和Redis
转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10779450.html spring基于注解的缓存 对于缓存声明,spring的缓存提供了一组java注解: ...
- 【Spring】17、spring cache 与redis缓存整合
spring cache,基本能够满足一般应用对缓存的需求,但现实总是很复杂,当你的用户量上去或者性能跟不上,总需要进行扩展,这个时候你或许对其提供的内存缓存不满意了,因为其不支持高可用性,也不具备持 ...
- SpringBoot入门系列(七)Spring Boot整合Redis缓存
前面介绍了Spring Boot 中的整合Mybatis并实现增删改查,.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/ ...
- Spring Boot(八)集成Spring Cache 和 Redis
在Spring Boot中添加spring-boot-starter-data-redis依赖: <dependency> <groupId>org.springframewo ...
- Spring Boot2 系列教程(二十九)Spring Boot 整合 Redis
经过 Spring Boot 的整合封装与自动化配置,在 Spring Boot 中整合Redis 已经变得非常容易了,开发者只需要引入 Spring Data Redis 依赖,然后简单配下 red ...
- springboot中使用cache和redis
知识点:springboot中使用cache和redis (1)springboot中,整合了cache,我们只需要,在入口类上加 @EnableCaching 即可开启缓存 例如:在service层 ...
随机推荐
- Rocket - tilelink - AtomicAutomata
https://mp.weixin.qq.com/s/O7VTHqpCFNJQi3EpucXkIw 简单介绍AtomicAutomata的实现.(细节问题太多,恕不完全表述.) 1. ...
- Java实现 LeetCode 547 朋友圈(并查集?)
547. 朋友圈 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指 ...
- Java实现 LeetCode 507 完美数
507. 完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False ...
- Java实现 LeetCode 498 对角线遍历
498. 对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ ...
- Java实现LeetCode_0001_Two Sum
import java.util.Arrays; import java.util.Scanner; public class TwoSum_1 { public static void main(S ...
- Redis学习笔记(二十一) 事务
文章开始啰嗦两句,写到这里共21篇关于redis的琐碎知识,没有过多的写编程过程中redis的应用,着重写的是redis命令.客户端.服务器以及生产环境搭建用到的主从.哨兵.集群实现原理,如果你真的能 ...
- 【从单体架构到分布式架构】(三)请求增多,单点变集群(2):Nginx
上一个章节,我们学习了负载均衡的理论知识,那么是不是把应用部署多套,前面挂一个负载均衡的软件或硬件就可以应对高并发了?其实还有很多问题需要考虑.比如: 1. 当一台服务器挂掉,请求如何转发到其他正常的 ...
- 用头发换JS的第一天
因为平时也在上班,这些都是在地铁上抽空开始看的,总结来说还是有一些收获存在,每次看都能发现一些新东西,废话不多说,开撸! JavaScript是一种网页编程语言,可以对网页的行为进行编程,简单来说HT ...
- isinstance用法
''' 作用:来判断一个对象是否是一个已知的类型. 其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表). ...
- mysql内连接
inner join(等值连接) 只返回两个表中联结字段相等的行 select * from role_action ra INNER JOIN action a on ra.action_id = ...