项目集成篇:springboot集成redistemple实现自定义缓存,并且可以设置过期时间

在Spring Boot中集成Redis并使用`RedisTemplate`实现自定义缓存功能,同时能够设置缓存项的过期时间,可以通过以下步骤来完成。我们将创建一个服务层方法,该方法将使用`RedisTemplate`直接与Redis交互,并为每个缓存项设置特定的过期时间。

 

### 1. 添加依赖

 

确保你的`pom.xml`文件中有如下依赖:

 

```xml

<dependencies>

    <!-- Spring Boot Starter Web -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

 

    <!-- Spring Boot Starter Data Redis -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-data-redis</artifactId>

    </dependency>

 

    <!-- Lombok (Optional) for reducing boilerplate code -->

    <dependency>

        <groupId>org.projectlombok</groupId>

        <artifactId>lombok</artifactId>

        <optional>true</optional>

    </dependency>

 

    <!-- Test dependencies -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-test</artifactId>

        <scope>test</scope>

    </dependency>

</dependencies>

```

 

### 2. 配置Redis连接

 

编辑`application.properties`或`application.yml`文件以包含Redis的连接信息。

 

#### `application.properties`

```properties

# Redis server configuration

spring.redis.host=localhost

spring.redis.port=6379

```

 

#### 或者使用`application.yml`

```yaml

spring:

  redis:

    host: localhost

    port: 6379

```

 

### 3. 配置RedisTemplate Bean

 

为了更灵活地操作Redis,我们需要配置一个`RedisTemplate` bean,并指定序列化方式(如JSON序列化)以便更好地处理复杂对象。

 

```java

package com.example.config;

 

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.StringRedisSerializer;

 

@Configuration

public class RedisConfig {

 

    @Bean

    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<String, Object> template = new RedisTemplate<>();

        template.setConnectionFactory(connectionFactory);

        template.setKeySerializer(new StringRedisSerializer());

        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        return template;

    }

}

```

 

### 4. 创建自定义缓存服务

 

接下来,创建一个服务类,它将使用`RedisTemplate`来执行缓存操作,并为每个缓存项设置过期时间。

 

```java

package com.example.service;

 

import com.example.model.User;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.stereotype.Service;

 

import java.util.concurrent.TimeUnit;

 

@Service

@Slf4j

public class CustomCacheService {

 

    private static final String CACHE_PREFIX = "custom_cache:";

 

    @Autowired

    private RedisTemplate<String, Object> redisTemplate;

 

    /**

     * 将对象存储到Redis缓存,并设置过期时间

     */

    public void cacheObject(String key, Object value, long timeout, TimeUnit timeUnit) {

        String cacheKey = CACHE_PREFIX + key;

        log.info("Caching object with key: {}", cacheKey);

        redisTemplate.opsForValue().set(cacheKey, value, timeout, timeUnit);

    }

 

    /**

     * 从Redis缓存中获取对象

     */

    public Object getObjectFromCache(String key) {

        String cacheKey = CACHE_PREFIX + key;

        log.info("Fetching object from cache with key: {}", cacheKey);

        return redisTemplate.opsForValue().get(cacheKey);

    }

 

    /**

     * 删除缓存中的对象

     */

    public void evictObjectFromCache(String key) {

        String cacheKey = CACHE_PREFIX + key;

        log.info("Evicting object from cache with key: {}", cacheKey);

        redisTemplate.delete(cacheKey);

    }

}

```

 

### 5. 使用自定义缓存服务

 

现在可以在控制器或其他服务层中使用`CustomCacheService`来进行缓存操作了。

 

