美文网首页
Redis高并发注解方法及代码方法

Redis高并发注解方法及代码方法

作者: 小星星吃KFC | 来源:发表于2020-01-02 18:22 被阅读0次

1、使用注解

 @Cacheable(value = RedisService.REDIS_VALUE_IPLOG,sync=true)
    @Override
    public List<Userinfo> getAllUserinfo() {
        System.out.println("userinfoMapper = " + userinfoMapper);
        return userinfoMapper.getAll();
    }

2、代码控制,双重监测加锁
①Service中代码

    return redisService.gettWithThread("redis_keys_all_user_info", new Callable() {
            @Override
            public Object call() throws Exception {
                return userinfoMapper.getAll();
            }
        });

②RedisService 中代码,统一封装,用callable返回值

   public List<Userinfo> gettWithThread(final String key, Callable callable) {

        boolean result = false;

        List<Userinfo> list = ( List<Userinfo> )redisTemplate.opsForValue().get(key);
        try {

            // 双重检测锁
            if (null==list){
                synchronized (this){
                    // 在redis中获取
                    list= ( List<Userinfo> )redisTemplate.opsForValue().get(key);
                    if (null==list){
                        System.out.println("查询数据库------------");

                        list = (List<Userinfo>) callable.call();

                        redisTemplate.opsForValue().set(key,list);
                        result = true;
                    }else {
                        System.out.println("查询redis缓存------------");
                    }
                }
            }else{
                System.out.println("查询redis缓存------------");
            }

        }catch (Exception e){

            return list;
        }
        return list;
    }

3、测试接口

  @RequestMapping(value = "/getAllUserInfo.do")
    public Object getAllUserInfo() {
      
        Runnable runnable = () -> iUserinfoService.getAllUserinfo();
        /**简历线程池,避免直接用线程**/
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        /**submit有返回值,而execute没有*/
        for (int i = 0; i < 1000; i++) {
            executorService.submit(runnable);
        }
      return iUserinfoService.getAllUserinfo();

    }


    @RequestMapping(value = "/getAllUserInfo2.do")
    public Object getAllUserInfo2() {

        Runnable runnable = () -> iUserinfoService.getAllUserinfoWithRedis();

        /**简历线程池,避免直接用线程**/
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        /**submit有返回值,而execute没有*/
        for (int i = 0; i < 1000; i++) {
            executorService.submit(runnable);
        }
        return iUserinfoService.getAllUserinfoWithRedis();

    }

相关文章

  • Redis高并发注解方法及代码方法

    1、使用注解 2、代码控制,双重监测加锁①Service中代码 ②RedisService 中代码,统一封装,用c...

  • JAVA之注解

    1、注解 注解:在源代码中嵌入一些补充信息,即注解(Annotation)。它是给类、方法及成员变量等元素增加元数...

  • Keep混淆

    keep注解 支持变量、方法、构造方法、类、注解 混淆文件proguard-rules.pro android代码...

  • redis

    redis Redis - 高并发,内存高速cache ,处理读写io的高并发容忍。 redis 通常被使用来将那...

  • AOP自定义注解权限管理

    定义redis缓存权限对象userSession 定义权限注解放置某个方法的头上(表示该方法需要权限才能访问): ...

  • Spring mvc中@ModelAttribute和@Cont

    @ModelAttribute从代码看,可以在方法或方法参数上注解。方法为controller类中的方法。可以是不...

  • 《【面试突击】— Redis篇》-- Redis的主从复制?哨兵

    Redis如何保证高并发,高可用? 高并发:redis的单机吞吐量可以达到几万不是问题,如果想提高redis的读写...

  • Java注解 + 基于注解 & 拦截器实现登录验证 /

    Java中的注解是如何工作的?java 注解的几大作用及使用方法详解一种基于注解的Spring MVC权限控制方法...

  • 动态代理+注解(DynamicProxyAndAnnotatio

    什么是注解 注解是一种元数据, 可以添加到java代码中. 类、方法、变量、参数、包都可以被注解,注解对注解的代码...

  • Spring MVC 作业讲解

    1 增加权限注解类 注解值是String数组 2 doPost方法添加权限校验代码 在dopost方法中增加验证注...

网友评论

      本文标题:Redis高并发注解方法及代码方法

      本文链接:https://www.haomeiwen.com/subject/cuiooctx.html