Spring Boot中使用Redis

这篇具有很好参考价值的文章主要介绍了Spring Boot中使用Redis。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.依赖

2.依赖关系

3.配置

4.RedisTemplate

5.基础操作

6.事务


1.依赖

maven依赖如下,需要说明的是,spring-boot-starter-data-redis里默认是使用lettuce作为redis客户端的驱动,但是lettuce其实用的比较少,我们常用的还是jedis作为客户端的驱动,所以这里排除掉lettuce,引入jedis:

<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>

2.依赖关系

spring data redis中依赖的关系:

Spring Boot中使用Redis

这个依赖关系想表达的是,Spring 是通过 RedisConnection操作Redis的,RedisConnection 则对原生的 Jedis 行封装。要获取RedisConnection接口对象是通过RedisConnectionFactory 生成的 。

3.配置

配置文件进行配置:

# Redis 连接配置
# 单机 Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
# 连接池配置
spring.redis.jedis.pool.max-idle=30
spring.redis.jedis.pool.max-total=50
spring.redis.jedis.pool.max-wait=2000ms

代码进行配置:

@Configuration
public class RedisConfig {
    private RedisConnectionFactory connectionFactory = null;

    @Bean
    public RedisConnectionFactory initRedisConnectionFactory(){
        if(connectionFactory!=null){
            return connectionFactory;
        }
        JedisPoolConfig poolConfig =new JedisPoolConfig();
        //最大空闲数
        poolConfig.setMaxIdle(30);
        //最大连接数
        poolConfig.setMaxTotal(50);
        //最大等待毫秒数
        poolConfig.setMaxWaitMillis(2000);
        //创建Jedis连接工厂
        JedisConnectionFactory connectionFactory=new JedisConnectionFactory(poolConfig);
        //获取单机的redis配置,如果是集群的话用集群配置类
        RedisStandaloneConfiguration rscfg=connectionFactory.getStandaloneConfiguration();
        connectionFactory.setHostName("127.0.0.1");
        connectionFactory.setPort(6379);
        return connectionFactory;
    }
}

4.RedisTemplate

这里要说明的是如果是直接使用RedisConnection来操作redis就需要我们手动去找RedisConnectionFactory拿RedisConnection,并且需要每次手动关闭RedisConnection。所以Spring Data Redis里面提供了RedisTemplate来方便操作,其封装自jedis,屏蔽了资源获取和释放的步骤。

使用RedisTemplate的时候要注意的核心是它的序列化器,RedisTemplate有多种序列化器,不同的序列化器在键值写入、读出redis的过程中使用的序列化方式会不同,序列化出来的结果也会不同。比如处理字符就需要用字符串专用的序列化器、处理对象需要使用对象专用的序列化器。

目前有的序列化器如下:

Spring Boot中使用Redis

StringRedisSerializer:

StringRedisSerializer 是 RedisTemplate 默认使用的 Key 和 Value 的序列化器,它将字符串序列化为字节数组,使用 UTF-8 编码。由于 Redis 中 Key 和 Value 都是字符串,因此默认的 StringRedisSerializer 序列化器已经可以满足大部分情况的需要。

Jackson2JsonRedisSerializer:

Jackson2JsonRedisSerializer 是一个基于 Jackson 的 Redis Key 和 Value 的序列化器,它可以将对象序列化为 JSON 格式的字符串,并存储到 Redis 中。使用 Jackson2JsonRedisSerializer 序列化器需要添加 Jackson 的依赖,可以将对象转换为 JSON 格式的字符串,也可以将 JSON 格式的字符串转换为对象。

JdkSerializationRedisSerializer:

JdkSerializationRedisSerializer 是一种基于 Java 自带的序列化方式的序列化器,它可以将对象序列化为字节数组进行存储。虽然 JdkSerializationRedisSerializer 简单易用,但是它的效率比较低,序列化后的字节数组也比较大,不适合存储大量的数据。

GenericJackson2JsonRedisSerializer:

GenericJackson2JsonRedisSerializer 是一个支持泛型的 Jackson2JsonRedisSerializer,它可以序列化任意类型的对象,并将对象序列化为 JSON 格式的字符串。它在序列化和反序列化时都需要指定目标类型。

OxmSerializer:

OxmSerializer 是一种基于 Spring 的 O/X 映射框架的序列化器,它支持将对象序列化为 XML 格式的字符串。虽然 OxmSerializer 灵活性较高,但是序列化和反序列化的性能比较低,不适合存储大量的数据。

总之,在选择序列化器时需要根据实际情况进行选择,根据数据类型和性能要求选择合适的序列化器。

使用的时候直接set进去即可,set的时候给了很多生效粒度选择,是对所有redis类型的数据结构都生效,还是对某一类redis的数据结构类型生效:

Spring Boot中使用Redis

比如我想使用String序列化器,在全局都生效:

@Bean
public RedisTemplate<Object,Object> initRedisTemplate(){
  RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  redisTemplate.setDefaultSerializer(new StringRedisSerializer());
  return redisTemplate;
}

5.基础操作

以下是使用RedisTemplate操作redis基本数据类型的代码示例:

