SpringBoot中使用Redis
SpringBoot中使用Redis
1.在本地或者云端安装redis服务
2.项目中使用
2.1 引入依赖
<!-- redis start-->
<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>
<!--Jackson依赖 如果需要将redis存入时json格式化 必须引入 而且必须写配置文件 RedisConfig -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2.2 写配置信息
spring:
redis:
database: 3
host: localhost
port: 16379
password: Zz@.789++
2.3写配置文件
用于序列化键值,便于观看
redisTemplate是使用jdk默认编码格式来序列化的。
存的key value在redis数据库中实际上是乱码的。而StringTemplate不会。
@Configuration
public class RedisConfig {
/**
*
* @param connectionFactory
* @return org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>
* @author pyb
* @date 2023/12/21 15:41
* 初始化 redisTemplate 使存储的键值为 json 字符串
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
// 创建RedisTemplate对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置连接工厂
template.setConnectionFactory(connectionFactory);
// 创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
// 设置Key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// 设置Value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
// 返回
return template;
}
}
2.4 进行测试
这个 redisTemplate 不知道为什么只能用 @Resource 进行注入,使用
// @Autowired
// @Qualifier(value = "redisTemplate")注入失败
@Resource
private RedisTemplate<String,Student> redisTemplate;
@Test
void setObject(){
Student student = new Student(1, "张三", 183);
redisTemplate.opsForValue().set("user:stu",student,60,TimeUnit.SECONDS);
Student student1 = redisTemplate.opsForValue().get("user:stu");
System.out.println(student1);
}
@Test
void setList(){
ListOperations<String, Student> ops = redisTemplate.opsForList();
Student s1 = new Student(1, "张三", 18);
Student s2 = new Student(2, "张三2", 18);
Student s3 = new Student(3, "张三3", 18);
ops.rightPush("stu:List",s1);
ops.rightPushAll("stu:List",s2,s3);
List<Student> range = ops.range("stu:List", 0, -1);
System.out.println(range);
}
2.5 使用 StringRedisTemplate
这个自带序列化
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void set(){
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
ops.set("str:name1","ppp");
ops.set("str:name2","y");
ops.set("str:name3","b");
}