SpringBoot 整合Redis可以使用两种方式
1.注入RedisTemplate
2.使用注解
两种方式可以同时使用
本次整合环境:
<!-- JDK:1.8 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
步骤:
1. 创建SpringBoot项目,版本如上,先项目保证可以正常访问, 然后 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
2. 在application.properties中添加如下Redis配置
# Redis数据库索引(默认为0, 默认有16个数据库)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=xxx.xxx.xxx.xxx
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=your password
# 连接池最大连接数(使用负值表示没有限制)
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
3. 在项目入口添加@EnableCaching标签
4. 使用redis的两种方式:
@Controller
public class RedisController {
@Autowired
RedisTemplate redisTemplate;
@Autowired
UserService userService;
//使用RedisTemplate方式
@RequestMapping("/hello")
@ResponseBody
public String hello(){
System.out.println("step into hello");
ValueOperations<String,String> valueOperations = redisTemplate.opsForValue();
valueOperations.set("name", "sky");//设值
String name = valueOperations.get("name");//取值
return name;
}
//注解方式
@RequestMapping("/user")
@ResponseBody
public String getUser(Long id){
System.out.println("step into getUser");
return userService.getUser(id);
}
}
/**
* 创建一个Service 模拟从数据库取值
*/
@Service
public class UserService {
@Cacheable("user")//这个是存入Redis是key的前缀
public String getUser(Long id){
System.out.println("没有使用缓存.....");
return "sky"+id;
}
}
5. 启动项目
访问localhost:80/hello, 如果返回sky,则说明从Redis设值取值都正常
访问localhost:80/getUser?id=1
第一次应该打印没有使用到缓存
第二次访问不会打印出"没有使用缓存" , 说明用到了缓存
使用RedisDesktopManager 查看数据库中确实有user::1这个key值,证明使用的确实是Redis的缓存
附加:单独使用Jedis访问Redis
- 添加依赖
<dependency>-->
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
- 测试代码
@Test
public void contextLoads() {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
JedisPool jedisPool = new JedisPool(poolConfig,"192.168.217.128",6379,10,"admin");
Jedis jedis = jedisPool.getResource();
jedis.set("name","sky");
String name = jedis.get("name");
System.out.println(name);
}