首页 > 数据库 >Spring Boot 集成 Redis

Spring Boot 集成 Redis

时间:2023-11-12 16:32:14浏览次数:30  
标签:Boot Spring Redis key public redisTemplate

前言

随着Web应用的发展和数据量的增加,数据存储方案不断更新。Redis作为一个内存NoSQL数据库随着其高效的性能和易用性,越来越受到开发者的青睐。本文笔者将介绍如何在Spring Boot中集成Redis以及如何在实际应用中使用Redis。

摘要

本文旨在介绍如何在Spring Boot中集成Redis,并针对实际应用场景进行案例分析。本文首先介绍了Redis的基本概念和原理,然后详细阐述了如何在Spring Boot中集成Redis。接着针对实际应用场景,给出了相应的案例分析和优缺点分析。最后,笔者给出了全文的总结和结论。

简介

Redis简介

Redis是一个高性能的key-value存储系统,与其他key-value存储系统不同的是Redis支持多种数据结构,如字符串,散列,列表,集合等。Redis以其高效的性能和易用性,被广泛应用于缓存、计数器、消息队列、排行榜等领域。

Spring Boot简介

Spring Boot是一款基于Spring框架的快速开发框架,采用约定优于配置的方式,极大地简化了Spring应用的开发和部署。Spring Boot集成了大量常用的技术和框架,如Spring MVC、MyBatis、JPA等,很大程度上减少了开发人员需要关注的细节,使开发者可以专注于业务逻辑的实现。

源代码解析

pom.xml配置

在Spring Boot应用中集成Redis首先需要在pom.xml中添加相关的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Redis配置

Spring Boot集成Redis需要配置RedisTemplate,RedisConnectionFactory以及Redis的连接信息。

@Configuration
public class RedisConfig {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
        config.setHostName("localhost");
        config.setPort(6379);
        return new JedisConnectionFactory(config);
    }

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

}

Redis常用操作

@Autowired
private RedisTemplate<String, String> redisTemplate;

/**
 * Redis String操作 - set、get、del
 */
public void stringOperations() {
    // set操作
    redisTemplate.opsForValue().set("key", "value");

    // get操作
    String value = redisTemplate.opsForValue().get("key");

    // del操作
    redisTemplate.delete("key");
}

/**
 * Redis List操作 - lpush、rpush、lpop、rpop、lrange
 */
public void listOperations() {
    // lpush操作
    redisTemplate.opsForList().leftPush("list_key", "value1");
    redisTemplate.opsForList().leftPush("list_key", "value2");

    // rpush操作
    redisTemplate.opsForList().rightPush("list_key", "value3");
    redisTemplate.opsForList().rightPush("list_key", "value4");

    // lpop操作
    String leftValue = redisTemplate.opsForList().leftPop("list_key");

    // rpop操作
    String rightValue = redisTemplate.opsForList().rightPop("list_key");

    // lrange操作
    List<String> rangeList = redisTemplate.opsForList().range("list_key", 0, -1);
}

/**
 * Redis Set操作 - sadd、srem、smembers
 */
public void setOperations() {
    // sadd操作
    redisTemplate.opsForSet().add("set_key", "value1", "value2", "value3");

    // srem操作
    redisTemplate.opsForSet().remove("set_key", "value1");

    // smembers操作
    Set<String> members = redisTemplate.opsForSet().members("set_key");
}

/**
 * Redis Hash操作 - hset、hmset、hget、hmget、del
 */
public void hashOperations() {
    // hset操作
    redisTemplate.opsForHash().put("hash_key", "field1", "value1");

    // hmset操作
    Map<String, String> map = new HashMap<>();
    map.put("field1", "value1");
    map.put("field2", "value2");
    redisTemplate.opsForHash().putAll("hash_key", map);

    // hget操作
    String hashValue = (String) redisTemplate.opsForHash().get("hash_key", "field1");

    // hmget操作
    List<String> hashValues = redisTemplate.opsForHash().multiGet("hash_key", Arrays.asList("field1", "field2"));

    // del操作
    redisTemplate.opsForHash().delete("hash_key", "field1");
}

应用场景案例

缓存

Redis最常用的功能之一就是作为缓存服务器,将热点数据缓存在内存中,以便快速访问。在Spring Boot中使用Redis作为缓存服务器可以使用Spring Cache抽象,只需要简单地配置一下Redis连接信息和相关的缓存注解即可。

@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {

    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return (target, method, params) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(method.getName());
            for (Object obj : params) {
                sb.append(obj.toString());
            }
            return sb.toString();
        };
    }

    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
        RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        return redisTemplate;
    }

    @Bean
    public CacheManager cacheManager(RedisTemplate<String, Serializable> redisTemplate) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(1));
        return RedisCacheManager.builder(redisTemplate.getConnectionFactory())
                .cacheDefaults(redisCacheConfiguration).build();
    }
}

在需要缓存的方法上添加缓存注解即可。

@Cacheable(value = "user", key = "#id")
public User getUserById(String id) {
    return userDao.selectById(id);
}

排行榜

Redis支持有序集合数据类型,能够在插入数据的同时按照指定的排序方式进行排序,非常适用于一些排行榜或者比赛得分等应用场景。

