SpringCloud整合Redis快取
阿新 • • 發佈:2019-01-10
今天介紹最簡單的Redis使用方法,注意細節和更多視訊教程請關注下方二維碼。
一、引入Maven
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ppl</groupId> <artifactId>ppl-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ppl-server</name> <!-- Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- Spring Boot Redis 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!-- Spring Cloud --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
二、application.yml中的配置
server: port: 8901 #應用的名字 spring: application: name: ppl-server #Redis配置 redis: database: 0 # Redis資料庫索引(預設為0) host: 127.0.0.1 #Redis伺服器地址 port: 6379 # Redis伺服器連線埠 password: # Redis伺服器連線密碼(預設為空) pool: max-active: 20 # 連線池最大連線數(使用負值表示沒有限制) max-idle: 10 # 連線池中的最大空閒連線 max-wait: 1000 # 連線池最大阻塞等待時間(使用負值表示沒有限制) min-idle: 5 # 連線池中的最小空閒連線 timeout: 0 # 連線超時時間(毫秒) eureka: client: serviceUrl: defaultZone: http://localhost:8888/eureka/
三、新增RedisConfig.java配置檔案
package com.ppl.config; import org.apache.log4j.Logger; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 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.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.annotation.JsonAutoDetect; import redis.clients.jedis.JedisPoolConfig; /** * Redis配置檔案類 * @author ljl * */ public class RedisConfig { private static Logger logger = Logger.getLogger(RedisConfig.class); @Bean @ConfigurationProperties(prefix="spring.redis.pool") public JedisPoolConfig getRedisConfig(){ JedisPoolConfig config = new JedisPoolConfig(); return config; } @Bean @ConfigurationProperties(prefix="spring.redis") public JedisConnectionFactory getConnectionFactory(){ JedisConnectionFactory factory = new JedisConnectionFactory(); JedisPoolConfig config = getRedisConfig(); factory.setPoolConfig(config); logger.info("JedisConnectionFactory bean init success."); return factory; } @Bean @Primary public RedisTemplate redisTemplate() { JedisConnectionFactory jedisConnectionFactory = getConnectionFactory(); StringRedisTemplate template = new StringRedisTemplate(jedisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
四、呼叫Redis
在其他要使用redis的類中,加入
@Autowiredprotected RedisTemplate redisTemplate;
使用示例:
package com.ppl.server.controller;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ComputeController {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
protected RedisTemplate redisTemplate;
@RequestMapping(value = "/add" ,method = RequestMethod.GET)
public Integer add(@RequestParam Integer a, @RequestParam Integer b) {
Integer r = a + b;
logger.info("/add, result:" + r);
return r;
}
@GetMapping("/hello")
public String sayHi(@RequestParam String name){
//從快取中獲取城市資訊
String key = name;
ValueOperations<String, String> operations = redisTemplate.opsForValue();
//快取存在
boolean hasKey = redisTemplate.hasKey(key);
if (hasKey) {
String userName = operations.get(key);
logger.info(" 從快取中獲取了姓名 >> " + userName);
return userName;
}
//快取不存在,將資料存入快取
operations.set(key, name, 10, TimeUnit.SECONDS);
logger.info("CityServiceImpl.findCityById() : 城市插入快取 >> " +name);
return " Welcome: "+name;
}
}
每天堅持學習一小時