快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → Redis解决缓存穿透及代码实现

Redis解决缓存穿透及代码实现

时间:2022-10-10 11:53:42人气:作者:快盘下载我要评论

什么是缓存穿透;客户端请求的数据库都不存在;这样缓存就永远不会生效;这些请求都会打到数据库
Redis解决缓存穿透及代码实现
有如下解决方案;

  • 缓存空对象;
    • 优点;实现简单;维护方便
    • 缺点;
      • 额外的内存消耗
        • 可以设置较短的TTL过期时间
      • 造成短期不一致
        • 当更新的时候手动更新redis中的数据
  • 布隆过滤
    • 是一种算法
    • 如何知道有没有?
      • 简单理解成是一个Byte‘数组;里面存的是二进制位;当要去判断数据库中的数据是否存在的时候;并不是真的把数据存储到布隆过滤器;而是把这些数据基于某一种算法hash算法;计算出hash值;然后在将这些hash值转换成二进制位;保存到布隆过滤器中;(01)的形式保存;判断数据是否存在;其实就是判断对应的位值; 是一种概率上的统计;不是百分表准确;不存在的时候是真的不能存在;存在的时候也不一定存在;所以说还是有穿透的风险。
    • 优点;内存占用少;没有多余Key
    • 缺点;实现复杂;存在误判可能
  • 增强id的复杂度;避免被猜测id规律
    • 长度保证在10位或者20位;有一定的规律性
  • 做好数据的基础格式校验
  • 用户权限校验;
  • 做好热点参数的限流
  • 附代码实现
    //缓存穿透
    public <R,ID>R queryWithPassThrough(String keyPrefix, ID id, Class<R>type, Function<ID,R>dbFallBack,Long time,TimeUnit unit){
        String key = keyPrefix ;id;
        //从redis中查询缓存
        String json = stringRedisTemplate.opsForValue().get(key);
        //如果存在;直接返回
        if(StrUtil.isNotBlank(json)){
            return JSONUtil.toBean(json,type);
        }
        //如果不存在
        if(json != null){
            //返回一个错误信息
            return null;
        }
        //不存在;查询
        R r = dbFallBack.apply(id);
        if(r==null){
            stringRedisTemplate.opsForValue().set(key,;;,20,TimeUnit.MINUTES);

            return null;
        }
        this.set(key, r,time,unit);
        return  r;
    

相关文章

  • centOS下安装redis教程

    centOS下安装redis教程,转发:自己用了第一种推荐的没有问题。...
  • Redis_配置文件详解

    Redis_配置文件详解,单位(unit)对大小写不敏感 可将其他配置文件中的配置整合至当前配置文件 1.设置Redis监听的接口默认情况下,若未指定"bind"配置指令,Redis将监听来自服务器上所有可用网络接口的连接;可通过"bind"配置指令,后接一个或多个IP地址,以选择只侦听一个或多个选定接口若运行Redis的计算机直接暴露在因特网上,绑定到所有接口是危险的,并且会将Redis实例暴露给因特网上的所有人。默认情况下,不对 bind 127.0.0.1 进...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。