redis在springboot中的使用,redissonClient

创建spring-boot项目,创建的时候同时勾选web,如果不知道怎么创建springboot项目可以参考

SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程_方志朋的博客-CSDN博客

1、pom引入,增加如下内容


        <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>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>


2、application.properties配置Redis

server.port=8080

# Redis_config
# Redis数据库索引(默认为0)
spring.redis.database=3
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接超时时间(毫秒)
spring.redis.timeout=3600
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# jedis超时
spring.redis.jedis.shutdown-timeout=100
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0

3 操作类实例如下

@RestController
public class HelloController {

    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/")
    public String index() {
        // 获取hash操作类
        HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        hashOperations.putIfAbsent("a","b","abvalue");
        hashOperations.putIfAbsent("a","b1","ab1value");
        System.out.println(hashOperations.get("a","b"));
        System.out.println(hashOperations.get("a","b1"));
        // 获取字符串操作类
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.setIfPresent("d","dvalue");
        return "Greetings from Spring Boot!";
    }
}

访问http://localhost:8080/即可。

创建redisTemplate

@Configuration
public class RedisConfig {

    @Bean
    @Profile("local")
    public RedissonClient redissonClient(RedisProperties redisProperties) {
        Config config = new Config();
        config.setTransportMode(TransportMode.NIO);
        if (StringUtils.isEmpty(redisProperties.getPassword())) {
            config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
                    .setDatabase(redisProperties.getDatabase());
        } else {
            config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
                    .setPassword(redisProperties.getPassword())
                    .setDatabase(redisProperties.getDatabase());
        }
        return Redisson.create(config);
    }

    @Bean
    @Primary
    public StringRedisTemplate redisTemplate(RedisProperties redisProperties) {
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        // template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(jackson2JsonRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);

        return this.buildDbStringRedisTemplate(redisProperties, redisProperties.getDatabase());
    }

    /**
     * 构造StringRedisTemplate
     *
     * @param redisProperties redis配置
     * @param dbIndex         db索引
     * @return
     */
    private StringRedisTemplate buildDbStringRedisTemplate(RedisProperties redisProperties, Integer dbIndex) {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        configuration.setHostName(redisProperties.getHost());
        configuration.setPort(redisProperties.getPort());
        configuration.setPassword(RedisPassword.of(redisProperties.getPassword()));
        LettucePoolingClientConfiguration clientConfiguration;
        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
        if (Objects.nonNull(redisProperties.getTimeout())) {
            builder.commandTimeout(redisProperties.getTimeout());
        }
        // 关闭延迟收集监控
        builder.clientResources(DefaultClientResources.builder()
                .commandLatencyCollector(DefaultCommandLatencyCollector.disabled())
                .commandLatencyCollectorOptions(DefaultCommandLatencyCollectorOptions.disabled()).build());
        // set pool config
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        RedisProperties.Pool pool = redisProperties.getLettuce().getPool();
        poolConfig.setMaxIdle(pool.getMaxIdle());
        poolConfig.setMinIdle(pool.getMinIdle());
        poolConfig.setMaxTotal(pool.getMaxActive());
        poolConfig.setMaxWaitMillis(500);
        clientConfiguration = builder.poolConfig(poolConfig).build();
        LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration, clientConfiguration);
        // 设置使用的redis数据库
        factory.setDatabase(dbIndex);
        // 重新初始化工厂
        factory.afterPropertiesSet();
        return new StringRedisTemplate(factory);
    }
}

关于RedissonClient

RedissonClient是Redisson提供的Java Redis客户端,它封装了Redis的许多功能,提供了一系列的分布式Java对象和服务。RedissonClient可以用于连接Redis服务器,进行数据的读写操作,支持分布式锁、分布式集合、分布式队列、分布式Map等功能

springboot自动创建RedissonClient

项目中添加以下依赖:
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.16.1</version>
</dependency>
然后在您的配置文件中添加以下Redis连接配置:
spring:
  redis:
    url: redis://localhost:6379
这样,Spring Boot会自动创建一个RedissonClient实例,并将其注入到您的应用程序中。
手动创建方式:

@Configuration
public class RedisConfig {

    @Bean
    @Profile("local")
    public RedissonClient redissonClient(RedisProperties redisProperties) {
        Config config = new Config();
        config.setTransportMode(TransportMode.NIO);
        if (StringUtils.isEmpty(redisProperties.getPassword())) {
            config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
                    .setDatabase(redisProperties.getDatabase());
        } else {
            config.useSingleServer().setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
                    .setPassword(redisProperties.getPassword())
                    .setDatabase(redisProperties.getDatabase());
        }
        return Redisson.create(config);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值