转载请注明出处:https://oldnoop.tech/c/178.html
引入依赖
配置缓存
修改application.properties
#配置redis
spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
增加缓存配置类
说明:这个配置是为了使用spring提供的缓存框架
启动类加注解@EnableCaching
使用缓存
spring的缓存框架存储redis数据的特点
使用zset存储一个缓存的所有对象的key,这个zset的key是 "缓存名称~keys"
比如,如下缓存注解的名称是memberCache,在redis中使用zset,key是memberCache~keys
@Cacheable(value="memberCache",key="'account_'+#account")
public Member findByAccountCache(String account){
return accountMapper.findUserByAccount(account);
}
然后对每个key,存储一个字符串的值,是将实体类对象序列化后存储到redis的字符串
存储用string,key为account_zhangsan, 值为序列化的字符串
代码示例
//根据账号查询缓存
//使用账号作为缓存的key,返回值类型Member作为缓存的value
@Cacheable(value="memberCache",key="'account_'+#account")
public Member findByAccountCache(String account){
return accountMapper.findUserByAccount(account);
}
//根据账号查询缓存
//使用账号作为缓存的key,返回值类型Member作为缓存的value
@Cacheable(value="memberCache",key="'account_'+#account")
public Member findByAccountCache(String account){
return accountMapper.findUserByAccount(account);
}
//更新数据库的时候
//直接清除缓存,下次会重新从数据库取
//dbMember是旧数据,username,email,phone都可以作为账号,
//member是新数据
@Caching(
evict = { @CacheEvict(value="memberCache",
key = "'id_'+#member.id", beforeInvocation = true),
@CacheEvict(value="memberCache",
key = "'account_'+#oldMember.username", beforeInvocation = true),
@CacheEvict(value="memberCache",
key = "'account_'+#oldMember.email", beforeInvocation = true),
@CacheEvict(value="memberCache",
key = "'account_'+#oldMember.phone", beforeInvocation = true)
})
public void updateMemberCache(Member oldMember, Member member){
memberMapper.updateByPrimaryKeySelective(member);
}
//根据id查询缓存
//使用id作为缓存的key,返回值类型Member作为缓存的value
@Cacheable(value="memberCache",key="'id_'+#id")
public Member getByIdCache(Long id){
Member DBmember = memberMapper.selectByPrimaryKey(id);
return DBmember;
}