`

Spring Boot使用redis做数据缓存

 
阅读更多

1 添加redis支持

在pom.xml中添加

Xml代码  收藏代码
  1. <dependency>  
  2.           <groupId>org.springframework.boot</groupId>  
  3.           <artifactId>spring-boot-starter-redis</artifactId>  
  4.       </dependency>  

 

2 redis配置

Java代码  收藏代码
  1. package com.wisely.ij.config;  
  2.   
  3. import com.fasterxml.jackson.annotation.JsonAutoDetect;  
  4. import com.fasterxml.jackson.annotation.PropertyAccessor;  
  5. import com.fasterxml.jackson.databind.ObjectMapper;  
  6. import org.springframework.cache.CacheManager;  
  7. import org.springframework.cache.annotation.CachingConfigurerSupport;  
  8. import org.springframework.cache.annotation.EnableCaching;  
  9. import org.springframework.cache.interceptor.KeyGenerator;  
  10. import org.springframework.context.annotation.Bean;  
  11. import org.springframework.context.annotation.Configuration;  
  12. import org.springframework.data.redis.cache.RedisCacheManager;  
  13. import org.springframework.data.redis.connection.RedisConnectionFactory;  
  14. import org.springframework.data.redis.core.RedisTemplate;  
  15. import org.springframework.data.redis.core.StringRedisTemplate;  
  16. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;  
  17.   
  18. import java.lang.reflect.Method;  
  19.   
  20.   
  21. @Configuration  
  22. @EnableCaching  
  23. public class RedisConfig extends CachingConfigurerSupport{  
  24.   
  25.     @Bean  
  26.     public KeyGenerator wiselyKeyGenerator(){  
  27.         return new KeyGenerator() {  
  28.             @Override  
  29.             public Object generate(Object target, Method method, Object... params) {  
  30.                 StringBuilder sb = new StringBuilder();  
  31.                 sb.append(target.getClass().getName());  
  32.                 sb.append(method.getName());  
  33.                 for (Object obj : params) {  
  34.                     sb.append(obj.toString());  
  35.                 }  
  36.                 return sb.toString();  
  37.             }  
  38.         };  
  39.   
  40.     }  
  41.   
  42.     @Bean  
  43.     public CacheManager cacheManager(  
  44.             @SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {  
  45.         return new RedisCacheManager(redisTemplate);  
  46.     }  
  47.   
  48.     @Bean  
  49.     public RedisTemplate<String, String> redisTemplate(  
  50.             RedisConnectionFactory factory) {  
  51.         StringRedisTemplate template = new StringRedisTemplate(factory);  
  52.         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);  
  53.         ObjectMapper om = new ObjectMapper();  
  54.         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);  
  55.         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);  
  56.         jackson2JsonRedisSerializer.setObjectMapper(om);  
  57.         template.setValueSerializer(jackson2JsonRedisSerializer);  
  58.         template.afterPropertiesSet();  
  59.         return template;  
  60.     }  
  61. }  

 

 

3 redis服务器配置

Properties代码  收藏代码
  1. # REDIS (RedisProperties)  
  2. spring.redis.database= # database name  
  3. spring.redis.host=localhost # server host  
  4. spring.redis.password= # server password  
  5. spring.redis.port=6379 # connection port  
  6. spring.redis.pool.max-idle=8 # pool settings ...  
  7. spring.redis.pool.min-idle=0  
  8. spring.redis.pool.max-active=8  
  9. spring.redis.pool.max-wait=-1  
  10. spring.redis.sentinel.master= # name of Redis server  
  11. spring.redis.sentinel.nodes= # comma-separated list of host:port pairs  

 

4 应用

测试两个实体类

Java代码  收藏代码
  1. package com.wisely.ij.domain;  
  2.   
  3.   
  4. public class Address {  
  5.     private Long id;  
  6.     private String province;  
  7.     private String city;  
  8.   
  9.     public Address(Long id,String province, String city) {  
  10.         this.id = id;  
  11.         this.province = province;  
  12.         this.city = city;  
  13.     }  
  14.   
  15.     public Address() {  
  16.     }  
  17.   
  18.     public Long getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(Long id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.     public String getProvince() {  
  27.         return province;  
  28.     }  
  29.   
  30.     public void setProvince(String province) {  
  31.         this.province = province;  
  32.     }  
  33.   
  34.     public String getCity() {  
  35.         return city;  
  36.     }  
  37.   
  38.     public void setCity(String city) {  
  39.         this.city = city;  
  40.     }  
  41. }  

 

Java代码  收藏代码
  1. package com.wisely.ij.domain;  
  2.   
  3.   
  4. public class User {  
  5.     private Long id;  
  6.     private String firstName;  
  7.     private String lastName;  
  8.   
  9.     public User(Long id,String firstName, String lastName) {  
  10.         this.id = id ;  
  11.         this.firstName = firstName;  
  12.         this.lastName = lastName;  
  13.     }  
  14.   
  15.     public User() {  
  16.     }  
  17.   
  18.     public Long getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(Long id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.     public String getFirstName() {  
  27.         return firstName;  
  28.     }  
  29.   
  30.     public void setFirstName(String firstName) {  
  31.         this.firstName = firstName;  
  32.     }  
  33.   
  34.     public String getLastName() {  
  35.         return lastName;  
  36.     }  
  37.   
  38.     public void setLastName(String lastName) {  
  39.         this.lastName = lastName;  
  40.     }  
  41. }  

 

 使用演示

Java代码  收藏代码
  1. package com.wisely.ij.service;  
  2.   
  3. import com.wisely.ij.domain.Address;  
  4. import com.wisely.ij.domain.User;  
  5. import org.springframework.cache.annotation.Cacheable;  
  6. import org.springframework.stereotype.Service;  
  7.   
  8. /** 
  9.  * Created by wisely on 2015/5/25. 
  10.  */  
  11. @Service  
  12. public class DemoService {  
  13.     @Cacheable(value = "usercache",keyGenerator = "wiselyKeyGenerator")  
  14.     public User findUser(Long id,String firstName,String lastName){  
  15.         System.out.println("无缓存的时候调用这里");  
  16.         return new User(id,firstName,lastName);  
  17.     }  
  18.     @Cacheable(value = "addresscache",keyGenerator = "wiselyKeyGenerator")  
  19.     public Address findAddress(Long id,String province,String city){  
  20.         System.out.println("无缓存的时候调用这里");  
  21.         return new Address(id,province,city);  
  22.     }  
  23. }  

 

Java代码  收藏代码
  1. package com.wisely.ij.web;  
  2.   
  3. import com.wisely.ij.domain.Address;  
  4. import com.wisely.ij.domain.User;  
  5. import com.wisely.ij.service.DemoService;  
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.web.bind.annotation.RequestMapping;  
  9. import org.springframework.web.bind.annotation.ResponseBody;  
  10.   
  11. /** 
  12.  * Created by wisely on 2015/5/25. 
  13.  */  
  14.   
  15. @Controller  
  16. public class DemoController {  
  17.   
  18.     @Autowired  
  19.     DemoService demoService;  
  20.   
  21.     @RequestMapping("/test")  
  22.     @ResponseBody  
  23.     public String putCache(){  
  24.         demoService.findUser(1l,"wang","yunfei");  
  25.         demoService.findAddress(1l,"anhui","hefei");  
  26.         System.out.println("若下面没出现“无缓存的时候调用”字样且能打印出数据表示测试成功");  
  27.         return "ok";  
  28.     }  
  29.     @RequestMapping("/test2")  
  30.     @ResponseBody  
  31.     public String testCache(){  
  32.         User user = demoService.findUser(1l,"wang","yunfei");  
  33.         Address address =demoService.findAddress(1l,"anhui","hefei");  
  34.         System.out.println("我这里没执行查询");  
  35.         System.out.println("user:"+"/"+user.getFirstName()+"/"+user.getLastName());  
  36.         System.out.println("address:"+"/"+address.getProvince()+"/"+address.getCity());  
  37.         return "ok";  
  38.     }  
  39. }  

 

5 检验

 

先访问http://localhost:8080/test 保存缓存



 

再访问http://localhost:8080/test2 调用缓存里的数据

 



 

分享到:
评论

相关推荐

    Spring Boot整合Redis做集中式缓存

    在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存是个不错的选择,因此本文将介绍如何在Spring Boot的缓存支持中使用Redis进行数据缓存...

    详解Spring Boot使用redis实现数据缓存

    在本文中,我们将深入探讨如何在Spring Boot应用中利用Redis作为数据缓存系统。Spring Boot以其简化微服务开发的特性,结合Redis的高效缓存能力,可以为应用程序提供高效的性能优化。 首先,集成Spring Boot与Redis...

    35.[视频] Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】

    - **启用Redis缓存**:通过在配置类中启用`@EnableCaching`注解,Spring Boot将自动扫描并处理缓存注解。 2. **Redis缓存注解** - **@Cacheable**:此注解用在方法上,表示该方法的结果会被缓存。可以通过指定`...

    Spring Boot整合redis

    以上就是Spring Boot整合Redis的相关知识点,包括配置、数据操作、模板引擎Thymeleaf、数据源Druid、声明式事务管理和Redis事务的使用。通过这些知识,你可以构建一个具备数据缓存能力的Web应用。

    spring boot+redis单机与集群.zip

    总结来说,这个压缩包文件的内容将涵盖Spring Boot项目中集成Redis的基本步骤,包括设置单机和集群模式,以及如何在应用中使用Redis进行数据缓存。对于初学者,这将是一个很好的实践指南,而对于有经验的开发者,也...

    Spring Boot整合Redis的完整步骤

    本文将详细介绍Spring Boot整合Redis的完整步骤,包括Spring Boot对Redis的支持、添加依赖、配置RedisTemplate和StringRedisTemplate、使用Redis缓存等。 一、Spring Boot对Redis的支持 Spring Boot对Redis的支持...

    3.1、spring boot redis注解缓存Cacheable (value) 1

    在spring boot 项目中,使用redis缓存机制需要引入相关依赖关系。首先,在pom.xml文件中引入spring boot 父节点依赖关系: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-parent ...

    Spring boot 和 Redis集成例子.zip

    在现代的Web应用开发中,Spring Boot和Redis的结合使用非常常见,因为它们能提供高效、灵活的数据存储和快速响应。Spring Boot简化了基于Spring的应用程序的开发过程,而Redis则是一个高性能的键值数据库,适合处理...

    spring boot集成redis做为通用缓存的实战demo,帮助大家彻底掌握s-cache-practice.zip

    在本实战项目 "s-cache-practice" 中,我们将学习如何将 Redis 集成到 Spring Boot 应用中,以实现通用缓存功能。 首先,让我们了解集成的步骤: 1. **添加依赖**:在 `pom.xml` 文件中,我们需要引入 Spring Boot...

    (源码)基于Spring Boot和Redis的秒杀系统.zip

    本项目是一个基于Spring Boot框架和Redis缓存的秒杀系统。系统主要功能包括用户登录、商品展示、秒杀活动处理等。通过使用Redis和RabbitMQ,系统能够高效处理高并发的秒杀请求,确保系统的稳定性和性能。 ## 项目的...

    Spring boot 集成 redis (解决String类型乱码) 缓存用redis

    最后,启动Spring Boot应用,现在你的系统已经集成了Redis缓存,并解决了String类型的乱码问题。在实际应用中,还可以根据需求调整缓存策略,比如设置过期时间、缓存更新策略等。 总的来说,Spring Boot与Redis的集...

    spring boot - redis-1

    如果你使用的是Spring Boot 2.0及以上版本,还可以利用`ReactiveRedisTemplate`进行响应式编程,以实现非阻塞的数据操作。 6. **使用Redisson客户端** 除了Spring Data Redis提供的模板,还可以选择使用Redisson...

    Spring Boot中使用Redis做缓存的方法实例

    Spring Boot 中使用 Redis 做缓存的方法实例 在本文中,我们将详细介绍如何在 Spring Boot 中使用 Redis 做缓存。缓存是一种非常重要的技术,可以极大地提高应用程序的性能。Redis 是一个非常流行的 Nosql 数据库,...

    spring boot 集成redis代码

    在本文中,我们将深入探讨如何在Spring Boot应用中集成Redis,以便利用其高效的数据存储和检索功能。Redis是一个开源的、内存数据结构存储系统,它可以用作数据库、缓存和消息代理。Spring Boot是Spring框架的一个轻...

    Spring boot基于redis实现附近的人

    本项目是关于如何利用Spring Boot结合Redis这一高效内存数据存储系统来实现“附近的人”功能。这个功能通常应用于社交应用,让用户能够发现并连接到地理位置相近的其他用户。 首先,让我们深入了解Spring Boot。...

    Spring Boot 使用 Redis.docx

    }}在 Spring Boot 中,Redis 可以作为缓存系统和数据库的辅助工具。这里我们关注两个典型的应用场景: 1. **作为缓存**:Spring Boot 的 `@EnableCaching` 注解可以开启缓存支持,通过 `@Cacheable`、`@CacheEvict...

    Spring boot -redis

    6. 使用 Redis:在业务代码中,可以使用 Spring Data Redis 提供的方法存取数据,同时享受到过期事件的监听功能。 通过以上步骤,我们可以实现 Spring Boot 应用中对 Redis 的高效集成,并能够监听并处理 Redis 的...

    spring boot整合redis demo代码

    本示例将详细介绍如何在Spring Boot项目中整合Redis,实现数据的高效存储与访问。 一、集成Redis 1. 添加依赖 在Spring Boot项目的`pom.xml`文件中,我们需要引入Spring Data Redis和Spring Boot的Redis starter...

    (源码)基于Spring Boot和Redis的积分管理系统.zip

    使用Redis进行数据缓存,提高系统性能。 分布式锁机制,确保并发操作的数据一致性。 3. API接口 提供RESTful API接口,支持用户积分的更新、查询等操作。 支持gRPC协议,提供高性能的远程调用服务。 4. 后台...

    (源码)基于Spring Boot和Redis的铁路在线购票系统.zip

    2. Redis缓存使用Redis作为旁路缓存,实现与数据库的最终一致性,并通过Redis + Lua脚本防止车票超卖。 3. JWT用户验证使用JWT(JSON Web Token)进行用户登录验证,确保用户身份的合法性。 4. RocketMQ流量削峰通过...

Global site tag (gtag.js) - Google Analytics