pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xhx.ms</groupId>
<artifactId>springboot-redis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-redis</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
server.port=8080
#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.94.130:3306/mytest
spring.datasource.username=xuhaixing
spring.datasource.password=xuhaixing
#redis
spring.redis.database=0
spring.redis.host=192.168.94.130
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.timeout=5000
#jpa
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
RedisCacheConfig.java
package com.xhx.ms.config;
import com.sun.org.apache.xml.internal.utils.StringBufferPool;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.lang.reflect.Method;
/**
* redis缓存配置
* Created by xuhaixing on 17-11-25.
*/
@Configuration
@EnableCaching//启用缓存
public class RedisCacheConfig extends CachingConfigurerSupport {
/**
* 自定义key,此方法会根据类名+方法名+所有参数的值生成一个
* 唯一的key,即@Cacheable中的key
*/
@Override
public KeyGenerator keyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(method.getName());
for(Object obj:objects){
sb.append(obj.toString());
}
System.out.println(sb);
return sb.toString();
}
};
}
/**
* redisTemplate缓存操作类
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置序列化方式
StringRedisSerializer redisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setHashKeySerializer(redisSerializer);
return redisTemplate;
}
/**
* 缓存管理器
*
*/
@Bean
public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate){
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
return redisCacheManager;
}
}
PersonRepository.java
package com.xhx.ms.repository;
import com.xhx.ms.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
/**
* Created by xuhaixing on 17-11-25.
*/
@Repository
public interface PersonRepository extends CrudRepository<Person,String> {
}
PersonService.java
package com.xhx.ms.service;
import com.xhx.ms.entity.Person;
import com.xhx.ms.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Created by xuhaixing on 17-11-25.
*/
@Service
public class PersonService {
@Resource
private PersonRepository personRepository;
@Autowired
private RedisTemplate<String,Object> redisTemplate;
public void test(){
ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
valueOperations.set("mykey1","random1="+Math.random());
System.out.println(valueOperations.get("mykey1"));
}
@Cacheable(value="person") // key为序列化生成的key 原理 缓存存储入参和出参
public Person findById(String id){
System.out.println("------findById-----id = "+id);
return personRepository.findOne(id);
}
// @CacheEvict(value="person",allEntries=true) //删除全部
@CacheEvict(value="person",key="'com.xhx.ms.service.PersonServicefindById'+#id") //删除指定
public void deleteFromCache(String id){
System.out.println("------deleteFromCache-----从缓存删除");
}
}
PersonController.java
package com.xhx.ms.controller;
import com.xhx.ms.entity.Person;
import com.xhx.ms.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by xuhaixing on 17-11-25.
*/
@RestController
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonService personService;
@RequestMapping("/test")
public String test(){
personService.test();
return "test Ok";
}
@RequestMapping("/findById")
public Person findById(String id){
return personService.findById(id);
}
@RequestMapping("/delete")
public String delete(String id){
personService.deleteFromCache(id);
return "delete ok";
}
}
Person.java
package com.xhx.ms.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* Created by xuhaixing on 17-11-25.
*/
@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
@Id
public String id;
public String name;
public Integer age;
public String sex;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
SprinbootRedisApplication.java
package com.xhx.ms;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootRedisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRedisApplication.class, args);
}
}
只有第一次查询时走了service的方法,查询相同的数据,后面没有进入方法,查询新数据时又会进入方法,删除缓存后也会又进入方法
springboot(二)整合redis
最新推荐文章于 2024-03-20 07:31:18 发布