redis 缓存使用

news/2024/12/24 7:32:15/

工具类

package org.springblade.questionnaire.redis;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;import java.util.Map;
import java.util.concurrent.TimeUnit;@Service
public class RedisService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;private final ObjectMapper objectMapper = new ObjectMapper();// 存储对象到Redispublic void setObjectToRedis(String key, Object obj) {try {// 将对象序列化为JSON字符串String value = objectMapper.writeValueAsString(obj);// 使用StringRedisTemplate将JSON字符串存储到RedisstringRedisTemplate.opsForValue().set(key, value);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to serialize object to JSON", e);}}// 从Redis获取对象public <T> T getObjectFromRedis(String key, Class<T> clazz) {String json = stringRedisTemplate.opsForValue().get(key);if (json != null) {try {// 将JSON字符串反序列化为对象return objectMapper.readValue(json, clazz);} catch (Exception e) {throw new RuntimeException("Failed to deserialize JSON to object", e);}}return null;}// 存储对象数组到Redispublic <T> void setArrayToRedis(String key, T[] array) {try {// 将对象数组序列化为JSON字符串String value = objectMapper.writeValueAsString(array);// 使用StringRedisTemplate将JSON字符串存储到RedisstringRedisTemplate.opsForValue().set(key, value);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to serialize object array to JSON", e);}}// 从Redis获取对象数组@SuppressWarnings("unchecked")public <T> T[] getArrayFromRedis(String key, Class<T[]> clazz) {String json = stringRedisTemplate.opsForValue().get(key);if (json != null) {try {// 将JSON字符串反序列化为对象数组return objectMapper.readValue(json, clazz);} catch (Exception e) {throw new RuntimeException("Failed to deserialize JSON to object array", e);}}return null;}// 存储对象到Redis并设置过期时间public void setObjectToRedisWithTime(String key, Object obj, long timeout, TimeUnit timeUnit) {try {// 将对象序列化为JSON字符串String value = objectMapper.writeValueAsString(obj);// 使用StringRedisTemplate将JSON字符串存储到Redis并设置过期时间stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to serialize object to JSON", e);}}// 存储对象数组到Redis并设置过期时间public <T> void setArrayToRedisWithTime(String key, T[] array, long timeout, TimeUnit timeUnit) {try {// 将对象数组序列化为JSON字符串String value = objectMapper.writeValueAsString(array);// 使用StringRedisTemplate将JSON字符串存储到Redis并设置过期时间stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to serialize object array to JSON", e);}}// 存储字符串到Redis并设置过期时间public void setStringToRedis(String key, String value, long timeout, TimeUnit timeUnit) {// 使用StringRedisTemplate将字符串存储到Redis并设置过期时间stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);}// 从Redis获取字符串public String getStringFromRedis(String key) {return stringRedisTemplate.opsForValue().get(key);}// 存储 Map<String, Map<String, String>> 到 Redis 并设置过期时间public void setTranslationsToRedis(String key, Map<String, Map<String, String>> translations, long timeout, TimeUnit timeUnit) {try {// 将 Map 序列化为 JSON 字符串String value = objectMapper.writeValueAsString(translations);// 使用 StringRedisTemplate 将 JSON 字符串存储到 Redis 并设置过期时间stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to serialize translations map to JSON", e);}}// 从 Redis 获取 Map<String, Map<String, String>>public Map<String, Map<String, String>> getTranslationsFromRedis(String key) {String json = stringRedisTemplate.opsForValue().get(key);if (json != null) {try {// 将 JSON 字符串反序列化为 Map<String, Map<String, String>>return objectMapper.readValue(json, new TypeReference<Map<String, Map<String, String>>>() {});} catch (Exception e) {throw new RuntimeException("Failed to deserialize JSON to translations map", e);}}return null;}
}

引用

	@Autowiredprivate RedisService redisService;

调用方法

一般设置过期时间一天,看情况而定


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

相关文章

在Vue3中实现文件上传功能,结合后端API

随着现代Web应用程序的不断发展&#xff0c;文件上传成为了用户交互中不可或缺的一部分。在本篇博客中&#xff0c;我们将深入讨论如何在Vue3中实现一个文件上传功能&#xff0c;并与后端API进行交互。我们将使用Vue3的Composition API&#xff08;setup语法糖&#xff09;来构…

14_HTML5 input类型 --[HTML5 API 学习之旅]

HTML5 引入了许多新的 <input> 类型&#xff0c;这些类型提供了更专业的数据输入控件&#xff0c;并且可以在支持的浏览器中提供更好的用户体验和输入验证。以下是一些 HTML5 中引入的 <input> 类型&#xff1a; 1.color: 打开颜色选择器&#xff0c;允许用户选择…

《Django 5 By Example》读后感

一、 为什么选择这本书&#xff1f; 本人的工作方向为Python Web方向&#xff0c;想了解下今年该方向有哪些新书出版&#xff0c;遂上packt出版社网站上看了看&#xff0c;发现这本书出版时间比较新(2024年9月)&#xff0c;那就它了。 从2024年11月11日至2024年12月18日期间&…

ECharts关系图-关系图11,附视频讲解与代码下载

引言&#xff1a; 关系图&#xff08;或称网络图、关系网络图&#xff09;在数据可视化中扮演着至关重要的角色。它们通过节点&#xff08;代表实体&#xff0c;如人、物体、概念等&#xff09;和边&#xff08;代表实体之间的关系或连接&#xff09;的形式&#xff0c;直观地…

滑动窗口 + 算法复习

维护一个满足条件的窗口大小&#xff0c;然后进行双指针移动 1.最长子串 题目链接&#xff1a;1.最长子串 - 蓝桥云课 #include<bits/stdc.h> #define int long long using namespace std; string s; int k; signed main() {int max_len0,left0;cin>>s>>k;…

【Go】Go数据类型详解—数组与切片

1. 前言 今天需要学习的是Go语言当中的数组与切片数据类型。很多编程语言当中都有数组这样的数据类型&#xff0c;Go当中的切片类型本质上也是对 数组的引用。但是在了解如何定义使用数组与切片之前&#xff0c;我们需要思考为什么要引入数组这样的数据结构。 1.1 为什么需要…

将HTML转换为PDF:使用Spire.Doc的详细指南(一) 试用版

目录 引言 1. 为什么选择 Spire.Doc&#xff1f; 1.1 主要特点 1.2 适用场景 2. 准备工作 2.1 引入 Spire.Doc 依赖 2.2 禁用 SSL 证书验证 3. 实现功能 3.1 主类结构 3.2 代码解析 4. 处理图像 5. 性能优化 5.1 异步下载图像 示例代码 5.2 批量处理优化 示例代…