最近做的一个项目,融合了Spring Boot,Mybatis Plus , Shiro ,Redis,fastdfs ,数据库使用的是mysql,以druid作为连接池,这里只谈谈项目中redis缓存的基本使用方法。
redis的引入:
<properties>
<java.version>1.8</java.version>
<shiro.version>1.4.2</shiro.version>
</properties>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>3.2.3</version>
</dependency>
application.yml配置redis的参数
RedisConfig配置类:(实际上并没有使用这个配置类,项目运行前我注释掉了)
/** * 设置redis的序列化规则 */
@Configurationpublic class RedisConfig {
@Beanpublic RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));if (redisProperties.getTimeToLive() != null) {
config = config.entryTtl(redisProperties.getTimeToLive());
}if (redisProperties.getKeyPrefix() != null) {
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
}if (!redisProperties.isCacheNullValues()) {
config = config.disableCachingNullValues();
}if (!redisProperties.isUseKeyPrefix()) {
config = config.disableKeyPrefix();
}return config;
}
}
启动类上注解 , 表示允许使用缓存(这个注解一定要加哟)
我习惯在service层加添加或删除redis缓存
cacheNames的值作为redis中key的前缀,key的值的数据来源若未加标注说明,则默认是从方法的参数中获取,key=“#result.id”表示的是获取返回值中的id
@cacheput 注解用于添加和修改,即往redis中放入数据(若在redis中已经存在同样的key,则会将这个有相同的key数据覆盖,这是redis的特性)
@cacheEvict注解用于删除,即删除redis中的某条数据,根据key删除
@cacheable注解一般用于查询,如果缓存中存在,直接从缓存中取,不查数据库。如果缓存中没有,从数据库查询并存入缓存,并设置超时时间。