一般都是在凌晨写东西 比较乱 算是个记录 简单粗暴
环境数据配置搭建
依赖缓存
org.springframework.boot
spring-boot-starter-redis
RELEASE
org.springframework.boot
spring-boot-starter-cache
现在yml文件里面配置redis 方便缓存
spring:
datasource:
redis:
database: 0
host: 127.0.0.1
port: 6379
password: 123456
pool.max-idle: 8
pool.min-idle: 0
pool.max-active: 8
pool.max-wait: 1
timeout: 5000
数据操作框架先拿jpa来写demo
jpa:
database: mysql
show-sql: true
hibernate:
ddl-auto: update
##### jpa默认方式
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
数据库配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/house?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
1.springCache 注解申明式缓存
1.1 开启注解
//在启动类上申明 缓存注解启动
@EnableCaching
//判断当前方法缓存中是否有数据 没有则添加进缓存中
@Cacheable
@Cacheable(value = "house",key = "#house.id")
@Override
public House findOneHouse(House house) {
House one = iHouseDao.findOne(house.getId());
return one;
}
//将数据添加进缓存中去
@CachePut
@CachePut(value = "house",key = "#house.id")
@Override
public House saveHouse(House house) {
House save = iHouseDao.save(house);
return save;
}
//删除缓存
@CacheEvict
@CacheEvict(value = "house")
@Override
public void deltedHouse(House house) {
iHouseDao.delete(house);
}
//这个注解就是为了使用多个@CachePut, @CacheEvict或者是多个@Cacheable在同一个方法上,因为多个缓存中的条件表达式可能是不一样的.例子
@Cacheing(evict={@CacheEvict("primary"), @Cacheable(value = "house",key = "#house.id")})
模拟请求一个接口 提前写好的
image.png
第一次请求
image.png
有sql查询
第二次
image.png
image.png
缓存成功
打开redis 发现redis中保存了一条数据
image.png
其他几个就先不弄了 打瞌睡了
注解的方式虽然方便 但是不能指定缓存过期时间
2018年9月27日00:03:11 继续
Ehcache
使用时 添加jar包
net.sf.ehcache
ehcache
application.yml中指定cache Type
#缓存配置 type如果切换成redis 将自动向redis 设置key值 则不需要config
cache:
type: ehcache
jcache:
config: ehcache.xml
加入Ehcache文件
序列化
/**
* redis序列化配置
* @param connectionFactory jedis连接工厂
* @return
*/
@Bean
public RedisTemplate redisTemplate(JedisConnectionFactory connectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(connectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(redisTemplate.getKeySerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
image.png
完事