首页 > 数据库 >Redis缓存查询(防缓存击穿)

Redis缓存查询(防缓存击穿)

时间:2022-09-07 22:00:41浏览次数:71  
标签:缓存 Redis 击穿 System long consumerId ms error resourceByConsumer

@GetMapping("getResourceByConsumer")
    public APIResponse getResourceByConsumer(String consumerId){
        String error = "";
        try {
            List<TReConsumerResource> resourceByConsumer = new ArrayList<>();
            long startTime = System.currentTimeMillis();
            RedisUtil redisUtil = new RedisUtil(redisTemplate);
            error = "hasKeyPre";
            if(redisUtil.hasKey(consumerId)){
                long getKeyEndTime = System.currentTimeMillis();
                error = "hasKey";
                resourceByConsumer = (List<TReConsumerResource>) redisUtil.get(consumerId);
                error = "redisUtilGet";
                long endTime = System.currentTimeMillis();
                long totalTime = endTime -startTime;
                long getKeyTime = getKeyEndTime - startTime;
                long getValueTime = endTime - getKeyEndTime;
                return new APIResponse(ResponeCode.SUCCESS,
                        "查询成功,通过redis查询,总用时:"+totalTime+"ms 判断redisKey用时:"
                                +getKeyTime+"ms 获取redis值用时"+ getValueTime+"ms"
                        ,resourceByConsumer);
            }else {
                synchronized (this){
                    long getKeyEndTime = System.currentTimeMillis();
                    error = "bySqlPre";
                    resourceByConsumer = tReConsumerResourceService.getResourceByConsumerId(consumerId);
                    error = "bySqlEnd";
                    long getValueEndTime = System.currentTimeMillis();
//            redisUtil.sSetAndTime(consumerId,1L*60L*60L*24L,resourceByConsumer);
                    redisUtil.set(consumerId,resourceByConsumer);
                    long endTime = System.currentTimeMillis();
                    long totalTime = endTime -startTime;
                    long getKeyTime = getKeyEndTime - startTime;
                    long getValueTime = getValueEndTime - getKeyEndTime;
                    long putRedisTime = endTime - getValueEndTime;
                    return new APIResponse(ResponeCode.SUCCESS,
                            "查询成功,通过数据库查询,总用时:"+totalTime+"ms 判断redisKey用时:"
                                    +getKeyTime+"ms 通过数据库获取值用时:"+getValueTime+"ms 放入redis用时:"+putRedisTime+"ms"
                            ,resourceByConsumer);
                }
            }
        }catch (Exception e){
            return new APIResponse(ResponeCode.INTERNAL_SERVER_ERROR,e.getMessage()+error);
        }

标签:缓存,Redis,击穿,System,long,consumerId,ms,error,resourceByConsumer
From: https://www.cnblogs.com/ideaAI/p/16667421.html

相关文章

  • redis的面试
    Redis的数据类型String1.setnamezhangsan2.getname3.setexname5zhangsan--设置时间为5秒4.getsetnamezhangsan--给name设置值为张三,并且返回原来的值5.set......
  • SpringBoot + Caffeine实现本地缓存(内存缓存)
    1.Caffeine简介  Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。借鉴GoogleGuava和ConcurrentLinkedHashMap的经验,实现内存缓存。  缓存和......
  • 用 Redis 做一个可靠的延迟队列
    我们先看看以下业务场景:当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存?新创建店铺,N天内没有上传商品,系统如何知道该信息,并发送激活短信?上述场景最简单直接的......
  • 分页查询,redis缓存分页数据,redis双重检测
    StringpageKey=RedisKeyManagement.getKey(RedisKeyManagement.ACTIVITY_BAISHI_PAGE_CACHE,Arrays.asList(activityId.toString(),String.valueOf(current)));......
  • 浏览器缓存机制介绍与缓存策略剖析
    缓存可以减少网络IO消耗,提高访问速度。浏览器缓存是一种操作简单、效果显著的前端性能优化手段。对于这个操作的必要性,Chrome官方给出的解释似乎更有说服力一些:很多时......
  • net core IMemoryCache 实现缓存
    1.Nuget包添加Microsoft.Extensions.Caching.Memory程序包2.Startup.cs类 ConfigureServices方法引用服务services.AddMemoryCache();  3. 在构造函数中请求I......
  • redis集群部署文档
    1.部署的服务器ip地址172.16.0.151172.16.0.173172.16.0.2202.redis版本wgethttps://download.redis.io/releases/redis-6.2.5.tar.gz3.部署架......
  • linux环境配置 (redis、jdk、nginx、mysql)
    linux环境配置环境准备服务器:腾讯云服务器操作系统:centos8.0终端控制器:finalshell3.9.34redis7.0.4jdk1.8.0nginx-1.21.3mysql8.0.30redis安装创建或选......
  • redis 集群安装
    1.前期准备安装ruby升级ruby参见前一篇前期准备#EPEL源安装ruby支持yuminstallrubyrubygems-y使用国内源gemsource-ahttp://mirrors.aliyun.com/rubyge......
  • 分布式锁解决方案——redisson的使用
    概述redisson:​ 提供基于redis的分布式服务,包含很多,本文详细介绍springboot下的分布式锁的使用​ 学过JUC的话,可以无缝的转换到redisson,因为redisson实现了Lock接口,并......