SpringBoot2整合Redis缓存
遵循SpringBoot三板斧
第一步加依赖
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis依赖commons-pool 这个依赖一定要添加 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
第二步写注解
@EnableCaching//开启缓存支持
第三步写配置
spring:
redis:
database: 0
host: 192.168.1.11
port: 6379
password:
timeout: 600
lettuce:
pool:
max-active: 50
max-wait: -1
max-idle: 8
min-idle: 0
编写Redis配置类
/**
* @Author: zc
* @Date: 2019/11/3 14:12
* @Description: SpringBoot2.0 Redis缓存配置
* @EnableCaching:开启缓存支持
*/
@Slf4j
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Value("${sys.dataCaching.expireTime:0}")
private int expireTime;
@Resource
private LettuceConnectionFactory lettuceConnectionFactory;
@Override
@Bean
public KeyGenerator keyGenerator() {//设置自定义key{ClassName + methodName + params}
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(",Method:");
sb.append(method.getName());
sb.append(",Params[");
for (int i = 0; i < params.length; i++) {
sb.append(params[i].toString());
if (i != (params.length - 1)) {
sb.append(",");
}
}
sb.append("]");
log.debug("Data Caching Redis Key : {}", sb.toString());
return sb.toString();
};
}
//自定义keyGenerator,Key生成器
@Bean
public KeyGenerator updateByIdkeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(",Method:");
sb.append("getById");
sb.append(",Params[");
try {
Field id = params[0].getClass().getDeclaredField("id");
id.setAccessible(true);
sb.append(id.get(params[0]).toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
sb.append("]");
log.debug("Data Caching Redis Key : {}", sb.toString());
return sb.toString();
};
}
//自定义keyGenerator,Key生成器
@Bean
public KeyGenerator deleteByIdkeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(",Method:");
sb.append("getById");
sb.append(",Params[");
for (int i = 0; i < params.length; i++) {
sb.append(params[i].toString());
if (i != (params.length - 1)) {
sb.append(",");
}
}
sb.append("]");
log.debug("Data Caching Redis Key : {}", sb.toString());
return sb.toString();
};
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
//设置缓存过期时间
if (expireTime > 0) {
log.info("Redis 缓存过期时间 : {}", expireTime);
//设置缓存有效期 秒
redisCacheConfiguration.entryTtl(Duration.ofSeconds(expireTime));
} else {
log.info("Redis 未设置缓存过期时间");
}
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {//创建RedisTemplate
// 设置序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
RedisSerializer<?> stringSerializer = new StringRedisSerializer();
// key序列化
redisTemplate.setKeySerializer(stringSerializer);
// value序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// Hash key序列化
redisTemplate.setHashKeySerializer(stringSerializer);
// Hash value序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
如何使用查询缓存
@CacheConfig(cacheNames = "demoDao")
@Component
public class DemoDao implements IDemoDAO<> {
@Autowired
DemoMapper mapper;
//用默认配置的keyGenerator
@Cacheable
@Override
public Demo getById(Integer id) {
return mapper.getById(id);
}
//使用配置的keyGenerator,清空缓存
@CacheEvict(keyGenerator = "updateByIdkeyGenerator")
@Override
public int update(T entity) {
return mapper.update(entity);
}
//使用配置的keyGenerator,清空缓存
@CacheEvict(keyGenerator = "deleteByIdkeyGenerator")
@Override
public int deleteById(Integer id) {
return mapper.deleteById(id);
}
}
SpringBoot2整合Redis缓存的更多相关文章
- SpringBoot缓存管理(二) 整合Redis缓存实现
SpringBoot支持的缓存组件 在SpringBoot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springframework.cache.Cache和org.spri ...
- Spring优雅整合Redis缓存
“小明,多系统的session共享,怎么处理?”“Redis缓存啊!” “小明,我想实现一个简单的消息队列?”“Redis缓存啊!” “小明,分布式锁这玩意有什么方案?”“Redis缓存啊!” “小明 ...
- SpringBoot 整合 Redis缓存
在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求. Spr ...
- SpringBoot整合redis缓存(一)
准备工作 1.Linux系统 2.安装redis(也可以安装docker,然后再docker中装redis,本文章就直接用Linux安装redis做演示) redis下载地址: 修改redis,开启远 ...
- 完整SpringBoot Cache整合redis缓存(二)
缓存注解概念 名称 解释 Cache 缓存接口,定义缓存操作.实现有:RedisCache.EhCacheCache.ConcurrentMapCache等 CacheManager 缓存管理器,管理 ...
- springboot整合redis缓存一些知识点
前言 最近在做智能家居平台,考虑到家居的控制需要快速的响应于是打算使用redis缓存.一方面减少数据库压力另一方面又能提高响应速度.项目中使用的技术栈基本上都是大家熟悉的springboot全家桶,在 ...
- SpringBoot入门系列(七)Spring Boot整合Redis缓存
前面介绍了Spring Boot 中的整合Mybatis并实现增删改查,.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/ ...
- springboot整合redis缓存
使用springBoot添加redis缓存需要在POM文件里引入 org.springframework.bootspring-boot-starter-cacheorg.springframewor ...
- spring整合redis缓存,以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
maven项目中在pom.xml中依赖2个jar包,其他的spring的jar包省略: <dependency> <groupId>redis.clients</grou ...
随机推荐
- 爬虫笔记(十四)——BeautifulSoup库
Beautifulsoup库: 该库是python语言写的,主要功能是将html.xml格式的数据对象解析成"标签树",并进行遍历和维护,即可以从网页抓取数据. 借鉴的html是妹 ...
- 893C. Rumor#谣言传播(赋权无向图&搜索)
题目出处:http://codeforces.com/problemset/problem/893/C 题目大意:一个城中有一些关系圈,圈内会传播谣言,求使每个人都知道谣言的最小花费 #include ...
- iOS 部分API理解
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- ACM-ICPC Nanjing Onsite 2018 I. Magic Potion
题意:类似二分图匹配给的题目,不过这次在这里给出了k,表示没人可以再多一次匹配机会,这次匹配不能用上一次被匹配的对象 分析:不能用匈牙利做俩次匹配,因为俩次的最大匹配并不等价于总和的匹配,事实证明,你 ...
- socket握手SYN和ACK理解
ACK 英文缩写: ACK (ACKnowledge Character) 中文译名: 确认字符 分类: 传输与接入 解释: 在数据通信传输中,接收站发给发送站的一种传输控制字符.它表示确认发来的数据 ...
- ioctl函数的使用之查看终端屏幕大小
要想查看一个终端屏幕的大小,可以使用ioctl()函数,步骤如下. 1.首先找到对应终端的文件号,一般在 /dev/pts/....(0,1,2..).具体几号需要自己验证.如在pts目录下使用命 ...
- 项目部署篇之三——安装tomcat7.0
1.下载tomcat 百度云下载 链接:https://pan.baidu.com/s/1UGPYHmR-1ehQRvdKGhSlyQ 提取码:3c0g 直接通过指令下载 wget http://mi ...
- jmeter json乱码
0 环境 系统环境:win7 1 操作 1 找到jmeter.properties 找到jmeter下的bin目录jmeter.properties文件 例如apache-jmeter-\bin\jm ...
- Qt 使用自带的OpenGL模块开发程序
QT中使用opengl .pro文件中添加 QT += opengl 1.使用指定版本的OpenGL如下使用opengl4.5调用方法,使用指定版本的接口,必须设备图形显示设备支持对应OpenGL版本 ...
- java中的锁——列队同步器
队列同步器 队列同步器(AbstractQueuedSynchronizer)为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量.事件,等等)提供一个框架.此类的设计目标是成为依 ...