分布式缓存( 一 )基础

哪些数据适合放入缓存?
即时性,数据一致性要求不高
访问量大且更新频率不高的数据(读多写少)
本地缓存,就是将缓存放到一个Map集合里面
Map存在于内存中,速度很快
但是明显不适合分布式的多个项目, 无法保证数据的一致性
分布式缓存需要将缓存提取出来,分布式多个项目之间共用,使用redis缓存中间件
使用 整合redis的相关知识
1.pom中引入redis
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置redis
spring:
  redis:
    host: 192.168.56.10
    port: 6379
3.使用springboot自动配置好的StringRedisTemplate来操作redis
@Test
public void testStringRedisTemplate(){
    ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
    //保存
    ops.set("hello","world"+ UUID.randomUUID().toString());
    //获取
    String s = ops.get("hello");
    log.info(s);  //结果是:worlde6d1cbc1-9fe8-4a24-9264-234b88c566e5
}
4.代码中的实际应用
public Map<String, List<Catelog2Vo>> getCatelogJson(){
    //1.先从缓存读取数据    -- StringRedisTemplate  存的是<String,String>类型
    String catelogJson = redisTemplate.opsForValue().get("catelogJson");
    if (StringUtils.isEmpty(catelogJson)){
        //2.缓存中没有数据,去查数据库
        Map<String, List<Catelog2Vo>> catelogJsonFromDb = getCatelogJsonFromDb();
        //3.将查到的数据放入缓存,将对象转为json放到缓存中
        String s = JSON.toJSONString(catelogJsonFromDb);
        redisTemplate.opsForValue().set("catelogJson",s);
    }
    //4.如果缓存中有数据,此时存的数据是json,将json转为我们想要的对象
    Map<String, List<Catelog2Vo>> result
            = JSON.parseObject(catelogJson, new TypeReference<Map<String, List<Catelog2Vo>>>() {
    });
    return result;
}

//从数据库查询并封装分类数据
public Map<String, List<Catelog2Vo>> getCatelogJsonFromDb() {
   ...省略
}

5.报错以及解决

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

即先排除lettuce,再引入jedis

在项目中可以直接使用redisTemplate,那么redisTemplate和lettuce和jedis是什么关系呢?

lettuce,jedis是操作redis的底层客户端,Spring对他俩进行了再次封装,封装成了redisTemplate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值