zoukankan      html  css  js  c++  java
  • 008-spring cache-缓存实现-03-springboot redis单机测试、lettuce链接池集群配置、jedis连接池集群配置

    一、概述

    1.1、安装以及简介

    window下redis安装:https://www.cnblogs.com/bjlhx/p/7429811.html

    mac上docker集群使用:009-docker-安装-redis:5.0.3-单点配置、集群配置

    更多介绍:https://www.cnblogs.com/bjlhx/category/1066467.html

    1.2、Redis 优势

    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
    • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

    二、使用

    2.1、redis单机测试

    代码地址:https://github.com/bjlhx15/common.git spring-cache/springboot2-cache-redis-single

    1、导入依赖pom

            <!--添加redis缓存依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>

    就只需要这一个依赖,不需要spring-boot-starter-cache..

    当你导入这一个依赖时,SpringBoot的CacheManager就会使用RedisCache。

    如果你的Redis使用默认配置,这时候已经可以启动程序了。

    2、在application.properties文件中写下连接redis所需要的信息。

    # Redis数据库索引(默认为0),如果设置为1,那么存入的key-value都存放在select 1中
    spring.redis.database=1
    # Redis服务器地址
    spring.redis.host=localhost
    # Redis服务器连接端口
    spring.redis.port=6379 
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    #连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=8 
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1 
    # 连接池中的最大空闲连接
    spring.redis.pool.max-idle=8 
    # 连接池中的最小空闲连接
    spring.redis.pool.min-idle=0 
    # 连接超时时间(毫秒)
    spring.redis.timeout=0

    3、spring redis其他用法

    除了使用注解,我们还可以使用Redis模板。

    Spring boot集成 Redis 客户端jedis。封装Redis 连接池,以及操作模板。

     @Autowired
        private StringRedisTemplate stringRedisTemplate;//操作key-value都是字符串
    
        @Autowired
        private RedisTemplate redisTemplate;//操作key-value都是对象
    
        /**
         *  Redis常见的五大数据类型:
         *  stringRedisTemplate.opsForValue();[String(字符串)]
         *  stringRedisTemplate.opsForList();[List(列表)]
         *  stringRedisTemplate.opsForSet();[Set(集合)]
         *  stringRedisTemplate.opsForHash();[Hash(散列)]
         *  stringRedisTemplate.opsForZSet();[ZSet(有序集合)]
         */
        public void test(){
            stringRedisTemplate.opsForValue().append("msg","hello");
        }

    2.2、集群配置

    配置redis连接,两个版本的redis客户端连接池使用有所不同。

    spring-boot版本默认客户端类型
    1.5.x jedis
    2.x lettuce

    Lettuce 和 Jedis 的定位都是Redis的client

      Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接

      Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,因为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

      springboot2之前redis的连接池为jedis,2.0以后redis的连接池改为了lettuce,lettuce能够支持redis4,需要java8及以上。lettuce是基于netty实现的与redis进行同步和异步的通信,之前看到spring-session-data-redis里的samples已经改为使用LettuceConnectionFactory

    查看:spring-boot-starter-data-redis, 通过看RedisAutoConfiguration的源码

    @Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})

    可以知道RedisAutoConfiguration完成了对JedisConnectionFactory和LettuceConnectionFactory的自动配置。

    同时RedisProperties源码中封装了对redis配置,包括jedis和lettuce

    @ConfigurationProperties(
    prefix = "spring.redis"
    )
    
    private final RedisProperties.Jedis jedis = new RedisProperties.Jedis();
    private final RedisProperties.Lettuce lettuce = new RedisProperties.Lettuce();

    因此我们在使用时直接通过yml配置即可使用Lettuce来连接Redis,对于单机配置

    spring:
      redis:
        host: ip
        port: port
        password: password
        timeout: 2000
        lettuce:
          pool:
            max-active: 8
            max-wait: 1
            max-idle: 8
            min-idle: 0
    View Code

    2.2.1、lettuce链接池集群配置

    代码地址:https://github.com/bjlhx15/common.git spring-cache/springboot2-cache-redis-cluster-lettuce

    1、pom依赖

            <!--添加redis缓存依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>

    查看 应该包含了common-pool2、lettuce-core等jar

    2、直接使用xml配置

        <!--redis-->
        <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
            <constructor-arg name="clusterNodes"
                             value="192.168.199.220:7000,192.168.199.220:7001,192.168.199.220:7002,192.168.199.220:7003,192.168.199.220:7004,192.168.199.220:7005"/>
        </bean>
        <bean id="connectionFactory" class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory">
            <constructor-arg name="clusterConfiguration" ref="redisClusterConfiguration"/>
        </bean>

    其他不做任何处理,使用即可

    2.2.2、jedis连接池集群配置

    代码地址:https://github.com/bjlhx15/common.git spring-cache/springboot2-cache-redis-cluster-jedis

    1、pom【boot2.0.4版本】

            <!--添加redis缓存依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>io.lettuce</groupId>
                        <artifactId>lettuce-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>

    Spring Boot 2.0中spring-boot-starter-data-redis默认使用Lettuce方式替代了Jedis。使用Jedis的话先排除掉Lettuce的依赖,然后手动引入Jedis的依赖。不要添加版本号

    2、连接池配置

        <!--redis-->
        <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
            <constructor-arg name="clusterNodes"
                             value="192.168.199.220:7000,192.168.199.220:7001,192.168.199.220:7002,192.168.199.220:7003,192.168.199.220:7004,192.168.199.220:7005"/>
        </bean>
        <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/>
        </bean>

    返回

     
  • 相关阅读:
    使用CXF开发Web Service服务
    IT成长中的龟兔赛跑
    IT成长中的龟兔赛跑
    什么是共识算法
    python字节序列
    数据分析必备的统计学(二):假设检验
    以太坊Casper 与 分片
    以太坊君士坦丁堡(Constantinople)升级公告
    以太坊基金会:前路,2018
    以太坊团队·2017年第四季度总结
  • 原文地址:https://www.cnblogs.com/bjlhx/p/9175671.html
Copyright © 2011-2022 走看看