springboot使⽤redis(从配置到实战)
概述
springboot通常整合redis,采⽤的是RedisTemplate的形式,除了这种形式以外,还有另外⼀种形式去整合,即采⽤spring⽀持的注解进⾏访问缓存.
准备⼯作
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>RELEASE</version>
</dependency>
application.properties
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
# Redis服务器地址
# Redis服务器连接端⼝
# 连接池最⼤连接数(使⽤负值表⽰没有限制)
# 连接池最⼤阻塞等待时间(使⽤负值表⽰没有限制)
# 连接池中的最⼤空闲连接
# 连接池中的最⼩空闲连接
# 连接超时时间(毫秒)
Redis配置类
package fig;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import t.annotation.Bean;
import t.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@EnableCaching
public class RedisConfig  extends CachingConfigurerSupport{
@Value("${dis.host}")
private String host;
@Value("${dis.port}")
private int port;
@Value("${dis.timeout}")
private int timeout;
@Value("${dis.pool.max-idle}")
private int maxIdle;
@Value("${dis.pool.max-wait}")
private long maxWaitMillis;
@Bean
public JedisPool redisPoolFactory() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
return jedisPool;
}
spring out 是什么意思}
可以看出,我们这⾥主要配置了两个东西,cacheManager⽅法配置了⼀个缓存名称,它的名字叫做thisredis,当我们要在⽅法注解⾥⾯使⽤到它的时候,就要根据名称进⾏区分不同缓存.同时设置了缓
存的过期时间.redisTemplate则是⽐较常见的,我们设置了RedisTemplate,因此在代码⾥⾯,我们也可以通过@Autowired注⼊RedisTemplate 来操作redis.
使⽤
接下来就是如何使⽤注解啦,这⼀步反⽽是最简单的.其实只⽤到了两个注解,@Cacheable和@CacheEv
ict.第⼀个注解代表从缓存中查询指定的key,如果有,从缓存中取,不再执⾏⽅法.如果没有则执
⾏⽅法,并且将⽅法的返回值和指定的key关联起来,放⼊到缓存中.⽽@CacheEvict则是从缓存中清除指定的key对应的数据.使⽤的代码如下: //有参数
@Cacheable(value="thisredis", key="'users_'+#id")
public User findUser(Integer id) {
User user = new User();
user.setUsername("hlhdidi");
user.setPassword("123");
user.setUid(id.longValue());
System.out.println("log4j2坏啦?");
logger.info("输⼊user,⽤户名:{},密码:{}",Username(),Password());
return user;
}
@CacheEvict(value="thisredis",  key="'users_'+#id",condition="#id!=1")
public void delUser(Integer id) {
// 删除user
System.out.println("user删除");
}
//⽆参数
@RequestMapping("/get")
@Cacheable(value="thisredis")
@ResponseBody
public List<User> xx(){
return userMapper.selectAll();
}
@RequestMapping("/get3")
@CacheEvict(value="thisredis")
@ResponseBody
public String xx3(){
return "ok";
}
可以看出,我们⽤@Cacheable的value属性指定具体缓存,并通过key将其放⼊缓存中.这⾥key⾮常灵活,⽀持spring的el表达式,可以通过⽅法参数产⽣可变的key(见findUser⽅法),也可以通过其指定在
什么情况下,使⽤/不使⽤缓存(见delUser⽅法).

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。