Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

news2024/9/20 16:29:55

1. Redis的Java客户端

在这里插入图片描述

Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端,可以根据需要任意选择使用其中的一种。这样既可以保留现有代码使用的Jedis方式,也可以通过使用基于Netty的高性能Lettuce客户端,提升应用的性能和吞吐量。
Jedis是一个传统的Java Redis客户端,使用BIO进行Socket通信,适合低并发场景。
Lettuce是一个基于Netty的现代化Redis客户端,使用NIO进行Socket通信,支持连接池和异步IO等特性,适合高并发场景。
在maven项目中可以通过在pom.xml文件中引入spring-boot-starter-data-redis依赖来获取Spring Data Redis和相关的Jedis和Lettuce依赖。根据需要,可以在应用程序中使用适合的Redis客户端。

2. SpringDataRedis的介绍

在这里插入图片描述
在这里插入图片描述

3. SpringDataRedis快速入门

  1. 引入依赖
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.7</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <!--redis依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!--common-pool-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    <!--Jackson依赖,这里一般不用引用,springmvc包含这个依赖-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <!--单元测试-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  1. 配置文件
spring:
  redis:
    host: 192.168.***.***
    port: ****
    password: ****
    lettuce:
      pool:
        max-active: 8 # 最大连接数
        max-idle: 8 # 最大空闲连接
        min-idle: 0 # 最小空闲连接
        max-wait: 100ms # 连接等待时间
  1. 注入RedisTemplate
	@Autowired
    private RedisTemplate redisTemplate;
  1. 测试,opsForValue()对字符串的操作
@Test
void test_String(){
    // 插入一条string类型的数据
    redisTemplate.opsForValue().set("name", "李四");
    // 读取一条string类型数据
    Object name = redisTemplate.opsForValue().get("name");
    System.out.println("name = " + name);
}

在这里插入图片描述

4. RedisTemplate的RedisSerializer

在这里插入图片描述

Spring Data Redis使用了Java自带的序列化机制,如JDK自带的ObjectOutputStream和ObjectInputSteam进行序列化和反序列化。
所有改变RedisTemplate的序列化方式,不使用默认方式;
key的序列化一般采用StringRedisSerializer
而value的序列化一般采用GenericJackson2JsonRedisSerializer
采取自定义RedisTemplate的序列化方式:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return template;
    }
}

存入一个user对象,并读取;
自动序列化(user->json)和自动反序列化(json->user)

@Test
void testSaveUser() {
    // 写入数据
    redisTemplate.opsForValue().set("user:100", new User("虎哥", 21));
    // 获取数据
    User o = (User) redisTemplate.opsForValue().get("user:100");
    System.out.println("o = " + o);
}

在这里插入图片描述

5. StringRedisTemplate

在这里插入图片描述
在这里插入图片描述

Spring默认提供一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式;

@Autowired
private StringRedisTemplate stringRedisTemplate;

@Test
void testString() {
    // 写入一条String数据
    stringRedisTemplate.opsForValue().set("verify:phone:13600527634", "124143");
    // 获取string数据
    Object name = stringRedisTemplate.opsForValue().get("name");
    System.out.println("name = " + name);
}

private static final ObjectMapper mapper = new ObjectMapper();

@Test
void testSaveUser() throws JsonProcessingException {
    // 创建对象
    User user = new User("虎哥", 21);
    // 手动序列化
    String json = mapper.writeValueAsString(user);
    // 写入数据
    stringRedisTemplate.opsForValue().set("user:200", json);
    // 获取数据
    String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
    // 手动反序列化
    User user1 = mapper.readValue(jsonUser, User.class);
    System.out.println("user1 = " + user1);
}

在这里插入图片描述

6. RedisTemplate操作hash类型