要注意的是@Bean定义RedisTemplate的时候泛型要和使用时的泛型对齐。

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    public void setHash(String key, String hashKey, Object value) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.put(key, hashKey, value);
    }

    public Object getHash(String key, String hashKey) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.get(key, hashKey);
    }

    public void setList(String key, Object value) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        listOps.rightPush(key, value);
    }

    public Object getList(String key, long index) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        return listOps.index(key, index);
    }

    public void setSet(String key, Object value) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        setOps.add(key, value);
    }

    public Object getSet(String key) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        return setOps.members(key);
    }

    public void setZSet(String key, Object value, double score) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        zsetOps.add(key, value, score);
    }

    public Object getZSet(String key, long start, long end) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        return zsetOps.range(key, start, end);
    }

}

6.事务

以下是使用事务的代码示例:文章来源地址https://www.toymoban.com/news/detail-410801.html

@Autowired
private RedisTemplate<String, String> redisTemplate;

public void transactionalOperation() {
    // 开启 Redis 事务
    redisTemplate.multi();

    try {
        // 执行多个 Redis 命令
        redisTemplate.opsForValue().set("key1", "value1");
        redisTemplate.opsForValue().set("key2", "value2");

        // 提交事务
        redisTemplate.exec();
    } catch (Exception e) {
        // 回滚事务
        redisTemplate.discard();
    }
}

到了这里,关于Spring Boot中使用Redis的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot mybatis-plus dynamic-datasource 配置文件 相关依赖环境配置

    spring boot mybatis-plus dynamic-datasource 配置文件 相关依赖环境配置 ##yaml配置 ##父级pom.xml配置 ##子模块pom.xml配置 ##表结构 ##Test.java ##TestMapper.xml ##TestMapper.java ##TestService.java ##TestController ##项目启动类BootStrap.java ##浏览器访问 192.168.3.188:8866/yym/test/v1/test

    2024年02月02日
    浏览(35)
  • Spring Boot项目使用Maven打包并带上依赖

    在这篇博客中,介绍如何使用Maven将Spring Boot项目及其依赖项打包成一个可执行的jar文件。我们将使用Spring Boot的 spring-boot-maven-plugin 插件来完成这个任务。 在你的 pom.xml 文件中,你需要添加或更新 build 部分以使用 spring-boot-maven-plugin 插件。下面是一个示例配置: 在这个配置中

    2024年02月16日
    浏览(33)
  • spring boot集成redis,以及配置database不生效问题

    备注:记录一次spring-boot + redis 配置redis.database后,仍然使用db0默认库的情况。 完成以上配置,即redis已经正常集成进入项目。 完成以上配置,即可正常使用了       如果是单独仅集成redis,database 配置是肯定生效的,因为没有影响,这里记录一个遇到的情景:       即

    2024年01月19日
    浏览(31)
  • Spring Boot 使用 Redis

    Java Java Java Java Java Java 4,乱码的问题 自定义序列化工具 为什么要自定话应该序列化工具,因为他自己提供的不是很好,所以我们要自己定义一个,这样的话可以把java对象转化成json和字节码存入Redis 里,反序列化就是把json和字节码转化为java对象,泛型指定为  Object.class  表

    2024年04月08日
    浏览(27)
  • Spring Boot 中使用 Redis

    redis 安装、配置,启动:(此处以云服务器上进行说明) 1. 添加 pom 2. 添加配置 3. 导入 redis 工具类 PS:redis 工具类对常用操作进行了封装,可自行研究食用。 4. 测试

    2023年04月14日
    浏览(27)
  • Spring Boot中使用Redis

    目录 1.依赖 2.依赖关系 3.配置 4.RedisTemplate 5.基础操作 6.事务 maven依赖如下,需要说明的是,spring-boot-starter-data-redis里默认是使用lettuce作为redis客户端的驱动,但是lettuce其实用的比较少,我们常用的还是jedis作为客户端的驱动,所以这里排除掉lettuce,引入jedis: spring data redi

    2023年04月11日
    浏览(91)
  • spring boot中redis的使用

    首先,需要在 pom.xml 文件中添加Redis依赖: 这个依赖包含了Spring Data Redis,以及Jedis和Lettuce这两种Redis客户端的实现。 在SpringBoot项目中,可以通过在 application.properties 或 application.yml 文件中配置Redis连接信息。以下是一个示例: 其中, host 和 port 分别是Redis服务器的地址和端

    2024年02月09日
    浏览(23)
  • 2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

    前言:本文将介绍如何使用IDEA创建一个Spring Boot Hello项目,并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写,再到项目的构建和运行,一步步演示了整个过程。 🚀 作者简介:作为某云服务提供商的后端开发人员,我将在这里与大家简要分享一些实用的开发小

    2024年02月10日
    浏览(42)
  • Spring Boot - 结合 Redis 使用 Lua脚本

    在Spring Boot中整合Redis并使用Lua脚本: 添加Spring Boot和Redis的依赖: 首先,在Spring Boot项目的 pom.xml 文件中添加Spring Boot和Spring Data Redis的依赖: 配置Redis连接: 在 application.properties 或 application.yml 中配置Redis的连接信息,以及 redis 配置: RedisConfig.java

    2024年02月08日
    浏览(32)
  • 使用Spring Boot实现Redis键过期回调功能

    当使用Redis作为缓存或数据存储的时候,有时候需要在键过期时执行一些特定的操作,比如清除相关数据或发送通知。在Spring Boot中,可以通过实现 RedisMessageListener 接口来实现Redis键过期回调功能。下面是一个实现Redis键过期回调功能的Spring Boot应用的示例: 步骤一:引入依赖

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包