public void addScore(String member, double score) {
    redisTemplate.opsForZSet().add("score", member, score);
}

public List<String> getTop(int n) {
    Set<String> set = redisTemplate.opsForZSet().reverseRange("score", 0, n - 1);
    if (set != null) {
        return new ArrayList<>(set);
    }
    return null;
}

优缺点分析

优点

  1. 高效性:Redis作为一个内存数据库,读写速度非常快,能够满足高并发的应用场景。
  2. 易用性:Redis支持多种数据结构,操作简单,开发效率高。
  3. 可扩展性:Redis支持主从同步和集群部署,能够满足应用在数据存储方面的扩展需求。
  4. 高可靠性:Redis支持RDB和AOF两种持久化方式,能够保证数据的可靠性。

缺点

  1. 没有事务支持:Redis虽然支持multi、exec等命令,但是它并不是真正的事务,无法保证ACID的一致性。
  2. 存储容量受限:Redis的存储容量受限于物理内存的大小,当数据量过大时,存储会受到限制。
  3. 数据丢失风险:Redis虽然支持持久化,但是在某些情况下,如硬件损坏、断电等异常情况下,数据仍有丢失的风险。

总结

本文介绍了如何在Spring Boot中集成Redis,并针对实际应用场景给出了案例分析和优缺点分析。Redis作为一个高性能、易用的key-value存储系统,在Web应用中有着广泛的应用场景。在使用Redis时需要注意数据丢失风险,并针对具体应用场景选择不同的数据结构和持久化方式。

标签:Boot,Spring,Redis,key,public,redisTemplate
From: https://blog.51cto.com/u_15700751/8330045

相关文章

  • 虚拟机安装redis相关步骤
    1、官网下载地址--https://download.redis.io2、下载rediswgethttp://download.redis.io/releases/redis-5.0.7.tar.gz3、将文件解压缩tar-zvxfredis-5.0.7.tar.gz4、编译redis//在解压文件的目录下执行make命令cdredis-5.0.7make几个文件也都成功出现啦:......
  • 虚拟机下载redis时使用make命令报错
    问题描述使用make命令编译redis时,发现这里一直报错~~问题解决先下载c++编译器:yum-yinstallgcc-c++我是又重新解压了文件,再次使用make命令,就ok啦~......
  • 性能测试复习准备——linux环境下安装redis(7.0.5)
    参考博客:https://blog.csdn.net/qq_52227892/article/details/130649748  参考博客:https://www.cnblogs.com/756623607-zhang/p/17412640.html  使用的redis版本下载:本文中安装的版本为:http://download.redis.io/releases/redis-7.0.5.tar.gz  ===================......
  • SpringBoot3.x使用Swagger
    SpringBoot3.x使用Swagger当前开发主流是前后端分离,有完整文档可以使团队配合更加流畅Spring生态中通常使用springfox,但是当前springfox并不支持SpringBoot3.x版本使用替代产品:Springdoc.orgSpringdoc在v1.7.0版本之后不支持SpringBoot2.x和1.x!!!项目启动后,Swagger默认地址......
  • org.springframework.context.ApplicationContextException: Failed to start bean 'd
    这个原因是高版本SpringBoot整合swagger造成的我的项目是2.7.8swagger版本是3.0.0就会出现上面的报错解决方式:1.配置WebMvcConfigurer.javaimportorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.Res......
  • redis中set中获取对应的key值
    如何在Redis中获取Set的对应Key值前言Redis是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件。在Redis中,Set是一种无序且唯一的数据结构,它可以存储多个不重复的元素。本篇文章将教会你如何在Redis中获取Set数据结构中的对应Key值。流程图journeytitle整......
  • redis怎么查被拒连接数
    Redis如何查找拒绝连接数在Redis中,拒绝连接数是指由于某些原因导致连接被服务器拒绝的数量。这些原因可能包括达到最大连接数限制、认证失败等。本文将介绍如何使用RedisCLI和Redis监控工具来查找拒绝连接数。方法一:RedisCLIRedisCLI是Redis的命令行界面工具,可以通过以下步骤......
  • redis修改端口后怎么登录
    项目方案:Redis修改端口后的登录方案1.简介Redis是一个开源的内存数据库,常用于缓存、消息队列和实时数据分析等场景。在使用Redis时,可能需要修改默认端口,以增加安全性。本文将介绍如何修改Redis端口后进行登录的方案。2.修改Redis端口默认情况下,Redis使用6379端口。为了修改端......
  • redis生成连续的
    使用Redis生成连续数字1.简介在开发中,有时需要生成连续的数字,比如生成订单号、生成用户ID等。使用Redis的INCR命令可以很方便地实现生成连续数字的功能。本文将向你详细介绍如何使用Redis生成连续数字。2.实现步骤下面是使用Redis生成连续数字的步骤:步骤操作1.连......
  • redis删除列表元素
    如何实现Redis删除列表元素引言在使用Redis时,经常会遇到需要删除列表中的元素的情况。本文将介绍如何使用Redis命令实现删除列表元素的操作,并提供详细的步骤和代码示例来帮助刚入行的开发者理解和掌握这个过程。整体流程删除Redis列表中的元素通常需要以下几个步骤:连接到Redi......