文章目录
Redis介绍
Redis是一个开源的高性能的NOSQl数据库,其存储方式为Key-value
的方式。
redis与其他key-value
缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,从起点额时候可以再次加载进行使用。
- Redis不仅仅支持简单的Key-value类型的数据,同时还提供list,set,zset,hash等数据结构存储。
- Redis支持数据的备份,即master-slave模式的备份。
在SpringBoot工程中使用Redis
Spring boot对Jedis的支持,在1.x版本的时候,SpringBoot底层还是使用Jedis来连接Redis的,但是在2.x版本后,就换成了Lettuce。两者的区别如下:Jedis:采用的直连,多线程操作的话,是不安全的。使用Jedis Pool连接池!更像BIO模式(同步阻塞)!Lettuce:采用netty,实例可以在福哦个线程中进行共享,不存在线程不安全的情况!可以减少数线程数据,更像NIO模式(同步非阻塞)!
下面是在SpringBoot中使用Redis的步骤
1、引入依赖
<!--集成redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
<!--序列化-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
<scope>compile</scope>
</dependency>
<!--lombok,自动生成set、get等方法-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>compile</scope>
</dependency>
2、配置application.yaml配置文件
server:
port: 8081
spring:
redis:
host: localhost
port: 6379
3、测试
在Springboot中编写测试类来进行简单的测试。
package com.zhao.redistest;
import com.zhao.redistest.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class RedisTestApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("zhao", "Hello Redis");
String zhao = (String) redisTemplate.opsForValue().get("zhao");
System.out.println(zhao);
}
}
执行结果:
Hello Redis
RedisTemplate常用方法
// redisTemplate #操作不同的数据类型,api和我们的指令是一样的
// opsForValue #操作字符串 类似String
// opsForList #操作List 类似List
// opsForSet #操作set
// opsForHash #操作hash
// opsForZSet #操作zset
// opsForGeo #操作geo
// opsForHyperLogLog #操作HyperLogLog
// 除了进本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务,和基本的 CRUD
// 获取redis的连接对象
// RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
// connection.flushDb();
// connection.flushAll();
对象的存取测试
1、新建一个User类
package com.zhao.redistest.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@Builder
@NoArgsConstructor
public class User {
private String name;
private String password;
private Integer age;
}
解释:
@Data注解为LomBok注解用于生成get/set方法
@AllArgsConstructor用于生成有参构造
@NoArgsConstructor生成无参构造
@Builder注解可以在创建user对象时进行链式编程,创建对象。
编写测试代码:
package com.zhao.redistest;
import com.zhao.redistest.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class RedisTestApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
void testObject() {
User user = new User().builder()
.age(12)
.name("zhao")
.password("123456")
.build();
redisTemplate.opsForValue().set("user",user);
User user1 = (User) redisTemplate.opsForValue().get("user");
System.out.println(user1);
}
}
测试结果:
这里提示:序列化异常。报这个错误我们可以通过在创建实体类的时候实现Serializable
接口避免。
package com.zhao.redistest.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@Builder
@NoArgsConstructor
public class User implements Serializable {
private String name;