redis 缓存使用

工具类

复制代码
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 {

	@Autowired
	private StringRedisTemplate stringRedisTemplate;

	private final ObjectMapper objectMapper = new ObjectMapper();

	// 存储对象到Redis
	public void setObjectToRedis(String key, Object obj) {
		try {
			// 将对象序列化为JSON字符串
			String value = objectMapper.writeValueAsString(obj);
			// 使用StringRedisTemplate将JSON字符串存储到Redis
			stringRedisTemplate.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;
	}

	// 存储对象数组到Redis
	public <T> void setArrayToRedis(String key, T[] array) {
		try {
			// 将对象数组序列化为JSON字符串
			String value = objectMapper.writeValueAsString(array);
			// 使用StringRedisTemplate将JSON字符串存储到Redis
			stringRedisTemplate.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;
	}
}

引用

复制代码
	@Autowired
	private RedisService redisService;

调用方法

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

相关推荐
行百里er7 分钟前
5 分钟跑起 Redis(Docker 版)
redis·后端·docker
志尊宝15 分钟前
Vue3 零基础每日笔记(052):路由常见坑一次排雷——404、刷新丢参数、部署白屏
前端·javascript·vue.js·笔记·html5
linux_cfan17 分钟前
videojs v10 源代码系列解读:13 · 能力型媒体契约:`Media` 的组合接口
前端·javascript·音视频
涛涛ing22 分钟前
2026年9月,前端圈同时发生了四件事,指向同一个方向
前端
福大大架构师每日一题31 分钟前
redis 8.10.2发布:安全修复集中落地,事务 ACL、集群总线与模块稳定性全面加固
redis
艾伦野鸽ggg35 分钟前
Vue2 模板语法与样式绑定
前端
Amos_Web36 分钟前
Rspack 源码解析(十一):资产 Hook 与增量构建
前端·rust·源码阅读
PC2005_cloud36 分钟前
Windows 数据使用量页面卡死:1097 个热点档案和 161 MB 的 SRUM 库
前端·后端
烈风逍遥38 分钟前
AI大模型中fetch 和 ReadableStream为啥一起出现
前端·人工智能
Pioneer0000143 分钟前
我用 Redis + 网关做多模型 API 路由:缓存命中率 95%+ 的工程实践
人工智能·redis·后端·缓存·性能优化·架构