Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot系列之集成Jedis教程

SpringBoot系列之集成Jedis教程

作者头像
SmileNicky
修改于 2023-12-06 02:26:12
修改于 2023-12-06 02:26:12
1.1K00
代码可运行
举报
文章被收录于专栏:Nicky's blogNicky's blog
运行总次数:0
代码可运行

SpringBoot系列之集成Jedis教程,Jedis是老牌的redis客户端框架,提供了比较齐全的redis使用命令,是一款开源的Java 客户端框架,本文使用Jedis3.1.0加上Springboot2.0,配合spring-boot-starter-data-redis使用,只给出简单的使用demo

软件环境:

  • JDK 1.8
  • SpringBoot 2.2.1
  • Maven 3.2+
  • Mysql 8.0.26
  • spring-boot-starter-data-redis 2.2.1
  • jedis3.1.0
  • 开发工具
    • IntelliJ IDEA
    • smartGit

项目搭建

使用Spring官网的https://start.spring.io快速创建Spring Initializr项目

选择maven、jdk版本

选择需要的Dependencies,选择一下Spring Data Redis

点击next就可以生成一个Springboot项目,不过jedis客户端配置还是要自己加的,所以对pom文件做简单的修改,spring-boot-starter-data-redis默认使用lettuce,所以不用的可以exclusion,然后再加上jedis的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

新建一个application.yml配置文件,加上redis一些配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  redis:
    port: 6379
    host: 127.0.0.1
    password:
    timeout: 3000
    database: 1
    jedis:
      pool:
        max-idle: 8
        max-active: 8
        min-idle: 2

新增Redis配置,配置RedisConnectionFactory JedisConnectionFactoryJedisPoolRedisTemplate需要用到也可以配置一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.jedis.configuration;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
@ConditionalOnClass({GenericObjectPool.class, JedisConnection.class, Jedis.class})
@EnableRedisRepositories(basePackages = "com.example.jedis.repository")
@Slf4j
public class RedisConfiguration {

    @Value("${spring.redis.host:127.0.0.1}")
    private String host;
    @Value("${spring.redis.port:6379}")
    private Integer port;
    @Value("${spring.redis.password:}")
    private String password;
    @Value("${spring.redis.database:0}")
    private Integer database;

    @Value("${spring.redis.jedis.pool.max-active:8}")
    private Integer maxActive;
    @Value("${spring.redis.jedis.pool.max-idle:8}")
    private Integer maxIdle;
    @Value("${spring.redis.jedis.pool.max-wait:-1}")
    private Long maxWait;
    @Value("${spring.redis.jedis.pool.min-idle:0}")
    private Integer minIdle;


    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWait);
        jedisPoolConfig.setMaxTotal(maxActive);
        jedisPoolConfig.setMinIdle(minIdle);
        return jedisPoolConfig;
    }

    @Bean
    public RedisStandaloneConfiguration jedisConfig() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
        config.setHostName(host);
        config.setPort(port);
        config.setDatabase(database);
        config.setPassword(RedisPassword.of(password));
        return config;
    }


    @Bean
    public JedisPool jedisPool() {
      return new JedisPool(jedisPoolConfig());
    }


    @Bean
    public RedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisConfig());
        jedisConnectionFactory.setPoolConfig(jedisPoolConfig());
        return jedisConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }





}

写一个实体类,@RedisHash定义存储的hash key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.jedis.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.springframework.data.redis.core.RedisHash;

import java.io.Serializable;

@RedisHash("user")
@Data
@SuperBuilder(toBuilder = true)
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class UserDto implements Serializable {


    private static final long serialVersionUID = 5962011647926411830L;

    public enum Gender {
        MALE, FEMALE
    }

    private Long id;
    private String name;
    private Gender gender;

}

使用Sping Data RedisAPI来实现一个CRUD接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.jedis.repository;


import com.example.jedis.model.UserDto;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<UserDto, Long> {
}

写一个测试类来进行测试,ContextConfiguration指定一个配置类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.jedis;

