Spring Boot 应用程序中集成 Redis 并实现存储读取字符串或者复杂对象

news/2024/11/15 17:40:35/

步骤如下:

1. 添加依赖

确保你的 pom.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><!-- Jackson for JSON serialization/deserialization --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- Lombok (可选) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>
</dependencies>

2. 配置 Redis

在 application.properties 文件中配置 Redis 连接信息:

spring.redis.host=localhost
spring.redis.port=6379

3. 配置 RedisTemplate

创建一个配置类来配置 RedisTemplate,以便支持多种数据类型的序列化和反序列化:

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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;@Configuration
public class RedisConfig {@Bean@Beanpublic RedisTemplate<String, Object> redisTemplate() {RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(factory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);//LocalDatetime序列化JavaTimeModule timeModule = new JavaTimeModule();timeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));timeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));timeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));timeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);om.registerModule(timeModule);jackson2JsonRedisSerializer.setObjectMapper(om);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);// hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}

4. 创建 Redis 服务类

创建一个服务类来封装 Redis 操作,支持多种数据类型:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.Map;@Service
public class RedisService {private final RedisTemplate<String, Object> redisTemplate;@Autowiredpublic RedisService(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}// 存储字符串public void setString(String key, String value) {redisTemplate.opsForValue().set(key, value);}// 获取字符串public String getString(String key) {return (String) redisTemplate.opsForValue().get(key);}// 存储对象public void setObject(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 获取对象public <T> T getObject(String key, Class<T> clazz) {return clazz.cast(redisTemplate.opsForValue().get(key));}// 存储列表public void setList(String key, List<Object> list) {redisTemplate.opsForList().rightPushAll(key, list);}// 获取列表public List<Object> getList(String key) {return redisTemplate.opsForList().range(key, 0, -1);}// 存储集合public void setSet(String key, Set<Object> set) {redisTemplate.opsForSet().add(key, set.toArray());}// 获取集合public Set<Object> getSet(String key) {return redisTemplate.opsForSet().members(key);}// 存储哈希表public void setHash(String key, Map<Object, Object> map) {redisTemplate.opsForHash().putAll(key, map);}// 获取哈希表public Map<Object, Object> getHash(String key) {return redisTemplate.opsForHash().entries(key);}// 删除键public void deleteKey(String key) {redisTemplate.delete(key);}
}

5. 创建控制器

创建一个控制器来暴露 REST API,以便客户端可以调用 Redis 操作:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.Arrays;
import java.util.HashMap;@RestController
@RequestMapping("/api/redis")
public class RedisController {private final RedisService redisService;@Autowiredpublic RedisController(RedisService redisService) {this.redisService = redisService;}// 设置字符串@PostMapping("/setString")public String setString(@RequestParam String key, @RequestParam String value) {redisService.setString(key, value);return "Value set successfully";}// 获取字符串@GetMapping("/getString")public String getString(@RequestParam String key) {return redisService.getString(key);}// 设置对象@PostMapping("/setObject")public String setObject(@RequestParam String key, @RequestBody Object value) {redisService.setObject(key, value);return "Object set successfully";}// 获取对象@GetMapping("/getObject")public Object getObject(@RequestParam String key) {return redisService.getObject(key, Object.class);}// 设置列表@PostMapping("/setList")public String setList(@RequestParam String key, @RequestBody List<Object> list) {redisService.setList(key, list);return "List set successfully";}// 获取列表@GetMapping("/getList")public List<Object> getList(@RequestParam String key) {return redisService.getList(key);}// 设置集合@PostMapping("/setSet")public String setSet(@RequestParam String key, @RequestBody Set<Object> set) {redisService.setSet(key, set);return "Set set successfully";}// 获取集合@GetMapping("/getSet")public Set<Object> getSet(@RequestParam String key) {return redisService.getSet(key);}// 设置哈希表@PostMapping("/setHash")public String setHash(@RequestParam String key, @RequestBody Map<Object, Object> map) {redisService.setHash(key, map);return "Hash set successfully";}// 获取哈希表@GetMapping("/getHash")public Map<Object, Object> getHash(@RequestParam String key) {return redisService.getHash(key);}// 删除键@DeleteMapping("/deleteKey")public String deleteKey(@RequestParam String key) {redisService.deleteKey(key);return "Key deleted successfully";}
}

6. 启动类

创建一个启动类来启动 Spring Boot 应用程序:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RedisApplication {public static void main(String[] args) {SpringApplication.run(RedisApplication.class, args);}
}

http://www.ppmy.cn/news/1547245.html

相关文章

Spring Plugin与策略模式:打造动态可扩展的应用

目录 一、策略模式 二、Spring Plugin 2.1 Spring Plugin 实现策略模式开发 2.2 策略模式优缺点 三、Spring Plugin 原理 一、策略模式 策略模式是一种设计模式&#xff0c;它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个…

表的数据结构和常见操作

在计算机科学中&#xff0c;表数据结构是一种用于组织和存储数据的方式&#xff0c;它具有行和列的形式&#xff0c;类似于电子表格或数据库表。表数据结构可以用于多种用途&#xff0c;具体取决于实现和使用场景。以下是几种常见的表数据结构&#xff1a; ### 1. 数组&#x…

Linux Kernel Programming 2

目录 书写内核框架 起手我们需要理解的是&#xff1a;用户态和内核态 库和系统调用 API 内核空间组件 探索 LKM&#xff08;Linux Kernel Module体系&#xff09; LKM 框架 内核源代码树中的内核模块 modinfo 动手&#xff01;写年轻人的第一个内核模块程序 先试试看&…

NFS-Ganesha 核心架构解读

NFSv4 简要概述 NFS 这个协议( NFSv2 )最初由 Sun Microsystems 在 1984 年设计提出&#xff0c;由于存在一些不足&#xff0c;因此在随后由几家公司联合推出了 NFSv3。到了 NFSv4 时&#xff0c;开发完全由 IETF 主导&#xff0c;设计目标是&#xff1a; 提高互联下的 NFS 访…

to_sql报错not all arguments converted during string formatting

报错&#xff1a; DatabaseError: Execution failed on sql SELECT name FROM sqlite_master WHERE typetable AND name?;: not all arguments converted during string formattingb 报错的代码如下&#xff1a; import pymysql import pandas as pd con pymysql.connect(…

c文件的编译,汇编,基础知识

文章目录 前言一、预编译二、编译阶段三、汇编1&#xff0c; objdump的用法2&#xff0c;objdump 举例objdump -s hello.o 输出&#xff08;节内容&#xff09; 四&#xff0c;代码段 前言 #include <stdio.h> int main(){printf("hello, world\n");}从这个最…

矩阵的对角化特征值分解

矩阵对角化和特征值分解实际上描述的是同一个过程的不同方面。矩阵对角化 强调的是通过相似变换将矩阵 A A A转化为对角矩阵 D D D。特征值分解 强调的是如何通过矩阵的特征值和特征向量来实现这种对角化。 矩阵对角化 矩阵对角化是指将一个方阵 A A A通过相似变换转化为一个…

android webview常见内容

WebView 是 Android 系统中用于展示网页内容的一个组件。 Android 4.4 之前&#xff0c; 使用 WebKit 渲染引擎&#xff0c;之后使用了 Chromium 的内核 url 加载流程 首先&#xff0c;通过loadUrl()方法或者loadData()等方法来触发加载。当调用这些方法后&#xff0c;WebVie…