```java

package com.example.controller;

 

import com.example.model.User;

import com.example.service.CustomCacheService;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

 

@RestController

@RequestMapping("/api/cache")

@Slf4j

public class CacheController {

 

    @Autowired

    private CustomCacheService customCacheService;

 

    @PostMapping("/store")

    public String storeUserInCache(@RequestParam String key, @RequestBody User user, @RequestParam long expireSeconds) {

        customCacheService.cacheObject(key, user, expireSeconds, TimeUnit.SECONDS);

        return "User cached successfully!";

    }

 

    @GetMapping("/fetch/{key}")

    public Object fetchUserFromCache(@PathVariable String key) {

        return customCacheService.getObjectFromCache(key);

    }

 

    @DeleteMapping("/evict/{key}")

    public String evictUserFromCache(@PathVariable String key) {

        customCacheService.evictObjectFromCache(key);

        return "User evicted from cache!";

    }

}

```

 

### 6. 创建实体类(如果需要)

 

根据你的需求创建实体类,例如`User.java`:

 

```java

package com.example.model;

 

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

 

@Data

@NoArgsConstructor

@AllArgsConstructor

public class User {

    private Integer id;

    private String name;

    private String email;

}

```

 

### 注意事项

- 确保你的Redis服务器正在运行并且可以从应用程序访问。

- 如果你在本地开发,请确保Redis服务已正确安装并在默认端口6379上运行。

- 根据实际情况调整包名、路径以及其他细节。

- 对于生产环境,建议配置Redis连接池、密码认证以及持久化选项等。

 

通过这种方式,你可以利用`RedisTemplate`实现更加灵活和强大的缓存管理,包括设置每个缓存项的过期时间。如果有任何问题或需要进一步的帮助,请随时提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie&#xff0c;token&#xff0c;session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤&#xff0c;⽐如⼏万条数据&#xff0c;放在⼀个⻚⾯显⽰的话显然不友好&#xff0c;这时候就需要采⽤分⻚…

CentOS 离线环境安装 Python2

CentOS离线环境安装Python2&#xff0c;可能在编译源码时因缺少各种依赖而无法编译成功。 此时可以找一台有网的电脑&#xff08;可以是Linux虚拟机&#xff09;&#xff0c;使用yum管理器的打包命令将Python2的安装包及依赖全部打包成rpm&#xff0c;然后拷贝到离线机器上安装…

ED6H系列FPGA口袋实验室

一、产品概述 ED6H系列FPGA口袋实验室是中科亿海微自主研发的基于“FPGA在线教学平台”的教学实践工具&#xff0c;专为高校电子相关专业师生打造&#xff0c;旨在为高校师生创造更具创新性与高效性的教学场景。具有高集成度、小巧便携、可扩展设计及自主可控等特点。本系列共…

实验三:Mybatis-动态 SQL

目录&#xff1a; 一 、实验目的&#xff1a; 通过 mybatis 提供的各种标签方法实现动态拼接 sql 二 、预习要求&#xff1a; 预习 if、choose、 when、where 等标签的用法 三、实验内容&#xff1a; 根据性别和名字查询用户使用 if 标签改造 UserMapper.xml使用 where 标签进行…

pytorch加载预训练权重失败

问题 给当前模型换了个开源的主干网络&#xff0c;并且删除了某些层后&#xff0c;但是发现预训练权重一直加载不上。strict为True时加载报错&#xff0c;strict为False时又什么都加载不上&#xff0c;然后不知道哪里出问题了。 解决 当strict为False时&#xff0c;load_sta…

python 笔记之线程同步和死锁

同步&#xff1a; 共享数据&#xff1a; 如果多个线程共同对某个数据修改&#xff0c;则可能出现不可预测的结果&#xff0c;为了保证数据的正确性&#xff0c;需要对多个数据进行同步 同步&#xff1a;一个一个的完成&#xff0c;一个做完另一个才能进来 效率会降低 使用Thre…

Python爬虫——猫眼电影

用python中requests库爬取猫眼电影信息并保存到csv文件中 猫眼专业版 爬取界面 效果预览 代码 import requests import jsonurl1https://piaofang.maoyan.com/dashboard-ajax?orderType0&uuid1938bd58ddac8-02c2bbe3b009ed-4c657b58-144000-1938bd58ddac8&timeStamp…

