Redis API(springboot整合,已封装)

server/2024/12/19 22:23:52/

目录

  • 结构
  • maven导包 pom.xml
  • application.yml
  • redis 配置类编写
  • Service方法
  • 调用示例

结构

在这里插入图片描述


maven导包 pom.xml

依赖项主要添加如下

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

application.yml

server:port: 8080spring:redis:host: 127.0.0.1port: 6379datasource:url: jdbc:mysql://localhost:3306/a_01username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver

redis__31">redis 配置类编写

在进行redis使用时,需要对其进行序列化
序列化理由

  1. 数据转换:
    Redis是一个键值存储系统,它本身并不理解Java对象或其他编程语言中的复杂数据结构。序列化器的作用就是将Java对象转换成Redis能够理解和存储的格式(如字符串、二进制数据等),以及将Redis中的数据转换回Java对象。这是实现Java应用与Redis之间数据交换的基础。
  2. 数据一致性: 使用合适的序列化器可以确保在Java应用中序列化的对象与从Redis中反序列化的对象保持一致。这对于保持数据的完整性和准确性至关重要,尤其是在分布式系统中。
  3. 性能优化: 不同的序列化器在序列化和反序列化的效率上可能有所不同。选择适合应用场景的序列化器可以优化性能,减少数据转换所需的时间和资源。
  4. 灵活性: Spring Data Redis提供了多种序列化器供选择,如StringRedisSerializer、Jackson2JsonRedisSerializer、GenericJackson2JsonRedisSerializer等。这些序列化器支持不同的数据类型和格式,使得开发者可以根据具体需求灵活配置。
  5. 支持复杂对象: 对于需要存储复杂对象(如自定义类实例)的场景,使用如Jackson2JsonRedisSerializer这样的序列化器可以将对象序列化为JSON字符串,从而方便地在Redis中存储和检索。
  6. 兼容性: 通过配置序列化器,可以确保在不同版本的Java应用或不同语言的应用之间共享Redis数据时保持兼容性。只要遵循相同的序列化规则,不同应用就能正确地解析和存储数据。

RedisConfig.java

