首页 > 数据库 >redis雪崩解决方案

redis雪崩解决方案

时间:2024-09-25 14:18:54浏览次数:3  
标签:String int 解决方案 redis expire 雪崩 key public name

Redis雪崩通常发生在以下情况下:

  • 大规模的缓存数据在相同的时间段内过期或失效。
  • 系统中存在缓存的热点数据,这些数据的访问频率很高,但过期后没有被及时刷新。
  • 缓存层没有采取合适的容错措施,如设置缓存的过期时间随机化。

为了防止Redis雪崩问题,可以采取措施:合理设置缓存的过期时间
java代码:

        枚举:

public enum  CacheKeyEnum {

    PRODUCT_DETAIL("product_detail","商品详情",60 * 60 * 24); // 一天的过期时间

     CacheKeyEnum(String key,String name,int expire){
        this.key = key;
        this.name = name;
        this.expire = expire;
    }


    private String key;     // key
    private String name;    // key 描述
    private int expire; //  过期时间单位秒


    public int getExpire() {
        return expire;
    }

    public void setExpire(int expire) {
        this.expire = expire;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

这边我们可以去写一个工具类:

/**
 * 所有的缓存 key 都写这里
 */
public final class CacheKeysUtils {    
    public static CacheKey getProductDetail(Long id){
        // 随机缓存时间,防止缓存雪崩
        return neW CacheKey(CacheKeyEnum.PRODUCT_DETAIL.getKey()+":"+id,CacheKeyEnum.PRODUCT_DETAIL.getExpire() + RandomUtils.nextInt(0, 10) * 60);
    }

    public static class CacheKey{
        private CacheKey(String key,int expire){
            this.key = key;
            this.expire = expire;
        }
        private final String key;
        private final int expire;
        public String getKey() {
            return key;
        }
        public int getExpire() {
            return expire;
        }
    }
}

代码讲解:

   CacheKeyEnum.PRODUCT_DETAIL.getKey():这边是我们枚举里面自定义的key

        id:可以传业务ID来作redis的key,例如:订单ID(在我们业务中是唯一的)

        CacheKeyEnum.PRODUCT_DETAIL.getExpire():这边是我们枚举里面自定义的expire设置的过期时间为一天

        RandomUtils.nextInt(0, 10) * 60):这边是生成一个随机时间,作用就是为了防止同一时间大量key的过期去访问数据库

业务层代码:

// 缓存到redis
CacheKeysUtils.CacheKey key = CacheKeysUtils.getProductDetail(id);

// 获取key
String key1 = key.getKey();
// 获取存入的时间
int expire = key.getExpire();

这样的话就成功的防止了redis雪崩的问题

        

标签:String,int,解决方案,redis,expire,雪崩,key,public,name
From: https://blog.csdn.net/shixiaoyanma/article/details/142522047

相关文章

  • Redisearch 入门指南构建高性能搜索应用
    1.概述Redisearch是一个强大的全文搜索引擎,基于流行的Redis数据库构建,专为高效的数据检索而设计。它结合了Redis的快速存储能力和搜索引擎的复杂查询功能,使得开发者能够在海量数据中实现实时搜索体验。Redisearch支持丰富的特性,包括模糊匹配、布尔搜索、聚合、地理......
  • GBASE南大通用携手英特尔发布面向大模型未来的向量数据库解决方案
    “大模型技术的创新与应用扩展了向量数据库的应用场景,也凸显了向量数据库部署的必要性。通过携手英特尔,我们为用户提供了软硬件协同优化的向量数据库方案,能够帮助用户有效应对海量向量数据处理带来的性能压力,为大模型时代构建高性能的数据库基础设施。”—关连坡南大通用GBase8a......
  • 防溺水智能预警系统解决方案 YOLOv8
    防溺水智能预警系统解决方案的关键特点如下:防溺水智能预警系统解决方案通过将前端摄像头等设备统一安装并集中接入系统,防溺水智能预警系统解决方案实现对危险水域的全方位监测。这些设备将覆盖所有可能发生溺水事故的区域,并通过网络连接到监控平台,实现信息的实时收集与传输。防溺水......
  • WebRTC关键技术及应用场景:EasyCVR高效低延迟视频监控解决方案
    众所周知,WebRTC是一项开源的实时通信技术,它通过集成音频、视频和数据传输到Web浏览器中,使得实时通信变得简单且无需任何插件或第三方软件。WebRTC不仅是一个API,也是一系列关键技术和协议的集合,它的出现改变了传统通信方式,因此,目前WebRTC已经成为实时通信领域的重要标准,并且广泛应......
  • Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式
            Redis作为一个高性能的key-value数据库,广泛应用于缓存、消息队列、排行榜等场景。然而,Redis是基于内存的数据库,这意味着一旦服务器宕机,内存中的数据就会丢失。为了解决这个问题,Redis提供了数据持久化的机制,包括RDB和AOF两种方式。此外,为了提高数据的可用性和可......
  • redis
    Redis1几乎覆盖了Memcached的绝大部分功能2数据都在内存中,支持持久化,主要用作备份恢复3除了支持简单的key-value模式,还支持多种数据结构的存储,比如list、set、hash、zset等。4一般是作为缓存数据库辅助持久化的数据库MongoDB1高性能、开源、模式自由(schemafree)的......
  • redis-配置文件解读
    Redis配置文件解读第一节网络配置相关bind绑定连接IP默认情况bind=127.0.0.1只能接受本机的访问请求,不写的情况下,无限制接受任何ip地址的访问,生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉.如果开启了protected-mode,那么在没有设定bindip......
  • macOS 15 Blank OVF - macOS Sequoia 虚拟化解决方案
    macOS15BlankOVF-macOSSequoia虚拟化解决方案适用于VMwareESXi和VMwareWorkstation的macOSSequoia虚拟化模板请访问原文链接:https://sysin.org/blog/macos-15-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgiPhone镜像、Safari浏览器重大更新......
  • 国际出口优化加速解决方案
    随着数字化时代的到来,互联网已经成为我们生活和工作中不可或缺的一部分。无论是个人用户还是企业,都渴望拥有快速、稳定的网络连接。然而,面对国内外复杂的网络环境,许多用户经常遭遇访问速度慢、连接不稳定等问题。为了解决这些痛点,为此我们推出了一套专业的国际出口优化加速解决......
  • 页面在移动设备上显示不正常的原因及解决方案
    聚沙成塔·每天进步一点点本文回顾⭐专栏简介页面在移动设备上显示不正常的原因及解决方案1.缺少`viewport`元标签1.1问题描述1.2解决方案1.3注意事项2.响应式设计未实现或设计不当2.1问题描述2.2解决方案示例:媒体查询的使用2.3常见的媒体查询断点3.固......