创建spring-boot项目,创建的时候同时勾选web,如果不知道怎么创建springboot项目可以参考
SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程_方志朋的博客-CSDN博客。
1、pom引入,增加如下内容
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2、application.properties配置Redis
server.port=8080
# Redis_config
# Redis数据库索引(默认为0)
spring.redis.database=3
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接超时时间(毫秒)
spring.redis.timeout=3600
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# jedis超时
spring.redis.jedis.shutdown-timeout=100
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
3 操作类实例如下
@RestController
public class HelloController {
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("/")
public String index() {
// 获取hash操作类
HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
hashOperations.putIfAbsent("a","b","abvalue");
hashOperations.putIfAbsent("a","b1","ab1value");
System.out.println(hashOperations.get("a","b"));
System.out.println(hashOperations.get("a","b1"));
// 获取字符串操作类
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.setIfPresent("d","dvalue");
return "Greetings from Spring Boot!";
}
}
创建redisTemplate
@Configuration
public class RedisConfig {
@Bean
@Profile("local")
public RedissonClient redissonClient(RedisProperties redisProperties) {
Config config = new Config();
config.setTransportMode(TransportMode.NIO);
if (StringUtils.isEmpty(redisProperties.getPassword())) {
config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
.setDatabase(redisProperties.getDatabase());
} else {
config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
.setPassword(redisProperties.getPassword())
.setDatabase(redisProperties.getDatabase());
}
return Redisson.create(config);
}
@Bean
@Primary
public StringRedisTemplate redisTemplate(RedisProperties redisProperties) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
// template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return this.buildDbStringRedisTemplate(redisProperties, redisProperties.getDatabase());
}
/**
* 构造StringRedisTemplate
*
* @param redisProperties redis配置
* @param dbIndex db索引
* @return
*/
private StringRedisTemplate buildDbStringRedisTemplate(RedisProperties redisProperties, Integer dbIndex) {
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName(redisProperties.getHost());
configuration.setPort(redisProperties.getPort());
configuration.setPassword(RedisPassword.of(redisProperties.getPassword()));
LettucePoolingClientConfiguration clientConfiguration;
LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
if (Objects.nonNull(redisProperties.getTimeout())) {
builder.commandTimeout(redisProperties.getTimeout());
}
// 关闭延迟收集监控
builder.clientResources(DefaultClientResources.builder()
.commandLatencyCollector(DefaultCommandLatencyCollector.disabled())
.commandLatencyCollectorOptions(DefaultCommandLatencyCollectorOptions.disabled()).build());
// set pool config
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
RedisProperties.Pool pool = redisProperties.getLettuce().getPool();
poolConfig.setMaxIdle(pool.getMaxIdle());
poolConfig.setMinIdle(pool.getMinIdle());
poolConfig.setMaxTotal(pool.getMaxActive());
poolConfig.setMaxWaitMillis(500);
clientConfiguration = builder.poolConfig(poolConfig).build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration, clientConfiguration);
// 设置使用的redis数据库
factory.setDatabase(dbIndex);
// 重新初始化工厂
factory.afterPropertiesSet();
return new StringRedisTemplate(factory);
}
}
关于RedissonClient
RedissonClient是Redisson提供的Java Redis客户端,它封装了Redis的许多功能,提供了一系列的分布式Java对象和服务。RedissonClient可以用于连接Redis服务器,进行数据的读写操作,支持分布式锁、分布式集合、分布式队列、分布式Map等功能
springboot自动创建RedissonClient
项目中添加以下依赖:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.1</version>
</dependency>
然后在您的配置文件中添加以下Redis连接配置:
spring:
redis:
url: redis://localhost:6379
这样,Spring Boot会自动创建一个RedissonClient实例,并将其注入到您的应用程序中。
手动创建方式:
@Configuration
public class RedisConfig {
@Bean
@Profile("local")
public RedissonClient redissonClient(RedisProperties redisProperties) {
Config config = new Config();
config.setTransportMode(TransportMode.NIO);
if (StringUtils.isEmpty(redisProperties.getPassword())) {
config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
.setDatabase(redisProperties.getDatabase());
} else {
config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
.setPassword(redisProperties.getPassword())
.setDatabase(redisProperties.getDatabase());
}
return Redisson.create(config);
}
}