Redis缓存设计与性能优化

多级缓存架构

缓存设计

缓存穿透

  • 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。
  • 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。

造成缓存穿透的基本原因有两个

  • 自身业务代码或者数据出现问题。
  • 一些恶意攻击、 爬虫等造成大量空命中。

缓存穿透问题解决方案

1、缓存空对象

java 复制代码
String get(String key) {
    // 从缓存中获取数据
    String cacheValue = cache.get(key);
    // 缓存为空
    if (StringUtils.isBlank(cacheValue)) {
        // 从存储中获取
        String storageValue = storage.get(key);
        cache.set(key, storageValue);
        // 如果存储数据为空, 需要设置一个过期时间(300秒)
        if (storageValue == null) {
            cache.expire(key, 60 * 5);
        }
        return storageValue;
    } else {
        // 缓存非空
        return cacheValue;
    }
}
相关推荐
曲幽7 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
jran-12 小时前
Redis 命令
数据库·redis·缓存
June`13 小时前
多线程redis下如何解决aof重写和rdb持久化的数据一致性问题
数据库·redis·缓存
Trouvaille ~15 小时前
【Redis篇】初识 Redis:特性、应用场景与版本演进
数据结构·数据库·redis·分布式·缓存·中间件·持久化
weixin_4536395917 小时前
Docker Redis 本地能 Ping 通但 6379 端口连不上?排查记录与解决
linux·redis
洛水水17 小时前
Redis 实现限流功能的几种方法
数据库·redis·缓存
米高梅狮子17 小时前
Redis
数据库·redis·mysql·缓存·docker·容器·github
无小道19 小时前
Redis——哈希类型相关指令
redis·算法·哈希算法
Omics Pro20 小时前
前沿学科:量子生物学!
大数据·数据库·人工智能·windows·redis·量子计算
无小道20 小时前
Redis——list相关指令
数据库·redis·缓存