@Test
void testHash() {
    stringRedisTemplate.opsForHash().put("user:400", "name", "虎哥");
    stringRedisTemplate.opsForHash().put("user:400", "age", "21");
    
    Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");
    System.out.println("entries = " + entries);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【RabbitMQ教程】前言 —— 中间件介绍

&#x1f4a7; 【 R a b b i t M Q 教程】前言——中间件介绍 \color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【RabbitMQ教程】前言——中间件介绍&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云…

MySQL数据库基础 10

第十章 创建和管理表 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库 3. 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一…

Vue2模拟俄罗斯方块小游戏

目录 一、效果展示 二、代码分享 三、原理分析 3.1、界面搭建 3.2、方块创建 3.3、方块旋转 3.4、方块移动 3.5、移动判断 3.6、下落判断与清除 3.7、得分计算 一、效果展示 二、代码分享 <template><div class"game"><div class"ga…

调整IoTDB堆内存

最关键的是 MAX_DIRECT_MEMORY_SIZE &#xff0c;他等于MAX_HEAP_SIZE变量。 再往上翻又等于 max_heap_size_in_mb M大小 继续上翻 system_memory_in_mb 很明显就是系统内存&#xff0c;单位是M quarter_ 四分之一内存&#xff0c; half_ 一半内存。 假设物理内存为8G&a…

PMP证书含金量如何?到底有啥用处?

01PMP是什么&#xff1f; | PMP是指项目管理专业人士资格认证。 | 美国项目管理协会&#xff08;PMI&#xff09;举办的项目管理专业人员&#xff08;PMP&#xff09;认证考试。 | 是目前项目管理领域含金量很高的认证。 国内很多媒体也把PMP称为继MBA、MPA之后的三大金字招…

KW 新闻 | KaiwuDB 发布智慧矿山解决方案

5月21日&#xff0c;天津第七届世界智能大会&#xff08;WIC&#xff09;圆满落幕。作为智能领域的国家级盛会&#xff0c;WIC 汇聚了全球知名院士、顶级学者、产业领袖分享先进技术和实践经验&#xff0c;推进智能技术创新合作。KaiwuDB 受邀出席大会并正式发布智慧矿山解决方…

软件测试现状以及行业分析

大家都知道最近 ChatGPT 爆火&#xff0c;国外巨头争相宣布自己的相关计划&#xff0c;国内有点实力的企业也在亦步亦趋地跟进。不出意料的是&#xff0c;关于测试职业要被淘汰的话题又&#xff08;为什么要说又&#xff1f;&#xff09;在扎堆出现&#xff0c;内容跟之前还是大…

“大模型+小模型”新纪元开启,AI基础软件定义AI未来

5月30日&#xff0c;由中国信息通信研究院、浙江省经济和信息化厅、杭州市人民政府、中国人工智能产业发展联盟主办的“杭州通用人工智能论坛”盛大召开。杭州市人民政府党组成员、副市长孙旭东&#xff0c;浙江省经信厅总工程师李永伟&#xff0c;中国信息通信研究院党委副书记…

检索项目中冗余的图片

说在前面 平时在项目中我们会使用到一些图片&#xff0c;很多时候我们会直接将图片打包到项目中去&#xff0c;随着项目的更新迭代&#xff0c;我们可能会删除一些图片的引用&#xff0c;但没将图片源文件删除&#xff0c;这个时候没有被引用到的图片就会成为冗余的文件&#…

一位十年测试的修炼之路,希望能帮你点清现实

对于刚进入软件测试工作岗位的新人&#xff0c;如何快速、健康的在职业道路上成长&#xff0c;作者谈了几点自己看法&#xff1a; 1、兴趣是最好的老师 对于软件测试工作&#xff0c;通常是比较枯燥的&#xff0c;如果没有兴趣很难做到持久。 我最近参与了一个软件测试项目&a…

Android AIDL跨进程通信

一、前言 什么是AIDL&#xff1f;AIDL用来做什么的&#xff1f;怎么使用AIDL&#xff1f; AIDL是Android的一种接口定义语言&#xff0c;语法跟java接口定义类似&#xff0c;文件格式为 .aidl 非 .java 。AIDL主要是用来实现跨进程通信&#xff0c;AIDL的本质也是通过Binder机…

【集群】Haproxy搭建Web群集

文章目录 一、Haproxy 相关概念1. Haproxy 的概述2. Haproxy 的主要特性3. 常见的 Web 集群调度器4. 常见的应用分析4.1 LVS 应用4.2 Haproxy 应用4.3 LVS、Nginx、Haproxy的区别 5. Haproxy 调度算法原理5.1 roundrobin5.2 static-rr5.3 leastconn5.4 source5.5 uri5.6 url_pa…

【1 TypeScript - TypeScript语法的类型】

1 认识TypeScript 主要是为了解决类型检查的痛点.是拥有类型的JavaScript超集,虽然编写的是Typescript,但是最终仍然会编译成JavaScript代码. 2 TypeScript的运行环境 使用ts-node 3 变量的声明 变量的类型推导&#xff08;推断&#xff09; 4 JavaScript类型 – Array类…

ThinkPHP5源码阅读-类的自动加载register与autoload的实现

文章目录 前言如何下载ThinkPHP5源码关于自动加载类类的准备进入base.phpLoader::register() 注册自动加载函数对composer 的支持对think和trait的支持对extend目录的支持 类的加载autoload方法class_alias的定义和使用findFile 查找类 作业&#xff1a;自定义一个可以被自动类…

Java设计模式—责任链模式(Chin of Responsibility)

目录 前言 一、责任链模式的简介 二、责任链模式的概念 三、责任链模式的作用 四、责任链模式的优、缺点 1.责任链模式的优点 2.责任链模式的缺点 五、责任链模式的应用场景 六、代码案例 UML类图 1.定义一个请求枚举类 2.定义一个请求类 3.定义一个抽象处理接口 4、…

TS中any与unknown详解,示例

文章目录 前言一、一个示例二、示例目的1、功能描述2、主要区别3、代码实现 总结 前言 本片文章主要是在写ts时遇到不知道类型&#xff0c;很容易就想到用any可以解决一切&#xff0c;但这样写并不好。所以今天就总结学习一下&#xff0c;比较好的处理任意类型的unknown。 一、…

2023年最新网络安全入门指南,保姆级教程!啃完这篇就够了

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…

大气污染扩散模型Calpuff教程

详情点击链接&#xff1a;大气污染扩散模型Calpuff教程一&#xff0c;Calpuff 1.Calpuff模型 2、Calpuff模型基础 3、Calpuff模型下载安装 1&#xff09;Calpro系统安装 2&#xff09;安装环境要求 3&#xff09;需安装的辅助软件二&#xff0c;数据预处理 1.网格设置 …

Vue3-04-生命周期

Vue 的生命周期描述组件从创建到销毁的全过程。Vue3 和 Vue2 的生命周期钩子非常像&#xff0c;我们仍然可以在相同的场景下使用相同的钩子函数。 Vue3 在设计时对先前的版本进行了向下兼容&#xff0c;如果你的项目还在使用选项式 API 进行构建&#xff0c;那么不需要修改生命…

【stable diffusion】图片批量自动打标签、标签批量修改(BLIP、wd14)用于训练SD或者LORA模型

参考&#xff1a; B站教学视频【&#xff1a;AI绘画】新手向&#xff01;Lora训练&#xff01;训练集准备、tag心得、批量编辑、正则化准备】官方教程&#xff1a;https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_README-en.md#automatic-captioning 一、…