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;
    }
}
相关推荐
jeCA EURG13 小时前
一、安装Redis(win11环境下)
数据库·redis·缓存
后端漫漫13 小时前
Redis学习框架
数据库·redis·学习
小江的记录本15 小时前
【分布式】分布式核心组件——分布式锁:Redis/ZooKeeper/etcd 实现方案(附全方位对比表)、优缺点、Redlock、时钟回拨问题
java·网络·redis·分布式·后端·zookeeper·架构
_下雨天.1 天前
NoSQL之Redis配置与优化
数据库·redis·nosql
GISer_Jing1 天前
AI知识学习
人工智能·redis·学习
摇滚侠1 天前
短信验证码登录 Redis实战 黑马程序员
数据库·redis·缓存
梦无矶1 天前
快速设置uv默认源为国内镜像
数据库·redis·后端·python·uv
河阿里1 天前
Redis:命令行基础语法与实战
数据库·redis·bootstrap
hERS EOUS1 天前
Redis 下载与安装 教程 windows版
数据库·windows·redis
014-code1 天前
Redis Stream:消息队列的进阶之路
数据库·redis·缓存