第一步:创建一个spring boot项目
第二步:pom导入redis相关依赖
<!--reids依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--common-pool,用来配置redis连接池--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
第三步:配置application.yml文件
spring: redis: host: 127.0.0.1 #ip地址 port: 6379 #端口号 password: 123456 #如果没有密码,可以不写这一行 # 配置连接池信息 lettuce: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) max-idle: 8 # 连接池中的最大空闲连接 min-idle: 0 # 连接池中的最小空闲连接 max-wait: 100ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
第四步:测试
注意:测试前需要开启redis
@SpringBootTest
class RedisDemoApplicationTests {
//注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//写入 一条String数据
redisTemplate.opsForValue().set("name","张三");
//通过key值获取数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
}
输出结果:
张三
第五步:存在的问题
虽然在测试中控制台输出的是“张三”。
但我们从redis图形化工具中查看会发现我们存入的key和value不是我们想要存入的:
key(name):
value(张三):"퀅t\u0000\u0006张三"
这是因为RedisTemplate中默认的序列化工具JdkSerializationRedisSerializer,所以会出现以上问题
解决办法:
写一个redis的配置类:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
//创建RedisTemplate对象
RedisTemplate<String,Object> template=new RedisTemplate<>();
//设置连接工厂
template.setConnectionFactory(redisConnectionFactory);
//创建json序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer=new GenericJackson2JsonRedisSerializer();
//设置key的序列化为String
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
//设置value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
//返回
return template;
}
}
然后只需要将注入的RedisTemplate改成下面这样就行了:
@SpringBootTest
class RedisDemoApplicationTests {
//注入RedisTemplate
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Test
void contextLoads() {
//写入 一条String数据
redisTemplate.opsForValue().set("name","张三");
//通过key值获取数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
}
注意:有的需要导入Jackson依赖才可以
以上主要就是将我们要存的key和value的序列化工具改变了。