Redis学习笔记--002
Redis的JAVA客户端
文章目录
- Redis的JAVA客户端
- 一、Redis的Java客户端的种类
- 二、Jedis
- 2.1、使用步骤
- 2.2、Jedis连接池
- 三、[SpringDataRedis](https://spring.io/projects/spring-data-redis)
- 3.1、介绍
- 3.2、RedisTemplate
- 3.3、SpringDataRedis使用步骤
- 3.4、SpringDataRedis的序列化方式
- 四、StringRedisTemplate
- 4.1、解决方法
- 4.2、ObjectMapper介绍
- 4.3、StringRedisTemplate类
- 五、其它结构的使用
一、Redis的Java客户端的种类
二、Jedis
Jedis是一个用于连接和与Redis服务器进行交互的Java客户端库。Redis是一个高性能的内存数据存储系统,Jedis允许Java应用程序通过简单的API与Redis进行通信。
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency>
2.1、使用步骤
- 获取Jedis连接
//设置主机地址和端口号
Jedis jedis = new Jedis("192.168.74.1xx", 6379);
- 给Jedis设置redis密码
// 设置密码认证
jedis.auth("123456");
- 操作
HashMap<String,String> map=new HashMap<>();map.put("id","1");map.put("name","radan");jedis.hset("user:1",map);System.out.println(jedis.hgetAll("user:1"));
- 释放连接
jedis.close();
2.2、Jedis连接池
Jedis本身就是线程不安全的,并且频繁的创建和销毁会有性能的损耗,因此推荐使用Jedis连接池代替Jedis的直连方式。(JedisPool)
JedisConnectionFactory 连接池配置类
public class JedisConnectionFactory {private static JedisPool jedisPool = null;static {// 配置连接池JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();// 最大连接数jedisPoolConfig.setMaxIdle(8);// 最大空闲连接jedisPoolConfig.setMaxIdle(8);// 最小空闲连接jedisPoolConfig.setMinIdle(0);// 设置最长等待时间 msjedisPoolConfig.setMaxWaitMillis(200);jedisPool = new JedisPool(jedisPoolConfig,"192.168.74.128",6379);}// 获取Jedis对象public static Jedis getJedis(){return jedisPool.getResource();}public static void closeJedis(){jedisPool.close();}
}
三、SpringDataRedis
3.1、介绍
Spring Data Redis是Spring框架的一个模块,用于简化在Java应用程序中与Redis数据库进行交互的过程。它提供了高级别的抽象和易于使用的API,使得在Spring应用中使用Redis变得更加容易。
Spring Data Redis的一些关键特点和用途
-
Redis操作抽象化: Spring Data Redis抽象了与Redis数据库的交互,允许你以面向对象的方式操作数据。你可以将Java对象存储在Redis中,而不必担心底层的Redis命令。
-
注解支持: Spring Data Redis支持注解,使得在Java类中定义Redis数据模型更加方便。你可以使用注解来标记实体类、字段和方法,以指定它们与Redis数据之间的映射关系。
-
连接池管理: Spring Data Redis集成了连接池管理,确保有效地管理Redis连接。这有助于提高性能和资源利用率。
-
声明式事务: 你可以使用Spring的声明式事务管理来确保Redis操作的一致性。这使得在多个Redis命令之间进行原子性操作更加容易。
-
缓存支持: Spring Data Redis还提供了与Spring框架的缓存抽象集成,使得可以轻松地将Redis用作应用程序的缓存存储。
-
查询支持: 该模块允许你使用Spring表达式语言(SpEL)构建自定义查询,以根据不同的条件检索数据。
-
Pub/Sub支持: Spring Data Redis支持发布/订阅模式,允许你创建消息发布者和订阅者,以便实现实时消息传递。
3.2、RedisTemplate
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型当中:
3.3、SpringDataRedis使用步骤
SpringBoot已经提供了对SpringBootDataRedis的支持,使用非常方便:
- 引入依赖
<!-- redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 连接池依赖 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.11.1</version></dependency>
- 配置文件
spring:redis:host: 192.168.74.128port: 6379password: 123456lettuce:pool:max-active: 8 # 最大连接max-idle: 8 # 最大空闲连接max-wait: 100 # 最小等待时间min-idle: 0 # 连接等待时间
- 注入RedisTemplate
@Autowiredprivate RedisTemplate redisTemplate;
- 测试
void test001(){// 插入一条数据redisTemplate.opsForValue().set("name","李四");// 读取一条数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name="+name);}
解决方法:
3.4、SpringDataRedis的序列化方式
可以自定义RedisTemplate的序列化方式,代码如下:
- 引入依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
- 编写配置类
要求RedisTemplate对象的键使用String类型,值使用Object对象类型
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){// 创建RedisTemplate对象RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(connectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 设置Key的序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// 设置Value的序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);// 返 回return redisTemplate;}}
- 测试结果
@Testvoid test002(){// 插入一条数据redisTemplate.opsForValue().set("user:20",new User("张三",28));// 读取一条数据Object name = redisTemplate.opsForValue().get("user:20");System.out.println("name="+name);}
这样也有缺点:为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入redis,会带来额外的开销。
四、StringRedisTemplate
解决:JSON序列化器会将类的class类型写入json结果中,存入redis,会带来额外的开销这一问题
4.1、解决方法
为了节省内存空间,我们并不会使用JSON序列化器来处理Value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,需要手动完成对象的序列化和反序列化。
Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自义RedisTemplate的过程:
4.2、ObjectMapper介绍
是Java编程语言中常用的库,用于将Java对象与JSON(JavaScript对象表示法)数据之间进行转换。它是Jackson库的一部分,提供了一套用于在Java中处理JSON的数据处理工具。
ObjectMapper主要使用方法:
// 将Java对象序列化为JSON字符串String jsonString = objectMapper.writeValueAsString(person);
// 将JSON字符串反序列化为Java对象Person deserializedPerson = objectMapper.readValue(jsonString, 需要待转的对象类.class);
4.3、StringRedisTemplate类
StringRedisTemplate类的使用:
@SpringBootTest
public class RedisString {@Autowiredprivate StringRedisTemplate stringRedisTemplate;//引入ObjectMapperJSON处理类private static final ObjectMapper objectMapper = new ObjectMapper();@Testvoid testString() throws JsonProcessingException {User user = new User("李四", 14);// 1.存数据// 将User对象转换为Json数据String jsonString = objectMapper.writeValueAsString(user);System.out.println(jsonString); // {"username":"李四","age":14}stringRedisTemplate.opsForValue().set("name",jsonString);// 2.取数据String name = stringRedisTemplate.opsForValue().get("name");System.out.println(name); // {"username":"李四","age":14}// 将JSON数据转为对象格式User user1 = objectMapper.readValue(name, User.class);System.out.println(user1); // User(username=李四, age=14)}
}
之前的问题得到了解决:
五、其它结构的使用
Hash结构的使用:使用基本没有太大差别,更多的是偏向Java代码的这种分格
代码:
@Testvoid test002(){// 存数据stringRedisTemplate.opsForHash().put("user:23","name","小王");stringRedisTemplate.opsForHash().put("user:23","age","6");// 取一个字段Object name = stringRedisTemplate.opsForHash().get("user:23", "name");System.out.println(name);// 取所有的字段Map<Object, Object> objectMap = stringRedisTemplate.opsForHash().entries("user:23");System.out.println(objectMap);}
测试:
相关文章:

Redis学习笔记--002
Redis的JAVA客户端 文章目录 Redis的JAVA客户端一、Redis的Java客户端的种类二、Jedis2.1、使用步骤2.2、Jedis连接池 三、[SpringDataRedis](https://spring.io/projects/spring-data-redis)3.1、介绍3.2、RedisTemplate3.3、SpringDataRedis使用步骤3.4、SpringDataRedis的序…...

Visual Stdio 2019 win10 64bit下 无法找到 资源编译器DLL,请确认路径是否正确,和无法下载 win10SDK_10.0
上面的2个原因 第一个原因是因为安装时候,漏掉勾选 vistual stdio sdk 和 windows 通用c运行时 其中的一项目 第2个原因是没有安装 sdk...
设计模式:中介者模式(C++实现)
在中介者模式中,中介者对象负责协调多个对象之间的交互,将对象之间的耦合度降低。 #include <iostream> #include <string> #include <vector>class Colleague;// 中介者接口 class Mediator { public:virtual void sendMessage(Coll…...
Python常用函数
最近跑实验,记录一些常用的 Python 函数,便于自己复习和学习,仅用来学习。 1.Python 中的 os.path.join() 参考该文章 深度了解 在 Python 中,处理文件和目录路径是常见的任务。为了简化路径的拼接和操作,Python 提供…...

进程与线程的记忆方法
有很多人经常会分不清进程与线程的关系, 嗯。。。。。。可能只有我自己记不清吧 举个例子: 进程:登录一个qq号,就是一个进程。 线程:同时打开多个窗口聊天,就是多个线程。 每次记忆完,过了一段…...
支持私有化部署的 WorkPlus,助您构建定制化的即时通讯平台
随着信息技术的飞速发展,企业对于即时通讯平台的需求也不断提升。而在信息安全日益重要的时代背景下,随之而来的是对数据保护和隐私安全的高度关注。私有化即时通讯平台应运而生,成为企业保护数据安全的守护者。在众多品牌中,Work…...

adjustText库解决深度学习、视觉模型matplotlib画散点图时由于标签非常多导致的重叠现象
pytorch框架 import matplotlib.pyplot as plt import numpy as np from adjustText import adjust_texty [30.48, 30.71, 30.52, 31.35, 31.53, 31.54, 31.82, 32.13, 32.21, 32.15, 31.92, 32.24, 32.21, 32.20, 32.35] x [0.057, 0.012, 0.025, 0.665, 1.774, 0.813, 0.55…...
机器学习线性回归学习总结笔记
线性回归模板: 1)获取数据: 2)划分数据集: 一般使用:train_test_split() 划分数据集的包from sklearn.model_selection import train_test_split 3)标准化处理 StandardScaler…...

火狐连接错误代码SEC_ERROR_UNKNOWN_ISSUER
最近开发的实验启动功能,测试人员用火狐浏览进行测试,一直报错 错误代码SEC_ERROR_UNKNOWN_ISSUER 在网上搜索很多文章,都没有解决我的问题,最后自己花时间研究了下,灵感来源于项目中,就类似于白名单的功能…...

react 网页/app复制分享链接到剪切板,分享到国外各大社交平台,通过WhatsApp方式分享以及SMS短信方式分享链接内容
1.需求 最近在做一个国际网站app,需要把app中某个页面的图文链接分享到国外各大社交平台上(facebook,whatapp,telegram,twitter等),以及通过WhatApp聊天方式分享,和SMS短信方式分享链接内容,该怎么做呢?图示如下: 分享到国外各大社交平台&am…...

用智能文字识别技术赋能古彝文数字化之路
目录 1、前言 2、对古彝文古籍的保护迫在眉睫 3、古彝文识别的难点问题 4、古彝文文字识别的关键技术 4.1、智能高清滤镜技术 4.2、图像矫正 4.3、图像增强 4.4、版面还原 5、合合信息识别技术赋能古彝文数字化 1、前言 古彝文指的是在云南、贵州、四川等地的彝族人之…...

QT入门10个小demo——MP4视频播放器
🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 一、前…...
MySQL常用操作
目录 1. 安装MySQL/MariaDB2. 用户管理2.1 用户信息2.2 用户权限privileges 3. 增删改查3.1 增删数据库/表3.2 查询 参考 1. 安装MySQL/MariaDB # 1) 确认是否已安装mysql rpm -qa | grep mysql# 2) (如无)执行以下命令进行安装 ## 方法一 yum install …...

uni-app 之 Toast 消息提示
uni-app 之 Toast 消息提示 image.png <template> <view class"content"> <u-button click"showToast">Toast 消息提示 </u-button><u-toast ref"uToast"></u-toast></view></template> <…...

C语言--指针进阶3--数组指针
数组指针定义 类比: 整型指针--指向整型的指针 int a 10; int* pa &a; 字符指针--指向字符的指针 char ch a; char* pc &ch; 数组指针--指向数组的指针 int arr[10] { 0 }; int(*p)[10] &arr; // 数组指针 区分:指针数组和数组…...
购物车案例
1功能模块分析 请求动态渲染购物车,数据存vuex 数据框控件 修改数据 动态计算总价和总数量 2脚手架新建项目 终端安装axios:npm install axios -g 基于json-server工具,准备后端接口服务环境:(模拟后台假数据) 1…...
c++ chrono
chrono chrono是一个time library, 源于boost,现在是C标准 使用时,需要导入chrono,其所有实现均在std::chrono namespace下。 #include <chrono>chrono是一个模版库,使用简单,功能强大,有三个重要…...

实现长短地址的相互映射
长地址请求,返回短地址,如何实现长短地址的相互映射 转换为: 解决方式: 使用发号策略,给每一个长地址发一个号,不停自增,第一个使用这个服务的人得到的短地址是xx.xx/0 第二个是 xx.xx/1 &…...

第1讲:前后端分离思想
什么是前端 前端其实是个很大的范畴。 简单点说,针对浏览器的开发,浏览器呈现出来的页面就是前端。它的实质是前端代码在浏览器端被编译、运行、渲染。前端代码主要由三个部分构成:HTML(超文本标记语言)、CSS…...

【深度学习】【Opencv】Python/C++调用onnx模型【基础】
【深度学习】【Opencv】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本OpenCVWindows平…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...