主要工具:
Oracle VM VirtualBox----虚拟机
Redis Desktop Manager----Redis可视工具
CentOS7----镜像
Docker----容器引擎
Redis----缓存数据库
1、创建SpringBoot2.0项目
2、开启虚拟机或者服务器,我这里用的是虚拟机,linux系统的CentOS7,用的是docker
3、使用Docker安装Redis,执行命令docker pull redis
等待下载,下载完成后就可以进行下一步。也可以用命令查看一下是否成功下载,命令:docker imags
4、运行Redis,执行命令:docker run -d -p 6379:6379 --name myredis redis
5、打开Redis Desktop Manager连接Redis
这样代表连接成功!
如果不知道虚拟机IP地址,可以输入命令:ip addr
可以打开数据库,看看redis结构是如何
6、引入maven包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.ibatis/ibatis-core -->
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-core</artifactId>
<version>3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/aspectj/aspectjweaver -->
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.5.4</version>
</dependency>
7、配置文件application.properties
#mysql数据库
spring.datasource.url=jdbc:mysql://47.105.34.159:3306/java_test
spring.datasource.username=java_test
spring.datasource.password=YdyFyKtdY3yKjDY4
#配置mybatis
mybatis.config-location=classpath:mybatis/SqlMapConfig.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
#日志
logging.path=E:/java/log
logging.level.com.kinglove = trace
#配置redis地址,这里没有设置密码
spring.redis.host=192.168.1.153
8、在入口文件写入@EnableCaching注解
@MapperScan({"com.kinglove.springbootlucky.mapper"})
@SpringBootApplication
@EnableCaching
public class SpringbootluckyApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootluckyApplication.class, args);
}
}
9、在service层写入@Cacheable注解
@Cacheable(cacheNames={"project"})
public Object select(Integer id){
return gavinProjectMapper.selectByPrimaryKey(id);
};
10、所有实体类都是序列化,实体类都要加上接口Serializable
public class GavinProject implements Serializable
/11、配置Redis成功!,运行看一下它有没有缓存进去
查询成功!看一下控制台打印信息
可以看到它查询了数据库,然后看一下数据有没有缓存进去redis
成功缓存起来!但是发现一个问题,数据并不是我们想要的样子。现在稍微做一下小事情,就可以解决!
12、序列化,写一个redis配置类
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
/**
* 缓存管理器
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//初始化一个RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
//设置CacheManager的值序列化方式为json序列化
RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair);
//设置默认超过期时间是30秒
defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
//初始化RedisCacheManager
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
}
13、重新部署项目,再此查询,序列化成功!