25、springboot与缓存整合Redis
2024-09-29 23:09:10
默认使用ConcurrentMapCacheManager 将数据保存在下面的Map中
docker:
安装Redis:
查看官方文档:
添加约束
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
此时redis就引入再容器中
可以查看自动配置的类:RedisAutoConfiguration.class
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
} @Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
} @Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
在配置文件中引入redis的地址:
测试:
此时两个操作redis的类都在容器中:
//操作kv键值对的
@Autowired
RedisTemplate redisTemplate; //操作kv都是字符串
@Autowired
StringRedisTemplate stringRedisTemplate;
测试:
测试添加对象:
对象实现类需要实现序列化
public class Employee implements Serializable {
//测试保存对象
@Test
public void test2(){
//保存的是emp的对象
Employee emp = employeeMapper.getEmpById();
//保存的是employee的对象
//默认如果使用保存对象,使用jdk序列化机制,序列化后的数据保存在redis中
redisTemplate.opsForValue().set("emp01",emp);
}
//测试天对保存对象2
首先是自动一序列化器
@Configuration
public class redisConfig {
//专门序列化Employee
@Bean
public RedisTemplate<Object, Employee> redisTemplateEmp(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Employee> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer<Employee> json = new Jackson2JsonRedisSerializer<Employee>(Employee.class);
template.setDefaultSerializer(json);
return template;
}
}
@Autowired
RedisTemplate redisTemplateEmp; //测试保存对象
@Test
public void test2(){
//保存的是emp的对象
Employee emp = employeeMapper.getEmpById();
//将数据以json的方式
//实现redisTemplate默认的序列化规则,改变默认的序列化规则
redisTemplateEmp.opsForValue().set("emp1",emp);
}
测试缓存:
原理:
1、引入redis的starter,容器自动导入的是RedisCacheManage
2、RedisCacheManager帮我们自动创建RedisCache, redis通过操作redis缓存数据的
RedisCacheConfiguration.class @Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory, ResourceLoader resourceLoader) {
RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(this.determineConfiguration(resourceLoader.getClassLoader()));
List<String> cacheNames = this.cacheProperties.getCacheNames();
if (!cacheNames.isEmpty()) {
builder.initialCacheNames(new LinkedHashSet(cacheNames));
} return (RedisCacheManager)this.customizerInvoker.customize(builder.build());
}
protected Collection<RedisCache> loadCaches() {
List<RedisCache> caches = new LinkedList();
Iterator var2 = this.initialCacheConfiguration.entrySet().iterator(); while(var2.hasNext()) {
Entry<String, RedisCacheConfiguration> entry = (Entry)var2.next();
caches.add(this.createRedisCache((String)entry.getKey(), (RedisCacheConfiguration)entry.getValue()));
} return caches;
}
查询之后。再点击刷新依然是这个页面
3、默认保存数据都是k-v都是object,利用序列化来保存
查看缓存:
4、让保存的数据为json
1.引入redis的starter,cacheManager变为RedisCacheManager
2.默认创建的RedisCacheManager,再操作数据的 RedisConnectionFactory
RedisCacheConfiguration
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory, ResourceLoader resourceLoader) {
RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(this.determineConfiguration(resourceLoader.getClassLoader()));
List<String> cacheNames = this.cacheProperties.getCacheNames();
if (!cacheNames.isEmpty()) {
builder.initialCacheNames(new LinkedHashSet(cacheNames));
} return (RedisCacheManager)this.customizerInvoker.customize(builder.build());
}
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
3.默认使用的是JdkSerializationRedisSerializer
RedisTemplate.java public void afterPropertiesSet() {
super.afterPropertiesSet();
boolean defaultUsed = false;
if (this.defaultSerializer == null) {
this.defaultSerializer = new JdkSerializationRedisSerializer(this.classLoader != null ? this.classLoader : this.getClass().getClassLoader());
} }
4.自定义
springboot的1.5
最新文章
- 出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码)
- Arch Linux 安装博通 BCM4360 驱动(Arch Linux, Ubuntu, Debian, Fedora...)
- C#子类调用基类构造备忘
- OpenJDK将对Android开发产生怎样的影响?
- 【Bochs 官方手册翻译】 第一章 Bochs介绍
- ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆AnalyzerTool分词工具.非常实用!
- 使用Jenkins搭建持续集成服务
- 读jQuery官方文档:数据方法与辅助方法
- 简单的javascript实例二(随页面滚动广告效果)
- Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍
- JAVAScript:前端模块化开发
- Linux命令:在线练习地址
- 22.一个球从100m高度自由下落,每次落地后返跳回原高度的一半,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。
- MQTT 发布者订阅者
- Web前端编码规范[转]
- 记一次web服务模块开发过程
- 仿LOL项目开发第七天
- 关于Cocos2d-x中让主角运动的方法
- HttpComponents 基础接口/类与HTTP message的对应关系
- JMeter学习笔记(二) 一些实际应用的基础操作