当前位置: 首页 > article >正文

电商项目高级篇06-缓存

电商项目高级篇06-缓存

  • 1、docker下启动redis
  • 2、项目整合redis
  • 3、redis改造三级分类业务

缓存

流程图:
在这里插入图片描述

data = cache.load(id);//从缓存加载数据
If(data == null){
data = db.load(id);//从数据库加载数据
cache.put(id,data);//保存到 cache 中
}
return data;

在我们的单体项目中可以用Map作为本地缓存,速度还很快。但是分布式项目。由于有多个服务。每次负载均衡到服务时,可能都不命中本地缓存,本地缓存不会在多个服务间生效。所以应该集成分布式缓存:比如redis

1、docker下启动redis

docker下载redis镜像

docker pull redis

创建镜像挂载
在这里插入图片描述

在redis文件夹下网络下载redis.conf文件

wget http://download.redis.io/redis-stable/redis.conf

去编辑redis.conf文件
在这里插入图片描述
注释后代表任意ip访问

在这里插入图片描述
设置redis密码

appendonly yes:redis持久化

##最后挂载永久启动redis

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /mydata/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes  --requirepass 123456

然后我们用rdm工具连上redis
在这里插入图片描述

2、项目整合redis

1、pom.xml引入依赖

 <!--整合redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、application.yml配置redis配置信息
在这里插入图片描述
3、使用RedisTemplate操作redis

	@Autowired
    StringRedisTemplate stringRedisTemplate;
	@Test
    public void testRedis(){
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        ops.set("hello","world_"+ UUID.randomUUID().toString());
        String hello = ops.get("hello");
        System.out.println(hello);
    }

在这里插入图片描述
测试用例执行成功,控制台输出redis的值。

检查redis里是否有这个值

在这里插入图片描述
集成redis是成功的

3、redis改造三级分类业务

CategoryServiceImpl

	 @Autowired
    private StringRedisTemplate redisTemplate;


 	@Override
    public Map<String, List<Catelog2Vo>> getCatalog() {
        // 1、获取缓存中的数据
        String catalog = redisTemplate.opsForValue().get("catalog");
        if (StrUtil.isBlank(catalog)) {
            // 2、从数据库中获取数据
            Map<String, List<Catelog2Vo>> catalogDb = this.getCatalogDb();
            // 3、缓存数据
            redisTemplate.opsForValue().set("catalog", JSON.toJSONString(catalogDb));
            return catalogDb;
        }
       // 将缓存中的数据返回
        return JSON.parseObject(catalog,Map.class);
    }

在这里插入图片描述


http://www.kler.cn/a/419265.html

相关文章:

  • Ubuntu操作
  • 深度学习中的生成对抗网络(GAN)原理与应用
  • model.zero_grad() 和 self.optimizer.zero_grad() 区别
  • 网络安全相关证书资料
  • AI开发-数据可视化库-Seaborn
  • 【真正离线安装】Adobe Flash Player 32.0.0.156 插件离线安装包下载(无需联网安装)
  • 前端将echarts的图和element表格 一起导出到excel中
  • el-tree的使用及控制全选、反选、获取选中
  • 韩顺平 一周学会Linux | Linux 实操篇-组管理和权限管理
  • 根据后台数据结构,构建搜索目录树
  • openssl 基本命令使用方法
  • Oracle之提高PLSQL的执行性能
  • 三十二:网络爬虫的工作原理与应对方式
  • ASP网络安全讲述
  • 易速鲜花聊天客服机器人的开发(上)
  • 一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单
  • Ubuntu 22.04 LTS vs Ubuntu 24.04 LTS:深度剖析,哪个版本更胜一筹?
  • ORB-SLAM2源码学习:LocalMapping.cc: LocalMapping::MapPointCulling剔除不合格的地图点
  • 使用 Docker 容器创建一个 Web 服务器:从入门到实践
  • 怎么选拔人才
  • MySQL--SQL优化
  • 私有库gitea安装
  • DRM(数字权限管理技术)防截屏录屏----ffmpeg安装
  • 图片预处理技术介绍4——降噪
  • VM+Ubuntu18.04+XSHELL+VSCode环境配置
  • 探索Scala:文本分析与文件操作的艺术