python 三钱筮法项目开发

三钱筮法项目技术说明 1. 技术栈 GUI框架: CustomTkinter 现代化的Tkinter扩展提供美观的界面组件支持主题定制 数据存储: JSON 卦象数据: gua_info.json记忆数据: memory.json易经解释: detail.json 图像处理: PIL (Python Imaging Library) 处理图标和图片资源 2. 主要功…

yagmail邮件发送库:如何用Python实现自动化邮件营销?

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

NLP 的研究任务

自然语言处理&#xff08;Natural Language Processing, NLP&#xff09; NLP 的研究任务 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;1. **机器翻译**2. **情感分析**3. **智能问答**4. **文摘生成**5. **文本分类**6. **舆论分析**7. **知识图谱*…

无人机的计算机仿真模拟控制

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月3日10点24分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

vue+mars3d给影像底图叠加炫酷效果

话不多说&#xff0c;直接上效果图&#xff1a; 在这里墙体其实是有一个不太明显的流动效果 实现方式&#xff1a;这里我使用了PolylineEntityWallPrimitive&#xff0c;开始我用的是polygonEntity但是发现实现效果并不好&#xff0c;所有直接改用了线 map.vue文件&#xff1…

浅谈volatile

volatile有三个特性&#xff1a; &#xff08;1&#xff09;可见性 &#xff08;2&#xff09;不保证原子性 &#xff08;3&#xff09;禁止指令重排 下面我们一一介绍 &#xff08;一&#xff09;可见性 volatile的可见性是说共享变量只要修改&#xff0c;就可以被其他线…

Redis自学之路—高级特性(实现消息队列)(七)

目录 简介 Redis的Key和Value的数据结构组织 全局哈希表 渐进式rehash 发布和订阅 操作命令 publish 发布消息 subscribe 订阅消息 psubscribe订阅频道 unsubscribe 取消订阅一个或多个频道 punsubscribe 取消订阅一个或多个模式 查询订阅情况-查看活跃的频道 查询…

Java-09 深入浅出 MyBatis - 注解开发 注解映射 基本介绍 与 一对一模型

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

【k8s】kubelet 的相关证书

在 Kubernetes 集群中&#xff0c;kubelet 使用的证书通常存放在节点上的特定目录。这些证书用于 kubelet 与 API 服务器之间的安全通信。具体的位置可能会根据你的 Kubernetes 安装方式和配置有所不同&#xff0c;下图是我自己环境【通过 kubeadm 安装的集群】中的kubelet的证…

ES语法(一)概括

一、语法 1、请求方式 Elasticsearch&#xff08;ES&#xff09;使用基于 JSON 的查询 DSL&#xff08;领域特定语言&#xff09;来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成&#xff1a; curl -X<VERB> <PROTOCOL>://&l…

Redis开发实践

在现代开发中&#xff0c;Redis 已经成为一种重要的高性能内存数据库。无论是作为缓存、消息队列还是排行榜的实现工具&#xff0c;它都表现出了极高的性能和灵活性。本文将带你了解 Redis 的基本概念&#xff0c;并通过 Python 示例代码实现 Redis 的核心功能。 文章目录 1. R…

【el-table】表格后端排序

在需要排序的列添加属性 sortable&#xff0c;后端排序&#xff0c;需将sortable设置为custom 如果需要自定义轮转添加 sort-orders 属性&#xff0c;数组中的元素需为以下三者之一&#xff1a;ascending 表示升序&#xff0c;descending 表示降序&#xff0c;null 表示还原为原…

Linux迁移gitlab容器

Linux迁移gitlab容器并配置 迁移gitlab容器本文分两部分&#xff0c;第一步在新服务器上安装相同版本的gitlab容器&#xff0c;可以在确定gitlab版本之后直接在docker上拉取&#xff0c;我这里直接从原服务器上将镜像打包加载到新服务器上。第二步从原服务器上操作备份文件&am…