import cn.hutool.core.util.IdUtil;
import com.example.jedis.configuration.RedisConfiguration;
import com.example.jedis.model.UserDto;
import com.example.jedis.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@SpringBootTest
@ContextConfiguration(classes = RedisConfiguration.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
class SpringbootJedisApplicationTests {

    @Autowired
    JedisPool jedisPool;
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    UserRepository userRepository;

    @Test
    void contextLoads() {
        Jedis jedis= jedisPool.getResource();
        jedis.set("tKey","你好呀");
        jedis.close();

    }

    @Test
    void testRedisTemplate() {
        redisTemplate.opsForValue().set("rtKey","你好呀");
    }

    @Test
    void testCrud() {
        final UserDto userDto = UserDto.builder()
                .id(IdUtil.getSnowflake().nextId())
                .name("用户1")
                .gender(UserDto.Gender.MALE)
                .build();
        userRepository.save(userDto);
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
springboot整合redis过期key监听实现订单过期操作
对于以上情况可以自定义工厂然后注入即可(上面的JedisConfig.java文件)
一只牛博
2025/05/31
2910
springboot整合redis过期key监听实现订单过期操作
redis的keys命令和scan命令性能对比
Redis的keys *命令在生产环境是慎用的,特别是一些并发量很大的项目,原因是Redis是单线程的,keys *会引发Redis锁,占用reids CPU,如果key数量很大而且并发是比较大的情况,效率是很慢的,很有可能导致服务雪崩,在Redis官方的文档是这样解释的,官方的推荐是使用scan命令或者集合
SmileNicky
2023/12/05
5510
redis的keys命令和scan命令性能对比
开发一个属于自己的Spring Boot Starter
通过以上的描述,我们可以简单地将starter看作是对一个组件功能粒度较大的模块化封装,包括了所需依赖包的整合及基础配置和自动装配等。
端碗吹水
2020/09/23
4.9K0
开发一个属于自己的Spring Boot Starter
springboot整合Redis中连接池jedis与lettuce的对比和实现
总之,Redis连接池的主要作用是提高性能、降低资源消耗、管理连接状态和复用连接,从而确保与Redis服务器的高效和稳定通信。在高并发的应用中,合适的连接池配置对于维护系统的稳定性和性能至关重要。
一只牛博
2025/05/31
3640
3 Springboot中使用redis,redis自动缓存异常处理
在上一篇中,提到了使用配置文件来定义连接信息,由于前面讲的都是框架自动使用redis缓存数据,那么如果出现了异常又该怎么处理?
天涯泪小武
2019/01/17
2.1K0
redis 入门(二)——maven4.0 + Jedis2.9.0 + redis3.2.6 实战
用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET等。基于这些限制,有必要考虑Redis!
MickyInvQ
2020/09/27
8330
redis 入门(二)——maven4.0 + Jedis2.9.0  + redis3.2.6 实战
springboot 整合redis 操作
六月的雨在Tencent
2024/03/28
1750
springboot 整合redis 操作
Java Spring mvc 操作 Redis 及 Redis 集群
古时的风筝
2018/01/08
2.1K0
SpringBoot集成Redis的三种方式
spring.redis.database=0 spring.redis.host=localhost spring.redis.port=6379 # 连接超时时间 单位 ms(毫秒) spring.redis.timeout=3000
星哥玩云
2022/08/18
1.5K0
SpringBoot集成Redis的三种方式
⑩【Redis Java客户端】:Jedis、SpringDataRedis、StringRedisTemplate
.29.
2023/11/26
3940
⑩【Redis Java客户端】:Jedis、SpringDataRedis、StringRedisTemplate
java架构之路-(Redis专题)SpringBoot连接Redis超简单
  上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis
小菜的不能再菜
2019/10/25
1.3K0
java架构之路-(Redis专题)SpringBoot连接Redis超简单
【SpringBoot+Vue】SpringBoot配置Vue
注意,如果其中的<dependency></dependency>报错,那么就在前面和后面加上</dependencies>如图
为了伟大的房产事业
2024/03/15
1310
【SpringBoot+Vue】SpringBoot配置Vue
Redis系列之多线程下使用incr/decr命令
Redis是一个单线程的服务,所以正常来说redis的命令是会排队执行的。incr/decr命令是redis提供的可以实现递增递减的命令。但是如果使用不当也会有线程安全问题。动手实践一下吧,用一个例子来模拟实现高并发场景的秒杀减库存业务。
SmileNicky
2023/12/05
8942
Redis系列之多线程下使用incr/decr命令
spring boot 集成redis版本说明
官网文档:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/
全栈程序员站长
2022/07/28
1.6K0
springboot 配置JedisPool 简洁有效 复制即可运行「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。 吐槽一下,本来以为随便找个文章跟着配置一下,就可以了,后来发现好多例子无法运行。估计是环境的问题,后来把大神们的例子综合一下,终于配置出一个简洁有效的例子,
全栈程序员站长
2022/10/04
2.6K0
springboot 配置JedisPool 简洁有效 复制即可运行「建议收藏」
SpringBoot整合SpringDataRedis
  本文介绍下SpringBoot如何整合SpringDataRedis框架的,SpringDataRedis具体的内容在前面已经介绍过了,可自行参考。
用户4919348
2019/05/22
1.4K0
Redis之Java客户端【Jedis,Spring Data Redis】
在Redis官网中提供了各种语言的客户端,地址:/docs/clients/,不过我是学Java的,那这里就给大家介绍javad的客户端。
叫我阿杰好了
2022/11/07
1.2K0
Redis之Java客户端【Jedis,Spring Data Redis】
Redis在SpringBoot的基本使用
在 springboot 启动器中直接添加依赖,或者创建后添加 Maven 依赖:
全栈程序员站长
2022/09/23
9420
SpringBoot系列教程之Redis集群环境配置
之前介绍的几篇redis的博文都是基于单机的redis基础上进行演示说明的,然而在实际的生产环境中,使用redis集群的可能性应该是大于单机版的redis的,那么集群的redis如何操作呢?它的配置和单机的有什么区别,又有什么需要注意的呢?
一灰灰blog
2019/09/29
4.5K0
SpringBoot系列教程之Redis集群环境配置
springboot11、redis
资源地址:redis服务(windows版)&amp;redis可视化工具.rar_asp.netcoreredis-.Net文档类资源-CSDN下载
红目香薰
2022/11/30
2010
springboot11、redis
相关推荐
springboot整合redis过期key监听实现订单过期操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验