package com.wunaiieq.tmp_redis_20241217.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 {/*** 创建RedisTemplate:用于执行Redis操作的方法*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory)   {RedisTemplate<String, Object> redisTemplate= new RedisTemplate<String, Object>();redisTemplate.setConnectionFactory(factory);//设置通用序列化器//对于其他的列表集合等的类型,不需要额外设置序列化方式redisTemplate.setKeySerializer(new StringRedisSerializer());    //key设置为String的序列化方式redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());     //value设置为JSON的序列化方式redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());return redisTemplate;}
}

Service方法

对常用的CRUD方法按数据类型进行了封装

package com.wunaiieq.tmp_redis_20241217.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/**Hash类型**/public boolean hset(String key, String field, Object value, long seconds) {try {redisTemplate.opsForHash().put(key, field, value);expire(key, seconds); // 假设有一个通用的expire方法return true;} catch (Exception e) {e.printStackTrace();return false;}}public Object hget(String key, String field) {return redisTemplate.opsForHash().get(key, field);}private void expire(String key, long seconds) {redisTemplate.expire(key, seconds, TimeUnit.SECONDS);}/**List类型**/public boolean lrpush(String key, Object value) {try {redisTemplate.opsForList().rightPush(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}public List<Object> getList(String key, int start, int end) {try {return redisTemplate.opsForList().range(key, start, end);} catch (Exception e) {e.printStackTrace();return null;}}/**Set类型**/public long sset(String key, Object... values) {try {return redisTemplate.opsForSet().add(key, values);} catch (Exception e) {e.printStackTrace();return 0;}}public long sgetSize(String key) {try {return redisTemplate.opsForSet().size(key);} catch (Exception e) {e.printStackTrace();return 0;}}public Set<Object> sgetAll(String key) {try {return redisTemplate.opsForSet().members(key);} catch (Exception e) {e.printStackTrace();return null;}}/**String类型**/public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;}}public Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);}public boolean setex(String key, Object value, long expire) {try {redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);return true;} catch (Exception e) {e.printStackTrace();return false;}}/**ZSet类型**/public boolean zadd(String key, Object member, double score) {try {return redisTemplate.opsForZSet().add(key, member, score);} catch (Exception e) {e.printStackTrace();return false;}}public Set<String> zrange(String key, int start, int end) {try {Set<Object> range = redisTemplate.opsForZSet().range(key, start, end);if (range == null || range.isEmpty()) {return null;}return range.stream().map(Object::toString).collect(Collectors.toSet());} catch (Exception e) {e.printStackTrace();return null;}}
}

调用示例

 @Testpublic void test() {Student student = new Student(1, "wunaiieq");stringRedisService.set("k1", student);}

http://www.ppmy.cn/server/151557.html

相关文章

信息化基础知识——电子商务(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 电子商务 大数…

鸿蒙app封装 axios post请求失败问题

这个问题是我的一个疏忽大意&#xff0c;在这里记录一下。如果有相同问题的朋友&#xff0c;可以借鉴。 当我 ohpm install ohos/axios 后&#xff0c;进行简单post请求验证&#xff0c;可以请求成功。 然后&#xff0c;我对axios 进行了封装。对axios 添加请求拦截器/添加响…

Android14 AOSP 允许system分区和vendor分区应用进行AIDL通信

在Android14上&#xff0c;出于种种原因&#xff0c;system分区的应用无法和vendor分区的应用直接通过AIDL的方法进行通信&#xff0c;但是项目的某个功能又需要如此。 好在Binder底层其实是支持的&#xff0c;只是在上层进行了屏蔽。 修改 frameworks/native/libs/binder/Bp…

Serverless监控和调试、持续集成和持续部署

接下来,我们将探讨Serverless架构中的监控和调试,以及如何在Serverless环境中实现持续集成和持续部署(CI/CD)。 在Serverless架构中,监控和调试是确保应用健康运行的关键。以下是一些监控和调试的最佳实践: 日志聚合:使用云服务提供商的日志服务(如AWS CloudWatch、Azu…

在 Mac ARM 架构(例如 M1 或 M2 芯片)上安装 Node.js

文章目录 方法一&#xff1a;使用 Homebrew 安装 Node.js方法二&#xff1a;使用 Node Version Manager (NVM) 安装 Node.js方法三&#xff1a;从 Node.js 官方网站下载安装包注意事项 在 Mac ARM 架构&#xff08;例如 M1 或 M2 芯片&#xff09;上安装 Node.js 可以通过几种不…

Linux Red Hat安装包安装nodejs

查找你想要的node版本https://nodejs.org/dist/ 这里我使用16版本的 进入Linux&#xff0c;安装node #创建文件夹 mkdir -p /lsp/nodejs#下载 cd /lsp/nodejs wget https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz#解压 tar xf node-v16.20.2-linux-x64.t…

Docker Desktop 4.37.0版本支持 命令行启动了

更新日志 Docker Desktop 4.37.0版本 支持命令行了&#xff0c;参考&#xff1a;https://docs.docker.com/desktop/release-notes/ 如下图所示 命令 点上图中的command line 可以看到相关的命令&#xff0c;如下图&#xff1a; 示例 以start为例&#xff0c;如下图所示&…

计算机网络-基础概念(HTTP,TPC/IP, DNS,URL)

HTTP不同的版本 HTTP0.9于1990年问世&#xff0c;此时HTTP并没有作为正式的标准被建立。HTTP正式被公布是1996年的5月&#xff0c;版本命名为HTTP/1.0。HTTP1.1&#xff0c;1997年1月公布&#xff0c;目前仍然是主流版本的HTTP协议版本。 TCP/IP 通常使用的网络是在TCP/IP协…