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

Redis学习路线(3)——Redis的Java客户端

一、如何使用Redis的Java客户端

官方文档: https://redis.io/docs/clients/java/

Java-Redis客户端使用场景
Jeids
以Redis命令作为方法名称,学习成本低,简单实现,但是Jedis实例是线程不安全的,多线程环境下需要基于连接池使用。
lettuce
Lettuce 是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。Redis的哨兵模式、集群模式和管道模式。
Redisson
Redisson是基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore(信号量)、AtomicLong(原子类)等强大功能

SpringDataRedis: 一款结合了Jedis和Lettuce的SpringBoot框架整合Redis组件。


二、Jedis

Jedis官网: https://github.com/redis/jedis

Redis的官方也推荐了这种客户端。

(一)引入依赖

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version>
</dependency>

(二)建立连接

方式一:单点连接

    private Jedis jedis;@BeforeEachvoid setup() {//建立连接jedis = new Jedis("192.168.92.131",6379);//设置密码jedis.auth("123321");//选择数据库jedis.select(0);}@Testvoid redisTest(){//插入数据String result = jedis.set("name","张三");System.out.println("result="+result);//获取数据String name = jedis.get("name");System.out.println("name="+name);}@AfterEachvoid destroy() {if (jedis != null)jedis.close();}//获取的结果
result=OK
name=张三

方式二:连接池建立连接

public class JedisConnectionFactory {private static final JedisPool jedisPool;static {//1、创建连接池配置对象JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//2、配置连接池相关信息// 最大连接数jedisPoolConfig.setMaxTotal(8);// 最大空间连接jedisPoolConfig.setMaxIdle(8);// 最小空闲连接jedisPoolConfig.setMinIdle(0);// 设置最长等待时间,msjedisPoolConfig.setMaxWaitMillis(200);//3、建立连接池,需要连接池配置,ip,端口,等待时间,密码jedisPool = new JedisPool(jedisPoolConfig, "192.168.92.131",6379,1000,"123321");}public static Jedis getConnection(){//获取单个连接return jedisPool.getResource();}}

三、SpringDataRedis

SpringDataSpring 中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做 SpringDataRedis,官网地址: https://spring.io/projects/spring-data-redis

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模块
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

(一)RedisTemplate

RedisTemplate将不同的数据类型操作API封装到不同类型中。

API返回值类型说明
redisTemplate.opsForValue()ValueOperations操作String类型数据
redisTemplate.opsForHash()HashOperations操作Hash类型数据
redisTemplate.opsForList()ListOperations操作List类型数据
redisTemplate.opsForSet()SetOperations操作Set类型数据
redisTemplate.opsForZSet()ZSetOperations操作SortedSet类型数据
redisTemplate通用命令

(二)RedisTemplate的基本使用

1、引入依赖

<!--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>
</dependency>

2、配置redis

spring:redis:host: 192.168.92.131port: 6379password: 123321lettuce:pool:max-active: 8 #最大连接数max-idle: 8 #最大空闲连接min-idle: 0 #最小空闲连接max-wait: 100 #连接等待时间

3、注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

4、使用RedisTemplate

@Autowired
private RedisTemplate redisTemplate;public void operateString(){// 插入一条string类型的数据,存储的格式是Java序列化的格式redisTemplate.opsForValue().set("name", "李四");// 读取一条string类型数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name = " + name);
}

5、优化RedisTemplate存储序列化的现象

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {//1、创建RedisTemplate对象RedisTemplate<String, Object> template = new RedisTemplate<>();//2、设置连接工厂template.setConnectionFactory(connectionFactory);//3、创建JSON序列化工具		GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();//4、设置key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());//5、设置Value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);//6、返回return template;}}

缺点: JSON序列化时会将calss的类型写入json结果中,存入Redis中,带来额外的内存。

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key 和 value,当需要存储Java对象时,手动完成序列化和反序列化。

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式,省去自定义RedisTemplate的过程。**
(PS:不如直接用alibaba开源的fastjson,减少学习成本,但要注意的是 在JSON插件的排行中 ,jackson-databind > gson > fastjson,这就说明了问题,fastjson 专注于性能,但安全性不足,gson是保证了安全性,如果可以,在项目中应该使用gson)**

@Autowired
private StringRedisTemplate stringRedisTemplate;//JSON工具
private static final ObjectMapper mapper = new ObjectMapper();@Test
void testStringTemplate() throws JsonProcessingException {//准备对象User user = new User("zain", 23);//手动序列化String json = mapper.writeValueAsString(user);//写入一条数据stringRedisTemplate.opsForValue().set("jedis:user:2", json);// 读取数据String val = stringRedisTemplate.opsForValue().get("jedis:user:2");// 反序列化User user1 = mapper.readValue(val, User.class);
}

相关文章:

Redis学习路线(3)——Redis的Java客户端

一、如何使用Redis的Java客户端 官方文档&#xff1a; https://redis.io/docs/clients/java/ Java-Redis客户端使用场景Jeids 以Redis命令作为方法名称&#xff0c;学习成本低&#xff0c;简单实现&#xff0c;但是Jedis实例是线程不安全的&#xff0c;多线程环境下需要基于连…...

行车遥控接线图

这个一般只有电工才会用。 主要是 【共线和总电】让人疑惑。 这图实际就是PLC的梯形图。 共电&#xff1a;接主电源。【它串联10A保险丝&#xff0c;再到继电器】 总电&#xff1a;它是所有继电器的公共端。【共电的继电器吸合&#xff0c;共电和总电就直通了。】共电的继电器…...

区块链实验室(11) - PBFT耗时与流量特征

以前面仿真程序为例&#xff0c;分析PBFT的耗时与流量特征。实验如下&#xff0c;100个节点构成1个无标度网络&#xff0c;节点最小度为5&#xff0c;最大度为38. 从每个节点发起1次交易共识。统计每次交易的耗时以及流量。本文所述的流量见前述仿真程序的说明:区块链实验室(3)…...

Shell编程基础(三)环境变量 位置变量 系统内置变量

环境变量 & 环境变量环境变量范围父子进程之间有效指定用户有效所有用户有效 位置变量系统内置变量 环境变量 在脚本种直接定义的变量&#xff0c;只能在当前shell进程中使用 若想要在其他shell进程中使用&#xff0c;可以将变量声明为 环境变量 export 变量名 &#xff…...

P5718 【深基4.例2】找最小值

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​&#xff0c;求这 n n n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示数字个数。 第二行输入 n n n 个非负整数&#xff0c;表示 a 1 , a 2 … a n a_1,a_2 \dots a_n a1​,a2​……...

C++——STL容器之list链表的讲解

目录 一.list的介绍 二.list类成员函数的讲解 2.2迭代器 三.添加删除数据&#xff1a; 3.1添加&#xff1a; 3.2删除数据 四.排序及去重函数&#xff1a; 错误案例如下&#xff1a; 方法如下&#xff1a; 一.list的介绍 list列表是序列容器&#xff0c;允许在序列内的任何…...

使用for循环输出左上三角、右上三角、左下三角、右下三角、上下三角

1、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图形 666666666666666*/for(int i1;i<5;i){for(int j1;j<i;j){putchar(6);}printf("\n"); } return 0; } 2、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图…...

CAXA中.exb或者.dwg文件保存为PDF

通常CAXAZ中的文件为.exb或者.dwg格式&#xff0c;我们想打印或者保存为PDF文件格式&#xff0c;那么就用一下的方法&#xff1a; CAXA文件如图所示&#xff1a; 框选出你要打印的图纸&#xff01;&#xff01;&#xff01;&#xff01; 我们选择"菜单"->"…...

华为刷题:HJ3明明随机数

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int N scan.nextInt();int[] arr new int[N];for (int i 0; i < N; i) {int n sca…...

ENVI提取NDVI与植被覆盖度估算

目标是通过ENVI计算植被覆盖度结合ArcGIS出图得到植被覆盖图。 一、植被覆盖度的定义: 植被覆盖度( FractionalVegetation Cover,FVC) 通常定义为植被( 包括叶、茎、枝) 在地面的垂直投影面积占统计区总面积的百分比,它量化了植被的茂密程度,反应了植被的生长态势,是刻画…...

Arm 扩大开源合作伙伴关系,加强投入开放协作

作者&#xff1a;Arm 开源软件副总裁 Mark Hambleton Arm 和我们的生态系统的关键信念之一是与开源社区合作&#xff0c;共创一个高度发达的 Arm 架构&#xff0c;使软件的落地更加稳定&#xff0c;从而让全球数百万开发者能够测试并创建自己的应用。 为此&#xff0c;Arm 支…...

Kubernetes 的核心概念:Pod、Service 和 Namespace 解析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…...

互联网搜索的学习笔记

1. 参考资料 《Internet Search Tips》《Google Search Operators: The Complete List (42 Advanced Operators)》 2. 预备知识 2.1 查询语法 2.1.1 -&#xff1a;排除符 用于排除指定关键字。例如&#xff0c;如果想搜索“苹果”但不想看到“苹果手机”的结果&#xff0c;…...

vue事件修饰符

vue事件修饰符 1、目标2、语法 1、目标 在事件后面.修饰符名-给事件带来强大功能 2、语法 事件名.修饰符“methods里的函数” 修饰符列表 .stop - 阻止事件冒泡 示例&#xff1a; <template><div id"app"><div click"fatherFn"><…...

【安全】web中的常见编码浅析浏览器解析机制

目录 常见编码 一、ASCII码 二、URL编码 三、Unicode编码 四、HTML实体编码 结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09; 计算机内部&#xff0…...

Ceph概述、准备ceph部署环境、cephadm概述、安装Ceph集群、ceph块存储、存储池、rbd镜像管理、ceph客户端配置

day03 day03ceph概述部署Ceph节点准备cephadm准备基础环境安装ceph实现块存储块存储基础存储池镜像ceph客户端 ceph概述 ceph可以实现的存储方式&#xff1a; 块存储&#xff1a;提供像普通硬盘一样的存储&#xff0c;为使用者提供“硬盘”文件系统存储&#xff1a;类似于NFS…...

python selenium爬虫自动登录实例

拷贝地址&#xff1a;python selenium爬虫自动登录实例_python selenium登录_Ustiniano的博客-CSDN博客 一、概述 我们要先安装selenium这个库&#xff0c;使用pip install selenium 命令安装&#xff0c;selenium这个库相当于机器模仿人的行为去点击浏览器上的元素&#xff0…...

el-cascader 数据的回显

<el-cascaderplaceholder"试试搜索":options"allOptions":props"{ multiple: true }"v-model"options"filterable style"width: 80%;max-height:240px;overflow-y:scroll;"></el-cascader> allOptions里面包含…...

Java 版 spring cloud +spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…...

即时通信的方法和webSocket的具体使用

前言 之前遇到过需要即时通讯的场景&#xff0c;刚开始使用的是通过轮询的方式&#xff0c;定时器3秒向服务器请求一次数据&#xff0c;后面发现如果在手机端长时间打开使用此功能的页面&#xff0c;可能会发生手机发热&#xff0c;甚至卡顿的现象。最后改用webSocket&#xf…...

Java全栈工程师面试实录:从基础到实战的深度技术探讨

Java全栈工程师面试实录&#xff1a;从基础到实战的深度技术探讨 一、面试开场 面试官&#xff08;李工&#xff09;&#xff1a;你好&#xff0c;欢迎来到我们公司。我是李工&#xff0c;负责技术面试。今天我们会围绕你的技术栈进行一些深入交流。 应聘者&#xff08;张明&am…...

LingBot-Depth效果实测:与传感器原生深度对比的绝对误差(mm)分布图

LingBot-Depth效果实测&#xff1a;与传感器原生深度对比的绝对误差&#xff08;mm&#xff09;分布图 1. 引言&#xff1a;当深度图遇上“脑补”大师 想象一下&#xff0c;你手里有一张用深度相机拍出来的照片&#xff0c;它告诉你每个像素离相机有多远。但问题是&#xff0…...

保姆级避坑指南:在CentOS 7上手动部署MySQL 8.0二进制包(附systemd服务配置)

CentOS 7手动部署MySQL 8.0二进制包的深度避坑指南 在Linux服务器上手动部署MySQL数据库是每个运维工程师的必修课。不同于常见的yum或apt安装方式&#xff0c;二进制包部署能让你更深入地理解MySQL的运行机制&#xff0c;同时获得更灵活的控制权。但这条路并不平坦&#xff0c…...

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴+趋势分析+结论建议

Qwen3.5-2B图文对话实战&#xff1a;上传实验数据图→自动识别坐标轴趋势分析结论建议 1. 引言&#xff1a;当AI遇见科研数据分析 作为一名科研工作者&#xff0c;你是否经常遇到这样的场景&#xff1a;实验室刚跑出一组数据&#xff0c;你迫不及待想分析趋势&#xff0c;却发…...

新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图)

单细胞测序数据下载实战&#xff1a;5个避坑技巧与决策逻辑 第一次打开GEO数据库时&#xff0c;满屏的测序数据就像走进了一个没有地图的迷宫。作为刚接触单细胞转录组分析的研究生&#xff0c;我花了整整两周时间才搞明白哪些数据值得下载——期间踩过的坑包括下载了样本命名混…...

有线/无线(空口)抓包过程及其分析

一、如何判断该抓有线包&#xff0c;还是无线包层级问题类型抓包位置L1/L2&#xff08;无线&#xff09;连不上、掉线、弱信号无线抓包L2&#xff08;有线&#xff09;VLAN错误有线抓包L3&#xff08;IP&#xff09;DHCP失败有线抓包L4&#xff08;传输&#xff09;丢包、重传有…...

本地Cookie管理工具:安全导出与高效应用指南

本地Cookie管理工具&#xff1a;安全导出与高效应用指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今数字化环境中&#xff0c;Cookie作为…...

nlp_structbert_sentence-similarity_chinese-large入门指南:从ModelScope下载到本地Web服务上线

nlp_structbert_sentence-similarity_chinese-large入门指南&#xff1a;从ModelScope下载到本地Web服务上线 你是不是经常需要判断两句话是不是一个意思&#xff1f;比如&#xff0c;检查用户提问是不是同一个问题&#xff0c;或者看看两段文案是不是在说同一件事。以前做这种…...

学术论文解析神器!OpenDataLab MinerU智能文档理解实测体验

学术论文解析神器&#xff01;OpenDataLab MinerU智能文档理解实测体验 1. 前言&#xff1a;当AI遇见学术论文 对于每一位科研工作者、学生或技术从业者来说&#xff0c;阅读和整理学术论文都是一项既基础又繁重的工作。你是否也曾经历过这样的场景&#xff1a;面对一篇几十页…...

告别pip install失败:手把手教你用Anaconda虚拟环境快速部署Mayavi(Python 3.9亲测)

告别pip install失败&#xff1a;手把手教你用Anaconda虚拟环境快速部署Mayavi&#xff08;Python 3.9亲测&#xff09; 科学计算和三维可视化是Python生态中的重要应用场景&#xff0c;而Mayavi作为一款强大的三维数据可视化库&#xff0c;在流体力学、医学影像、地质勘探等领…...