1、哪些数据适合放入缓存?
1、实时性,数据一致性要求不高的数据
2、访问量大且更新频率不高的数据(读多,写少)
2、本地缓存
本地缓存我们采用HashMap的方式
public Map<AttrRespVo> getLocalhost(int attrId){
//创建缓存对象
Map<AttrRespVo> cache = new HashMap<>();
//拿到缓存对象的数据
Map<AttrRespVo> catalogJson = cache.get("catalogJson");
//判断缓存中有没有这个数据
if(cache.get("catalogJson") == null){
//没有的话就往数据库查询
AttrRespVo respVo =attrService.getAttrInfo(attrId);
//将查询到的数据重新存到我们的缓存中
cache.put("catalogJson",respVo);
}
return respVo;
}
当然本地缓存只适合我们的单体架构,因为我们的缓存只存在这个服务器中,而我们的微服务架构则不适用我们的本地缓存,因为我们的模块分成了很多个,每个模块都用到了不同的服务器,而我们的本地缓存每个服务都有一个,这就会造成我们一个服务里面的数据改了,保存到我们的缓存中了,而另外一个服务则访问不到我们刚刚改了的数据,这会导致我们读到“脏数据”,数据不一致的情况,所有针对我们的微服务我们采用了redis来缓存,这样就避免了我们读取数据不一致的情况
3、redis缓存
整合redis
1)、引入data-redis-starter 依赖
2)、简单配置redis的host等信息
3)、使用SpringBoot自动配置好的StringRedisTemplate来操作redis
1、首先引入我们的redis依赖
<!-- 引入redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、在配置文件配置redis的host等信息
spring:
redis:
host: 192.168.192.132 //虚拟机redis地址
port: 6379 //redis端口号
3、测试
@Autowired
StringRedisTemplate stringRedisTemplate;
@Test
public void testStringRedisTemplate(){
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
//保存
ops.set("hello","world_"+ UUID.randomUUID().toString());
//查询
String s = ops.get("hello");
System.out.println("之前保存的是:"+s);
}
测试成功将我们的数据存入缓存中了,这就是redis的简单使用方式了