spring-boot | 整合Redis缓存数据
来源:互联网 发布:如何更换域名dns 编辑:程序博客网 时间:2024/06/05 09:33
spring boot 整合redis非常简单,首先创建spring boot的Maven项目,然后在pom.xml文件中引入redis的依赖。
引入redis的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
添加redis的配置文件
在application.properties里面设置redis的配置文件,spring boot会自动加载redis的配置文件,非常方便。
#redsi配置# Redis数据库索引(默认为0) spring.redis.database=2 # Redis服务器地址 spring.redis.host=localhost# Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= 123456#连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0
缓存的的配置
@Configuration@EnableCachingpublic class CacheConfig extends CachingConfigurerSupport { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.database}") private int database; @Value("${spring.redis.password}") private String password; /** * 键的生成策略 * @return */ @Bean public KeyGenerator wiselyKeyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } @Bean public JedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory factory = new JedisConnectionFactory(); factory.setHostName(host); factory.setPort(port); factory.setTimeout(timeout); factory.setPassword(password); factory.setDatabase(database); return factory; } /** * 配置CacheManager 管理cache * @param redisTemplate * @return */ @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); cacheManager.setDefaultExpiration(60*60); // 设置key-value超时时间 return cacheManager; } @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值 Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(mapper); template.setValueSerializer(serializer); //使用StringRedisSerializer来序列化和反序列化redis的key值 template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; }}
单元测试
@RunWith(SpringRunner.class)@SpringBootTestpublic class RedisTest { @Autowired private RedisTemplate<Object, Object> redisTemplate; @Test public void RedisTests(){ try { redisTemplate.opsForValue().set("name", "张三"); Object object = redisTemplate.opsForValue().get("name"); System.out.println(object); } catch (Exception e) { e.printStackTrace(); } }}
测试结果如下,name已经被成功存储到redis中.控制台成功打印出张三。
再通过redis客户端查看,发现数据已经被存储。到这里,spring boot结合reids已经整合完毕。
数据缓存
对应实体类,因为之前我们已经进行过序列化配置,所以这里无需再实现序列化接口。
@Table(name = "city")public class City implements Serializable{ private static final long serialVersionUID = 1L; @Id private String id; private String name; private String state; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getState() { return state; } public void setState(String state) { this.state = state; }}
利用注解的方式进行缓存
/** * @Cacheable * 应用到读取数据的方法上,先从缓存中读取,如果没有再从DB获取数据,然后把数据添加到缓存中 * unless 表示条件表达式成立的话不放入缓存 */ @Override @Cacheable(value = "city" , keyGenerator = "wiselyKeyGenerator") public List<City> searchById(City id) { System.out.println("没有执行缓存"); return cityDao.select(id); }
编写测试类并进行测试
发现第一次查询的是数据库,第二次直接从缓存中读取的数据。
再通过redis客户端发现数据已经被成功存储.
注意
缓存注解
条件缓存
@Cacheable
应用到读取数据的方法上,先从缓存中读取,如果没有再从DB获取数据,然后把数据添加到缓存中 。
unless 表示条件表达式成立的话不放入缓存。
主要参数:
@CacheEvict
应用到删除数据的方法上,调用方法时会从缓存中删除对应key的数据。
@CachePut
应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存。
(完)
参考文章
Spring Boot with Redis
Spring思维导图,让Spring不再难懂(cache篇)
阅读全文
0 0
- spring-boot | 整合Redis缓存数据
- Spring Boot Redis 数据缓存
- spring boot整合redis实现缓存机制
- Spring Boot 整合 Redis 实现缓存操作
- Spring Boot 整合 Redis 实现缓存操作
- Spring Boot 整合 Redis 实现缓存操作
- Spring Boot 整合 Redis 实现缓存操作
- Spring Boot 整合 Redis 实现缓存操作
- spring boot 整合redis对查询数据做缓存( 利用spring的AOP技术)
- spring boot 整合redis对查询数据做缓存( 利用spring的AOP技术)
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis实现数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot集成redis做数据缓存
- Spring Boot使用redis做数据缓存
- Spring Boot使用redis做数据缓存
- Could not retrieve transation read-only status server错误
- instanceof 运算符
- 101 LINQ Samples 例子url
- go工具集
- Chrome 中的 JavaScript 断点设置和调试技巧
- spring-boot | 整合Redis缓存数据
- spring-boot | 整合通用Mabatis 分页插件PageHelper
- spring-boot | 使员Druid 整合Mybatis 最简配置多数据源
- 进行SSM框架开发中遇到JSTL标签提示:"items" does not support runtime expressions解决办法
- spring-boot | 多线程并发定时任务
- 微服务架构
- Linux | 常用命令(一)
- java | 集合框架
- java | 多线程(一)