电商项目高级篇06-缓存

电商项目高级篇06-缓存

缓存

流程图:

复制代码
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);
    }
相关推荐
wdfk_prog3 小时前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
952369 小时前
Redis - 应用
数据库·redis·分布式·缓存
渣渣灰飞11 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第六章:Redis 实现登录 Token
学习·mysql·缓存
渣渣灰飞11 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第五章:缓存穿透、缓存击穿、缓存雪崩
学习·mysql·缓存
cxr82814 小时前
大语言模型上下文缓存命中率测试全场景清单
人工智能·python·算法·缓存·语言模型·自然语言处理·llm
Database_Cool_17 小时前
LLM 语义缓存实战:阿里云 Tair 降低大模型重复调用成本 50%+
数据库·spring·阿里云·缓存
执笔论英雄17 小时前
【大模型推理】redis kv cache
数据库·redis·缓存
渣渣灰飞17 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第八章:Redis 高级应用
学习·mysql·缓存
渣渣灰飞18 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第十章:Redis 综合企业项目实战
学习·mysql·缓存
Alluxio18 小时前
重卡自动驾驶数据引擎升级,智加科技凭借Alluxio实现训练吞吐10倍跃迁
分布式·科技·机器学习·缓存·ai·自动驾驶·汽车