zoukankan      html  css  js  c++  java
  • SpringBoot--整合Lettuce redis

    首先解释一下Lettuce客户端:

      Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

    1、添加依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>

    2、添加redis配置

    spring:
      redis:
          host: ****
          password:****
          port: 6379
      # 连接超时时间(毫秒)
          timeout: 1000
      # Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
          database: 0
      # 连接池配置
          lettuce:
            pool:
      # 连接池最大连接数(使用负值表示没有限制) 默认 8
              max-active: 8
      # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
              max-wait: -1
      # 连接池中的最大空闲连接 默认 8
              max-idle: 8
      # 连接池中的最小空闲连接 默认 0
              min-idle: 0

    3、实现逻辑

    @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        @Override
        public String testRedis(){
    
            ExecutorService executorService = Executors.newFixedThreadPool(1000);
            IntStream.range(0, 1000).forEach(i -> executorService.execute(() -> stringRedisTemplate.opsForValue().increment("lcl",1)));
    
            System.out.println("lcl1=============" + stringRedisTemplate.opsForValue().get("lcl"));
    
            stringRedisTemplate.opsForValue().set("lcl1","val1");
    
            String val1 = stringRedisTemplate.opsForValue().get("lcl1");
    
            System.out.println("lcl1=============" + val1);
    
            String key = "redis:test:demo1";
    
    
            User user = new User();
            user.setId(100L);
            user.setUsername("u2");
            user.setPassword("p2");
            stringRedisTemplate.opsForValue().set(key, JSON.toJSONString(user));
    
            String valUser = stringRedisTemplate.opsForValue().get(key);
            System.out.println("redis:test:demo1=============" + valUser);
    
            User getUser = JSON.parseObject(valUser, User.class);
    
            System.out.println("redis:test:demo1=============" + getUser.getUsername()+ "========" + getUser.getPassword());
    
            return null;
        }

    测试结果:

     由于redis有String、list、set、zset、hash、geo等类型,因此使用时不止使用opsForValue()方法,具体的对应方法如下:

        opsForValue: 对应 String(字符串)

        opsForZSet: 对应 ZSet(有序集合)

        opsForHash: 对应 Hash(哈希)

        opsForList: 对应 List(列表)

        opsForSet: 对应 Set(集合)

        opsForGeo: 对应 GEO(地理位置)

  • 相关阅读:
    ES6的Iterator,jquery Fn
    html4,xhtml,html5发展历史
    浏览器Range,Selection等选中文本对象
    高效的插入子节点DocumentFragment
    Vue 性能优化track-by
    JS中先有Object还是先有Function?
    Unicode 与(UTF-8,UTF-16,UTF-32,UCS-2)
    FormData、Blob、File、ArrayBuffer数据类型
    jQuery 2.0.3 源码分析 事件绑定
    记录:springmvc + mybatis + maven 搭建配置流程
  • 原文地址:https://www.cnblogs.com/liconglong/p/11695131.html
Copyright © 2011-2022 走看看