1,Maven依赖信息
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- jpa配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- postgresql数据库 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!-- redis配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2,配置文件
server:
port: 8888
spring:
datasource:
url: jdbc:postgresql://192.168.80.10:5432/bl?useSSL=false
username: postgres
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
redis:
host: localhost
port: 6379
3, 实体类
@MappedSuperclass
public abstract class ID implements Serializable {
private String id;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(unique = true, nullable = false, updatable = false, length = 32)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
@MappedSuperclass
public abstract class BaseEntity extends ID {
private Date createAt;
private Date updateAt;
@Temporal(TemporalType.TIMESTAMP)
@CreationTimestamp
@Column(updatable = false)
public Date getCreateAt() {
return createAt;
}
public void setCreateAt(Date createAt) {
this.createAt = createAt;
}
@Temporal(TemporalType.TIMESTAMP)
@UpdateTimestamp
public Date getUpdateAt() {
return updateAt;
}
public void setUpdateAt(Date updateAt) {
this.updateAt = updateAt;
}
}
@Entity
@Table(name = "t_employee")
public class Employee extends BaseEntity {
private String name;
private Double salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
4,service层
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
EmployeeDao employeeDao;
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
@Override
@Transactional
public Employee save(Employee employee) {
return employeeDao.save(employee);
}
@Override
public Employee findById(String id) {
String key = "user_" + id;
ValueOperations<Object, Object> operations = redisTemplate.opsForValue();
boolean hasKey = redisTemplate.hasKey(key);
if(hasKey){ // 如果Redis中存在则查Redis
long start = System.currentTimeMillis();
Employee employee = (Employee) operations.get(key);
long end = System.currentTimeMillis();
System.out.println("姓名:" + employee.getName());
System.out.println("查询redis花费的时间是:" + (end - start)+"ms");
return employee;
}else { // 如果Redis中不存在则查数据库,并写入Redis
long start = System.currentTimeMillis();
Optional<Employee> optional = employeeDao.findById(id);
if (optional.isPresent()) {
Employee employee = optional.get();
long end = System.currentTimeMillis();
System.out.println("姓名:" + employee.getName());
System.out.println("查询数据库花费的时间是:" + (end - start)+"ms");
// 写入缓存
// operations.set(key, employee, 5, TimeUnit.HOURS);
operations.set(key, employee, 5, TimeUnit.SECONDS);
return employee;
}
}
return null;
}
}
5,controller层
@Controller
public class EmployeeController {
@Autowired
EmployeeService employeeService;
@RequestMapping("save")
@ResponseBody
public Employee save(){
Employee employee = new Employee();
employee.setName("zhangsan");
employee.setSalary(120.0);
return employeeService.save(employee);
}
@RequestMapping("/findById/{id}")
@ResponseBody
public Employee find(@PathVariable("id") String id){
return employeeService.findById(id);
}
}
6,测试
首先运行save方法向数据库里插入一条记录:
然后测试查询方法:
查询效率有了很大的提升!