Spring Boot项目利用Redis实现集中式缓存实例

让我来详细讲解Spring Boot项目如何利用Redis实现集中式缓存实例。

什么是Redis

Redis是一个开源,高性能的非关系型内存数据库,可用于存储键值对、列表、集合、有序集合等数据类型。Redis支持多种数据结构和高级功能,例如事务、Pub/Sub和Lua脚本等。

Spring Boot中使用Redis

Spring Boot对Redis提供了完整的支持,Spring Data Redis为我们提供了操作Redis的简化API,底层使用了连接池技术,可实现更高效的连接管理。

步骤1:添加Spring Boot和Redis依赖

首先,在pom.xml中添加Spring Boot和Redis依赖,示例如下:

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

步骤2:配置Redis连接

接下来,在application.yml中配置Redis连接信息,示例如下:

spring:
  redis:
    host: 127.0.0.1 # Redis服务器地址
    port: 6379 # Redis服务器端口号
    password: # Redis服务器密码(若没有设置密码,则不需要此项配置)
    database: 0 # Redis数据库编号

步骤3:定义Redis缓存配置

继续在application.yml中定义Redis缓存配置,示例如下:

spring:
  cache:
    type: redis
  redis:
    cache:
      time-to-live: 60s # 缓存时间为60秒

步骤4:添加@Cacheable注解

在需要缓存的方法上添加@Cacheable注解,示例如下:

@Service
public class UserServiceImpl implements UserService {

    ...

    @Override
    @Cacheable(value = "user", key = "#id")
    public User getById(Integer id) {
        log.info("getById: id={}", id);
        return userRepository.getById(id);
    }

    ...
}

其中,@Cacheable注解中的value指定缓存名称,key指定缓存键值,#id表示使用方法参数id作为缓存键值。当执行该方法时,如果缓存中存在该键值对应的数据,则直接返回缓存中的数据,否则执行方法,并将方法执行结果缓存到Redis中。

示例1:Spring Boot项目利用Redis缓存用户信息

以下是一个Spring Boot项目利用Redis缓存用户信息的示例代码:

@Service
public class UserServiceImpl implements UserService {

    private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public User save(User user) {
        log.info("save: user={}", user);
        User savedUser = userRepository.save(user);
        redisTemplate.opsForHash().put("user", user.getId().toString(), savedUser);
        return savedUser;
    }

    @Cacheable(value = "user", key = "#id")
    public User getById(Integer id) {
        log.info("getById: id={}", id);
        User user = (User) redisTemplate.opsForHash().get("user", id.toString());
        if (user != null) {
            return user;
        }
        user = userRepository.getById(id);
        if (user != null) {
            redisTemplate.opsForHash().put("user", id.toString(), user);
        }
        return user;
    }

}

在上述示例代码中,使用RedisTemplate实现Redis操作,首先在save方法中向Redis中添加数据,getById方法中查询Redis缓存,如果存在则直接返回缓存中的数据,否则查询数据库,并将查询结果缓存到Redis中。在getById方法中,使用了@Cacheable注解,Spring会自动将返回结果缓存到Redis中。

示例2:Spring Boot项目利用Redis实现循环队列

以下是一个Spring Boot项目利用Redis实现循环队列的示例代码:

@Component
public class RedisQueue {

    private static final Logger log = LoggerFactory.getLogger(RedisQueue.class);

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 入队列
     *
     * @param queueName 队列名
     * @param value     入队值
     */
    public void enqueue(String queueName, String value) {
        redisTemplate.opsForList().rightPush(queueName, value);
    }

    /**
     * 出队列
     *
     * @param queueName 队列名
     * @return 出队值
     */
    public String dequeue(String queueName) {
        return redisTemplate.opsForList().leftPop(queueName);
    }

    /**
     * 获取队列长度
     *
     * @param queueName 队列名
     * @return 队列长度
     */
    public Long length(String queueName) {
        return redisTemplate.opsForList().size(queueName);
    }

    /**
     * 获取队列中指定范围内的值
     *
     * @param queueName 队列名
     * @param start     起始位置
     * @param end       终止位置
     * @return 值列表
     */
    public List<String> range(String queueName, long start, long end) {
        return redisTemplate.opsForList().range(queueName, start, end);
    }

