springboot使用Jedis

1 篇文章 0 订阅
1 篇文章 0 订阅

springboot使用Jedis

在springboot2.X版本后,默认使用的的redis客户端是Lettuce,如果项目中想要使用jedis,需要先把Lettuce依赖去掉,一般如下步骤

  • 1.pom引入依赖
    • 引入spring-boot-starter-data-redis
    • 排除lettuce-core
    • 引入jedis
  • 2.编写RedisConfig
    • 注入Jedis相关类,如JedisPoolConfig,RedisStandaloneConfiguration,JedisConnectionFactory,RedisTemplate
    • 注意序列化问题
      • 在创建RedisTemplate的时,如果项目使用比较简单,redis存储的是字符串,可以直接使用StringRedisTemplate,它用的是字符串的序列化器,如果redis想存储对象,则需要其他的序列化反序列化器,下面代码例子使用的是一个json的序列化器Jackson2JsonRedisSerializer
  • 3.使用
pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>${springframework.version}</version>
    <!-- 如果使用jedis,则去掉默认的lettuce,再引入redis client-->
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>
RedisConfig.java
@Component
public class RedisConfig {

    @Autowired
    RedisProperties redisProperties;

    @Value("${spring.jedis.pool.max-idle:25}")
    private int maxIdle;
    @Value("${spring.jedis.pool.min-idle:10}")
    private int minIdle;
    @Value("${spring.jedis.pool.max-active:25}")
    private int maxActive;
    @Value("${spring.jedis.pool.max-wait:-1}")
    private int maxWait;

    @Bean
    public JedisPoolConfig jedisPoolConfig(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxActive);
        jedisPoolConfig.setMaxWaitMillis(maxWait);
        return jedisPoolConfig;
    }
    @Bean
    public RedisStandaloneConfiguration redisStandaloneConfiguration(){
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(redisProperties.getHost());
        redisStandaloneConfiguration.setPort(redisProperties.getPort());
        if (!StringUtils.isEmpty(redisProperties.getPassword())) {
            redisStandaloneConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
        }
        return redisStandaloneConfiguration;
    }

    @Bean
    public JedisConnectionFactory jedisConnectionFactory(
            JedisPoolConfig jedisPoolConfig, RedisStandaloneConfiguration redisStandaloneConfiguration){
        JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
        jedisClientConfiguration.connectTimeout(redisProperties.getTimeout());
        jedisClientConfiguration.usePooling();
        jedisClientConfiguration.clientName("test");
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder builder = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
        builder.poolConfig(jedisPoolConfig);
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration,builder.build());
        return jedisConnectionFactory;
    }
    @Bean
    public RedisTemplate redisTemplate(JedisConnectionFactory redisConnectionFactory){
        //spring默认自动注入了LettuceConnectionFactory,我们可以直接获取,或自己创建JedisConnectionFactory
//        StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory);
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();
        return template;
    }
}
RedisTest测试类
@SpringBootTest(classes = {DevelopApplication.class})
public class RedisTest {
    @Autowired
    RedisTemplate<String,Object> redisTemplate;
    @Test
    void create() {

        /**
         * 对象
         * 127.0.0.1:6379> get apple
         * "[\"com.cxy.develop.test.Apple\",{\"name\":\"asd\"}]"
         */
//        redisTemplate.opsForValue().set("apple", new Apple("asd"));
        /**
         * 字符串
         * 127.0.0.1:6379> get str
         * "\"str\""
         */
//        redisTemplate.opsForValue().set("str", "str");
        /**
         * list
         * 127.0.0.1:6379> get list
         * "[\"java.util.ArrayList\",[1,3]]"
         */
        List<Integer> asd = new ArrayList<>();
        asd.add(1);
        asd.add(3);
        redisTemplate.opsForValue().set("list", asd);

        System.out.println("");
    }
    @Test
    void get() {
//        Object apple = redisTemplate.opsForValue().get("apple");
        Object apple = redisTemplate.opsForValue().get("str");
        System.out.println("");
    }
}
application.yml
...
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
    timeout: 5000
    jedis:
      pool:
        max-idle: 25
        min-idle: 10
        max-active: 50
        max-wait: -1
...

参考文章

  • https://blog.csdn.net/wangpf2011/article/details/106451782
  • https://blog.csdn.net/guyue35/article/details/107381429
  • https://blog.csdn.net/pan_junbiao/article/details/108871103
Spring Boot中,可以通过集成Jedis来操作Redis。Jedis是一个Java语言的Redis客户端,可以通过简单的方法调用来实现对Redis的操作。首先,你需要引入Jedis的相关依赖,并在配置文件中配置Redis连接信息。然后,你可以编写一个封装了常用Redis操作的工具类,比如上面引用的RedisUtil。在这个工具类中,你可以编写一些常用的操作方法,比如获取值(redisGet)和设置值(redisPut)。在这些方法中,你可以通过JedisPool来获取Jedis连接,并执行相应的操作。通过这种方式,你可以在Spring Boot应用中方便地集成Jedis,并使用它来操作Redis数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [springboot整合jedis](https://blog.csdn.net/runbat/article/details/104665103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot学习秒杀一、SpringBoot集成Redis (使用Jedis实现)](https://download.csdn.net/download/weixin_38747444/13759139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值