创建项目
导入如下依赖
jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 edis pool 连接池!更像 BIO 模式
lettuce: 采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况! 可以减少线程数据了,更像 NIO 模式
源码分析
#springboot 所有配置类都有一个自动配置类 RedisAutoConfiguration
# 自动配置类都会绑定一个properties配置文件 RedisProperties
在这个自动配置类里面有一个RedisTemplate这一个模板。
类比jdbc和rabbitmq都会有JdbcTemplate和RabbitTemplate等模板。只要操作这些个模板就可以直接使用。
里面有一个注解 @ConditionalOnMissingBean(name = {"redisTemplate"})
如果不存在这个Bean时该类生效,所以可以自定义一个redisTemplate类顶替默认的。
//默认的redistemplate没有过多设置,但是redis对象都是需要序列化!
//两个泛型都是Object,后面使用需要强制转换。
@AutoConfiguration
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(name = {"redisTemplate"})
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean //string类型是最常使用的类型,因此单独提供了一个String的Template
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
}
配置属性类
redis可以配置的东西都在这个专属的配置类里面,开头是Spring.redis
使用.yml格式的配置文件有自动提示,比较好写。这里底层连接池用的是lettuce,也可以配置连接池的参数,用jredis时需要导入jredis的包并配置连接参数,格式和lettuce一样。
测试类中
opsFor有不同的方法可以操作不同的类型。
基本的事务操作和crud都可以用redisTemplate操作。
@SpringBootTest
class RedisSbApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//获取redis的连接对象
// RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
// connection.flushDb();
// connection.flushAll();
redisTemplate.opsForValue().set("mykey","yanghuiyu");
System.out.println(redisTemplate.opsForValue().get("mykey"));
}
}
可以看见因为没有在RedisTemplate设置序列化,key有问题
自定义RedisTemplate
修改序列化都在这里面相关部分。
Redis——redis的java客户端+(Jedis和SpringDataRedis)_北岭山脚鼠鼠的博客-CSDN博客
真实开发会封装RedsiUtil工具类,简化开发代码。