    /**
     * 获取队列中所有值
     *
     * @param queueName 队列名
     * @return 值列表
     */
    public List<String> getAll(String queueName) {
        return range(queueName, 0, -1);
    }

}

在上述示例代码中,使用了RedisTemplate实现Redis操作,实现了循环队列的常见操作,如入队列、出队列、获取队列长度、获取队列中指定范围内的值和获取队列中所有值。可以根据实际需求自定义队列元素的数据类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot项目利用Redis实现集中式缓存实例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java如何实现长连接

    实现长连接是客户端和服务器端保持连接一段时间,而不是每次请求/响应都建立/关闭一个TCP连接。这样可以减少建立连接的成本,提高性能和效率。 Java 实现长连接可以通过以下三种方式: 1.使用 Java Socket 实现: 在 Java 中可以使用 Socket 编程实现长连接。客户端和服务器端建立一次连接之后,多次交换数据,直到连接被关闭。 示例代码: …

    Java 2023年5月18日
    00
  • JDK19新特性使用实例详解

    JDK19新特性使用实例详解 本文将详细讲解JDK19新特性的使用实例,并给出两条具体的示例说明。 1. Lambda表达式 Lambda表达式是JDK8引入的一个重要特性,它可以使代码更加简洁、易读。我们来看一个实例: // 普通的排序方法 Collections.sort(list, new Comparator<String>() { @O…

    Java 2023年5月26日
    00
  • javap命令的使用技巧

    当你需要了解Java程序在编译后生成的字节码时,javap命令是一个很有用的工具。它能够反编译.class文件并输出字节码指令的信息,甚至还能够显示源代码中的行号和本地变量信息。接下来,我们将详细讲解javap命令的使用技巧,以便你能够充分利用这个强大的工具。 命令格式 首先,我们来介绍一下javap命令的基本格式: javap [options] clas…

    Java 2023年5月20日
    00
  • Apache Kafka 分区重分配的实现原理解析

    Apache Kafka 分区重分配的实现原理解析 简介 Apache Kafka 是一个分布式的流数据处理平台,其中重要的一部分是分区(partition)机制。Kafka 的一个主题(topic)可以被分成多个分区,每个分区都可以被分配到不同的网络节点(broker)上进行处理。然而,Kafka 还需要在某些场景下重新分配分区。例如,网络节点加入或退出集…

    Java 2023年6月2日
    00
  • java动态口令登录实现过程详解

    Java动态口令登录实现过程详解 什么是动态口令 动态口令是指使用时间限制的口令。 不同于常规的静态口令,动态口令需要设备生成一次性密码,具有更高的安全性。 动态口令登录的实现过程 用户在登录页面输入用户名和密码,提交表单给后端服务器。 后端服务器接收到表单后,根据用户名查询数据库中存储的该用户的密钥。 后端服务器随机生成一个6位数的随机数,并使用密钥生成一…

    Java 2023年5月26日
    00
  • Java针对封装数组的简单复杂度分析方法

    当我们使用Java数组实现数据结构时,需要对数组的封装进行复杂度分析。下面是Java针对封装数组的简单复杂度分析方法的完整攻略: 1. 封装数组的简单介绍 Java数组是一种用于存储相同类型元素的容器,可以被用来实现一个简单队列或栈,也可以被用于排序算法中。然而,在实际应用中,直接使用数组可能会引起一些问题,如:数组的大小是固定的,在插入和删除操作时需要移动…

    Java 2023年5月26日
    00
  • Maven之pom.xml文件中的Build配置解析

    针对”POM文件的 Build 配置”这个话题,我们来详细讲解一下。 Build 配置是什么? 在 Maven 项目中,Build 配置囊括了用于构建、测试、打包、部署等一系列操作的配置信息。这些信息都集中在项目根目录下的 pom.xml 文件中的 <build> 标签中。它包含了如下内容: 项目源代码目录 输出目录 编译器插件 资源文件 测试相…

    Java 2023年6月15日
    00
  • Java进阶学习:jar打包详解

    Java进阶学习:jar打包详解 什么是jar包? Java Archive文件,简称jar包,是Java中一种用于打包、压缩Java类文件、图片、配置文件等资源的标准格式。它能够将多个相关的Java类和其它文件捆绑成一个独立的可执行程序,方便部署和传输。 jar包可以用于多种场合,比如: 将代码打包成jar文件,以便分发代码,并方便其他程序调用 建立插件体…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部