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(地理位置)

  • 相关阅读:
    设计模式系列
    Python3 系列之 可变参数和关键字参数
    设计模式系列
    【HANA系列】SAP HANA ODBC error due to mismatch of version
    【FICO系列】SAP FICO FS00修改科目为未清项目管理
    【FIORI系列】SAP OpenUI5 (SAPUI5) js框架简单介绍
    【HANA系列】SAP HANA SQL获取当前日期加若干天后的日期
    【HANA系列】SAP HANA SQL获取本周的周一
    【HANA系列】SAP HANA SQL获取当前日期
    【HANA系列】SAP HANA SQL获取当前日期最后一天
  • 原文地址:https://www.cnblogs.com/liconglong/p/11695131.html
Copyright © 2011-2022 走看看