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实现的对称加密算法3DES定义与用法示例

    Java实现的对称加密算法3DES定义与用法示例 1. 什么是3DES 3DES(Triple DES)是一种对称加密算法,常用于数据加密、数字签名等场景。它是DES(Data Encryption Standard)算法的增强版,采取3次DES步骤进行加密,因此也被称为TDEA(Triple Data Encryption Algorithm)。 3DES…

    Java 2023年5月18日
    00
  • maven 打包项目的几种方式

    当我们使用Maven构建项目时,打包是非常重要的一部分。Maven支持多种打包方式,例如JAR、WAR、EAR等。本文将详细介绍Maven打包项目的几种方式,并提供两个示例。 1. JAR包 在Maven项目中使用maven-jar-plugin插件来生成JAR文件。当我们运行mvn package命令时,Maven将使用此插件来创建一个包含编译后的类文件和…

    Java 2023年5月20日
    00
  • Java 从网上下载文件的几种方式实例代码详解

    Java 从网上下载文件的几种方式实例代码详解 在Java编程中,有时候需要从网上下载文件,比如下载图片、音频、视频等资源文件。本文将详细讲解Java 从网上下载文件的几种方式,希望可以帮助大家实现这个需求。 1.使用URL类下载文件 使用URL类可以轻松地实现从网上下载文件。实现的过程如下: public static void downloadFile(…

    Java 2023年5月19日
    00
  • Spring Security基本架构与初始化操作流程详解

    Spring Security基本架构与初始化操作流程详解 介绍 Spring Security是一个基于Spring框架的安全性框架,处理了身份认证(authentication)与授权(authorization)等一系列的安全性问题,能够使我们更快更简单地集成到Spring应用程序中,保障应用程序的安全性。 本篇文章将会为您详细介绍Spring Sec…

    Java 2023年6月3日
    00
  • Java实现大数运算的实例代码

    下面是详细的Java实现大数运算的攻略: 什么是大数运算? 在Java中,整型(int)类型的最大值是2147483647,当需要运用的数远远超过这个数值的时候会出现数字溢出问题,需要使用大数运算。 大数运算是指运算的数字超出了标准数据类型的范围,因此需要通过特定的算法进行处理,以达到能够正确显示和计算数值的目的。 Java中的大数运算实现方法 Java中的…

    Java 2023年5月30日
    00
  • SpringBoot使用ApplicationEvent&Listener完成业务解耦

    下面将详细讲解“SpringBoot使用ApplicationEvent&Listener完成业务解耦”的完整攻略。 什么是ApplicationEvent&Listener? ApplicationEvent 和 ApplicationListener 是 Spring framework 为我们提供的一种应用级别的事件和监听机制,通过这种…

    Java 2023年5月19日
    00
  • spring boot集成shiro详细教程(小结)

    Spring Boot集成Shiro是一个非常常见的需求,它可以帮助我们更好地管理应用程序的安全性。以下是Spring Boot集成Shiro的完整攻略: 添加Shiro依赖 在Spring Boot中,我们可以使用Maven或Gradle来添加Shiro依赖。以下是一个Maven的示例: <dependency> <groupId>…

    Java 2023年5月15日
    00
  • 解决JSON.toJSONString首字母大小写的问题

    要解决 JSON.toJSONString 首字母大小写的问题,我们需要借助于 JSON 库中的 SerializerFeature 类。SerializerFeature 是 FastJSON 库提供的一个枚举类型,它定义了一些序列化选项。其中,SerializerFeature.WriteMapNullValue选项可以解决首字母大小写的问题。 具体实现…

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