Spring Boot使用redis做数据缓存
来源:互联网 发布:libreoffice数据库 编辑:程序博客网 时间:2024/05/29 07:36
1 添加redis支持
在pom.xml中添加
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-redis</artifactId>
- </dependency>
2 redis配置
- package com.wisely.ij.config;
- import java.lang.reflect.Method;
- import org.springframework.cache.CacheManager;
- import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; - import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
- import com.fasterxml.jackson.annotation.PropertyAccessor;
- import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; - @Configuration
- @EnableCaching
- public class RedisConfig extends CachingConfigurerSupport{
- @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 CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
- return new RedisCacheManager(redisTemplate);
- }
- @Bean
- public RedisTemplate<String, String> redisTemplate(
- RedisConnectionFactory factory) {
- StringRedisTemplate template = new StringRedisTemplate(factory);
- Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
- ObjectMapper om = new ObjectMapper();
- om.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
- om.enableDefaultTyping(DefaultTyping.NON_FINAL);
- jackson2JsonRedisSerializer.setObjectMapper(om);
- template.setValueSerializer(jackson2JsonRedisSerializer);
- template.afterPropertiesSet();
- return template;
- }
- }
3 redis服务器配置
- # REDIS (RedisProperties)
- spring.redis.database=0 # database name
- spring.redis.host=localhost # server host
- spring.redis.password= # server password
- spring.redis.port=6379 # connection port
- spring.redis.pool.max-idle=10 # pool settings ...
- spring.redis.pool.min-idle=0
- spring.redis.pool.max-active=10
- spring.redis.pool.max-wait=-1
4 应用
测试两个实体类
- package com.wisely.ij.domain;
- public class Address {
- private Long id;
- private String province;
- private String city;
- public Address(Long id,String province, String city) {
- this.id = id;
- this.province = province;
- this.city = city;
- }
- public Address() {
- }
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getProvince() {
- return province;
- }
- public void setProvince(String province) {
- this.province = province;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- }
- package com.wisely.ij.domain;
- public class User {
- private Long id;
- private String firstName;
- private String lastName;
- public User(Long id,String firstName, String lastName) {
- this.id = id ;
- this.firstName = firstName;
- this.lastName = lastName;
- }
- public User() {
- }
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getFirstName() {
- return firstName;
- }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- }
使用演示
- package com.wisely.ij.service;
- import com.wisely.ij.domain.Address;
- import com.wisely.ij.domain.User;
- import org.springframework.cache.annotation.Cacheable;
- import org.springframework.stereotype.Service;
- @Service
- public class DemoService {
- @Cacheable(value = "usercache", key = "#id + '_' + #firstName + '_' + #lastName")
- public User findUser(Long id,String firstName,String lastName){
- System.out.println("无缓存的时候调用这里。");
- return new User(id,firstName,lastName);
- }
- @Cacheable(value = "addresscache", key = "#id + '_' + #province + '_' + #city")
- public Address findAddress(Long id,String province,String city){
- System.out.println("无缓存的时候调用这里。");
- return new Address(id,province,city);
- }
- }
- package com.wisely.ij.web;
- import com.wisely.ij.domain.Address;
- import com.wisely.ij.domain.User;
- import com.wisely.ij.service.DemoService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- @RestController
- public class DemoEndpoint{
- @Autowired
- DemoService demoService;
- @RequestMapping(value = "/test", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
- public String putCache(){
- demoService.findUser(1L, "zhang", "san");
- demoService.findAddress(2L, "jx", "gz");
- System.out.println("if it not print '无缓存的时候调用。' ,it means the test is success.");
- return "OK";
- }
- @RequestMapping(value = "/test2", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
- public String testCache(){
- User user = demoService.findUser(1L, "zhang", "san");
- Address address =demoService.findAddress(2L, "jx", "gz");
- System.out.println("it not excute query");
- System.out.println("user:"+"/"+user.getFirstName()+"/"+user.getLastName());
- System.out.println("address:"+"/"+address.getProvince()+"/"+address.getCity());
- return "OK";
- }
- }
5 检验
先访问http://localhost:8080/test 保存缓存
再访问http://localhost:8080/test2 调用缓存里的数据
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做数据缓存
- 3. Spring Boot 1.2.5使用redis做数据缓存
- Spring Boot 1.2.5使用redis做数据缓存
- Spring Boot集成redis做数据缓存
- Spring Boot使用redis实现数据缓存
- Spring Boot Redis 数据缓存
- spring boot 使用redis做缓存学习记录
- Spring boot 使用 Redis 缓存
- spring+redis做数据缓存
- spring boot 整合redis对查询数据做缓存( 利用spring的AOP技术)
- spring boot 整合redis对查询数据做缓存( 利用spring的AOP技术)
- Leetcode Count of Range Sum
- 八进制小数转换为十进制小数
- 新人对刚学的xml解析做些总结
- android app 国际化
- 准备写博客的一些原因
- Spring Boot使用redis做数据缓存
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- 【Android】【控件】ScrollView嵌套ListView,GridView显示不完全的解决方案
- 关于HandlerThread的一点认识
- Scaledrawable
- 关于工作流后台流程并行程序的有用信息
- Java Thread(线程)案例详解sleep和wait的区别
- YARN 设计理念与基本架构
- Python 静态成员