一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述springboot使用redis(从配置到实战)相关的知识,希望能为你提供帮助。
概述springboot通常整合redis,采用的是RedisTemplate的形式,除了这种形式以外,还有另外一种形式去整合,即采用spring支持的注解进行访问缓存.
准备工作【springboot使用redis(从配置到实战)】pom.xml
<
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)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# 连接池最大连接数(使用负值表示没有限制)
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
Redis配置类
package cn.chenlove.config;
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 org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@EnableCaching
public class RedisConfigextends CachingConfigurerSupport{
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
@Bean
public JedisPool redisPoolFactory() {
Logger.getLogger(getClass()).info("JedisPool注入成功!!");
Logger.getLogger(getClass()).info("redis地址:" + host + ":" + port);
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
return jedisPool;
}
}
可以看出,我们这里主要配置了两个东西,cacheManager方法配置了一个缓存名称,它的名字叫做thisredis,当我们要在方法注解里面使用到它的时候,就要根据名称进行区分不同缓存.同时设置了缓\\
存的过期时间.redisTemplate则是比较常见的,我们设置了RedisTemplate,因此在代码里面,我们也可以通过@Autowired注入RedisTemplate来操作redis.
使用
接下来就是如何使用注解啦,这一步反而是最简单的.其实只用到了两个注解,@Cacheable和@CacheEvict.第一个注解代表从缓存中查询指定的key,如果有,从缓存中取,不再执行方法.如果没有则执\\
行方法,并且将方法的返回值和指定的key关联起来,放入到缓存中.而@CacheEvict则是从缓存中清除指定的key对应的数据.使用的代码如下:
//有参数
@Cacheable(value="https://www.songbingjia.com/android/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,用户名:{},密码:{}",user.getUsername(),user.getPassword());
return user;
}@CacheEvict(value="https://www.songbingjia.com/android/thisredis",key="\'users_\'+#id",condition="#id!=1")
public void delUser(Integer id) {
// 删除user
System.out.println("user删除");
}//无参数
@RequestMapping("/get")
@Cacheable(value="https://www.songbingjia.com/android/thisredis")
@ResponseBody
public List<
User>
xx(){
return userMapper.selectAll();
}
@RequestMapping("/get3")
@CacheEvict(value="https://www.songbingjia.com/android/thisredis")
@ResponseBody
public String xx3(){
return "ok";
}
可以看出,我们用@Cacheable的value属性指定具体缓存,并通过key将其放入缓存中.这里key非常灵活,支持spring的el表达式,可以通过方法参数产生可变的key(见findUser方法),也可以通过其指定在\\
什么情况下,使用/不使用缓存(见delUser方法).
推荐阅读
- table布局的坏处_李孟_新浪博客
- 编程的三层境界——器术道_李孟_新浪博客
- Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-build-qhrdtysk/mysqlclient/(
- 如何在C#WinForms应用程序中的RichTextBox中仅允许纯文本
- 标题(你需要了解的有关大脑人机界面(BHI)的所有信息)
- 通过AI和机器学习进行信用卡欺诈检测
- 围绕临时内容策略建立营销团队
- 用Python构建一个简单的推荐系统
- 管理你的移动应用程序开发项目的最佳工具