当前位置: 首页 > news >正文

Spring boot 中使用 Redis 信息

文章目录

        • 添加依赖:
        • 配置 Redis:
        • 配置 Jackson2JsonRedisSerializer 进行对象的序列化
        • 使用 RedisTemplate:

添加依赖:

在 pom.xml 文件中添加 Redis 和 Spring Data Redis 的依赖。 Spring boot 集成 redis 的使用, 无需版本号即可直接使用,还有相关配置信息可以直接通过 yml 文件去配置

<dependencies><!-- Spring Boot Starter Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
</dependencies>
配置 Redis:

在 application.properties 或 application.yml 文件中配置 Redis 的连接信息。

redis: port: 6380host: 127.0.0.1
配置 Jackson2JsonRedisSerializer 进行对象的序列化

要在 Spring Boot 项目中配置 Redis 的序列化,你需要自定义 RedisTemplate 的序列化策略。Spring Data Redis 默认使用 JdkSerializationRedisSerializer 来序列化和反序列化对象,但这可能导致较大的内存占用。通常推荐使用 Jackson2JsonRedisSerializer 或 OxmSerializer(如果使用 XML)来进行更高效的序列化。

package org.gateway.config.redis;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.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用 Jackson2JsonRedisSerializer 替换默认的序列化方式Jackson2JsonRedisSerializer<Object> jacksonSerializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jacksonSerializer.setObjectMapper(om);template.setValueSerializer(jacksonSerializer);template.setKeySerializer(new StringRedisSerializer());template.afterPropertiesSet();return template;}
}
使用 RedisTemplate:

RedisTemplate 是 Spring Data Redis 提供的一个高级抽象层,用于简化 Redis 的操作。它封装了对 Redis 的基本操作,如设置和获取值、执行列表操作等,并且可以很容易地扩展到更复杂的功能。RedisTemplate 支持多种序列化策略,可以自定义序列化方式以满足特定的应用需求。
我们使用 RedisTemplate 封装一个 RedisUtil 便于使用

package org.gateway.utils.redis;import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;@Component
@RequiredArgsConstructor
public class RedisUtil {private final RedisTemplate<String, Object> redisTemplate;private final ObjectMapper objectMapper;// String Operationspublic void setString(String key, String value) {ValueOperations<String, Object> ops = redisTemplate.opsForValue();ops.set(key, value);}public String getString(String key) {ValueOperations<String, Object> ops = redisTemplate.opsForValue();return (String) ops.get(key);}public void setStringWithExpiry(String key, String value, long timeout, TimeUnit unit) {ValueOperations<String, Object> ops = redisTemplate.opsForValue();ops.set(key, value, timeout, unit);}public Boolean hasKey(String key) {return redisTemplate.hasKey(key);}public void deleteKey(String key) {redisTemplate.delete(key);}// List Operationspublic void leftPush(String key, Object value) {ListOperations<String, Object> ops = redisTemplate.opsForList();ops.leftPush(key, value);}public void rightPush(String key, Object value) {ListOperations<String, Object> ops = redisTemplate.opsForList();ops.rightPush(key, value);}public List<Object> range(String key, long start, long end) {ListOperations<String, Object> ops = redisTemplate.opsForList();return ops.range(key, start, end);}public Long listSize(String key) {ListOperations<String, Object> ops = redisTemplate.opsForList();return ops.size(key);}// Hash Operationspublic void putInHash(String key, String field, Object value) {HashOperations<String, String, Object> ops = redisTemplate.opsForHash();ops.put(key, field, value);}public Object getValueFromHash(String key, String field) {HashOperations<String, String, Object> ops = redisTemplate.opsForHash();return ops.get(key, field);}public Map<String, Object> getHash(String key) {HashOperations<String, String, Object> ops = redisTemplate.opsForHash();return ops.entries(key);}public Long hashSize(String key) {HashOperations<String, String, Object> ops = redisTemplate.opsForHash();return ops.size(key);}// Set Operationspublic void addSet(String key, Object member) {SetOperations<String, Object> ops = redisTemplate.opsForSet();ops.add(key, member);}public Set<Object> membersOfSet(String key) {SetOperations<String, Object> ops = redisTemplate.opsForSet();return ops.members(key);}public Long setSize(String key) {SetOperations<String, Object> ops = redisTemplate.opsForSet();return ops.size(key);}// Sorted Set Operationspublic void addSortedSet(String key, Object member, double score) {ZSetOperations<String, Object> ops = redisTemplate.opsForZSet();ops.add(key, member, score);}public Set<Object> rangeByScore(String key, double min, double max) {ZSetOperations<String, Object> ops = redisTemplate.opsForZSet();return ops.rangeByScore(key, min, max);}public Long sortedSetSize(String key) {ZSetOperations<String, Object> ops = redisTemplate.opsForZSet();return ops.zCard(key);}// Key Operationspublic void expire(String key, long timeout, TimeUnit unit) {redisTemplate.expire(key, timeout, unit);}public Boolean exists(String key) {return redisTemplate.hasKey(key);}public void deleteKeys(Collection<String> keys) {redisTemplate.delete(keys);}public void setObject(String key, Object object) {try {String serializedObject = objectMapper.writeValueAsString(object);redisTemplate.opsForValue().set(key, serializedObject);} catch (IOException e) {throw new RuntimeException("Failed to serialize object", e);}}public <T> T getObject(String key, Class<T> clazz) {String serializedObject = (String) redisTemplate.opsForValue().get(key);if (serializedObject == null) {return null;}try {return objectMapper.readValue(serializedObject, clazz);} catch (IOException e) {throw new RuntimeException("Failed to deserialize object", e);}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#垃圾处理机制相关笔记
  • Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot
  • 异常信息转储预研笔记-捕获指定进程的异常信号
  • Python 微服务实战:Dapr 基础入门指南
  • HashMap的数据结构是怎样的?为什么JDK8中要将其转换为红黑树?
  • uvm(7)factory
  • sql 优化,提高查询速度
  • java-idea如何配置plugins的Repositoies和proxy
  • DETR论文,基于transformer的目标检测网络 DETR:End-to-End Object Detection with Transformers
  • 面向对象编程-继承
  • 谷歌发布会现场尴尬瞬间:AI助手Gemini展示挑战苹果
  • 图数据库在社交网络分析中的应用
  • X-Recon:一款针对Web安全的XSS安全扫描检测工具
  • opencv基础的图像操作
  • 再见Figma!!新的设计,代码协作神器!【送源码】
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • angular2 简述
  • Brief introduction of how to 'Call, Apply and Bind'
  • cookie和session
  • go语言学习初探(一)
  • hadoop集群管理系统搭建规划说明
  • JavaScript-Array类型
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mybatis初体验
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • ubuntu 下nginx安装 并支持https协议
  • 实现简单的正则表达式引擎
  • 提醒我喝水chrome插件开发指南
  • 新书推荐|Windows黑客编程技术详解
  • 用quicker-worker.js轻松跑一个大数据遍历
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Prometheus VS InfluxDB
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • ######## golang各章节终篇索引 ########
  • #NOIP 2014# day.1 T2 联合权值
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2020)Java后端开发----(面试题和笔试题)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (离散数学)逻辑连接词
  • (七)Activiti-modeler中文支持
  • (三)mysql_MYSQL(三)
  • (四)js前端开发中设计模式之工厂方法模式
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (转) Face-Resources
  • (转)ABI是什么
  • (转)Linq学习笔记
  • *p++,*(p++),*++p,(*p)++区别?
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET NPOI导出Excel详解