深入学习 Redis - 基于 Jedis 通过 Java 客户端操作 Redis
目录
一、Jedis 依赖
二、Java 客户端操控 redis
2.1、准备工作(ssh 隧道)
2.2、概要
2.2、string
2.3、hash
2.4、list
2.5、set
2.5、zset
一、Jedis 依赖
自己去 中央仓库 上面找.
二、Java 客户端操控 redis
2.1、准备工作(ssh 隧道)
想要连接上云服务器上的 redis ,就需要开放 6379 端口,但是一旦开饭这个端口是十分危险的!!!(不出 3 天,你的服务器就会被黑客攻击)
我们有两种办法
- 将 java 程序打包成 jar 包,放到 linux 服务器上执行(过于麻烦,不推荐);
- 匹配 ssh 端口转发,把云服务器的 redis 端口,映射到本地主机(推荐).
因此我们来讲讲第二种办法~
我们在本地 windows 主机上,使用 xshell 连接远程服务器,主要就是通过 ssh 协议(默认走 22 端口)实现通信的,他有一个很重要的特性,就是支持端口转发! 我们只需要配置 ssh 程序监听本地端口,映射到云服务器的端口,就可以实现通过 windows 主机,访问云服务器的 6379 端口.
具体的,我们只需要再 xshell 上配置连接信息即可:

Ps:当配置了端口准发后,一定要断开之前的连接,重新连接才能生效.
2.2、概要
基于前面对 redis 指令的学习,这里使用 jedis 这个库来操控 redis。
Ps:一个优秀的库,一定是非常容易上手的,因此接下来介绍的操作,不会覆盖到所有指令,会挑选出一些重要 / 代表性的命令,来进行演示~
使用 jedis 操控 redis 类似于 JDBC ,我们可以先创建 连接池,然后拿到连接,执行完操作后再释放连接,因此后续讲的所有操作,都是基于以下代码:
public static void main(String[] args) {//这里只是开发阶段这么写,要是部署到云服务器上,就需要根据实际情况来配置这个的 ip 和端口号.JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");//使用 try,出代码块时自动释放 jedis 连接(不是关闭,而是放回到连接池中)try(Jedis jedis = jedisPool.getResource()) {// 测试场景:// ......test1(jedis);}}
2.2、string
public class JedisString {private static void test1(Jedis jedis) {System.out.println("------------------------------------");System.out.println("mget 和 mset");//这里为了演示效果,使用之前会先释放所有 keyjedis.flushAll();jedis.mset("key1", "value1", "key2", "value2", "key3", "value3");List<String> values = jedis.mget("key1", "key2", "key3", "key100");System.out.println(values);}private static void test2(Jedis jedis) {System.out.println("------------------------------------");System.out.println("getrange 和 setrange");jedis.flushAll();jedis.set("key", "helloworld");String value1 = jedis.getrange("key", 2, 5);System.out.println("value1: " + value1);jedis.setrange("key", 2, "cykkk");String value2 = jedis.get("key");System.out.println("value2: " + value2);}private static void test3(Jedis jedis) {System.out.println("------------------------------------");System.out.println("append");jedis.flushAll();jedis.set("key1", "hello");jedis.append("key1", " world");String value1 = jedis.get("key1");System.out.println("value1: " + value1);}private static void test4(Jedis jedis) {System.out.println("------------------------------------");System.out.println("incr 和 decr");jedis.flushAll();jedis.set("key1", "10");jedis.incr("key1");System.out.println("inct key1: " + jedis.get("key1"));jedis.set("key1", "10");jedis.decr("key1");System.out.println("decr key2: " + jedis.get("key1"));}public static void main(String[] args) {//这里只是开发阶段这么写,要是部署到云服务器上,就需要根据实际情况来配置这个的 ip 和端口号.JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");//使用 try,出代码块时自动释放 jedis 连接(不是关闭,而是放回到连接池中)try(Jedis jedis = jedisPool.getResource()) {// 测试场景:// ......test1(jedis);test2(jedis);test3(jedis);test4(jedis);}}}

2.3、hash
public class JedisHash {private static void test1(Jedis jedis) {System.out.println("-----------------------------------");System.out.println("hset 和 hget");jedis.flushAll();jedis.hset("key1", "f1", "v1");String result = jedis.hget("key1", "f1");System.out.println("result: " + result);Map<String, String> map = new HashMap<>();map.put("f1", "v1");map.put("f2", "v2");map.put("f3", "v3");jedis.hset("key2", map);System.out.println("key2: " + jedis.hgetAll("key2"));}private static void test2(Jedis jedis) {System.out.println("-----------------------------------");System.out.println("hexists");jedis.flushAll();jedis.hset("key1", "f1", "v1");boolean result1 = jedis.hexists("key1", "f1");boolean result2 = jedis.hexists("key1", "f2");System.out.println("result1: " + result1);System.out.println("result2: " + result2);}private static void test3(Jedis jedis) {System.out.println("-----------------------------------");System.out.println("hdel");jedis.flushAll();jedis.hset("key1", "f1", "v1");jedis.hset("key1", "f2", "v2");jedis.hset("key1", "f3", "v3");long result = jedis.hdel("key1", "f1");System.out.println("result: " + result);System.out.println("f1: " + jedis.hget("key1", "f1"));System.out.println("f2: " + jedis.hget("key1", "f2"));System.out.println("f3: " + jedis.hget("key1", "f3"));}private static void test4(Jedis jedis) {System.out.println("-----------------------------------");System.out.println("hkeys 和 hvals");jedis.flushAll();Map<String, String> map = new HashMap<>();map.put("f1", "v1");map.put("f2", "v2");map.put("f3", "v3");jedis.hmset("key1", map);Set<String> set = jedis.hkeys("key1");List<String> list = jedis.hvals("key1");System.out.println("key1 -> field:" + set);System.out.println("key2 -> value:" + list);}public static void main(String[] args) {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try(Jedis jedis = jedisPool.getResource()) {test1(jedis);test2(jedis);test3(jedis);test4(jedis);}}}

2.4、list
public class JedisList {private static void test1(Jedis jedis) {System.out.println("---------------------------");System.out.println("lpush 和 lrange");jedis.flushAll();jedis.lpush("key1", "value1", "value2", "value3");List<String> result = jedis.lrange("key1", 0 ,-1);System.out.println(result);}private static void test2(Jedis jedis) {System.out.println("---------------------------");System.out.println("rpush");jedis.flushAll();jedis.rpush("key1", "value1", "value2", "value3");List<String> result = jedis.lrange("key1", 0 ,-1);System.out.println(result);}private static void test3(Jedis jedis) throws InterruptedException {System.out.println("---------------------------");System.out.println("blpop");jedis.flushAll();List<String> result = jedis.blpop(100, "key1");System.out.println(result.get(0));System.out.println(result.get(1));}public static void main(String[] args) throws InterruptedException {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try(Jedis jedis = jedisPool.getResource()) {test1(jedis);test2(jedis);test3(jedis);}}}

2.5、set
public class JedisSet {private static void test1(Jedis jedis) {System.out.println("-------------------------");System.out.println("sadd 和 smembers");jedis.flushAll();jedis.sadd("key1", "m1", "m2", "m3");Set<String> set = jedis.smembers("key1");System.out.println(set);}private static void test2(Jedis jedis) {System.out.println("-------------------------");System.out.println("sismember");jedis.flushAll();jedis.sadd("key1", "m1", "m2", "m3");boolean result1 = jedis.sismember("key1", "m2");boolean result2 = jedis.sismember("key1", "m100");System.out.println("result1: " + result1);System.out.println("result2: " + result2);}private static void test3(Jedis jedis) {System.out.println("-------------------------");System.out.println("scard");jedis.flushAll();jedis.sadd("key1", "m1", "m1", "m3");long result = jedis.scard("key1");System.out.println("result: " + result);}private static void test4(Jedis jedis) {System.out.println("-------------------------");System.out.println("spop");jedis.flushAll();jedis.sadd("key1", "m1", "m1", "m3");String result = jedis.spop("key1");System.out.println("result: " + result);}private static void test5(Jedis jedis) {System.out.println("-------------------------");System.out.println("sinter");jedis.flushAll();jedis.sadd("key1", "m1", "m2", "m3");jedis.sadd("key2", "m2", "m3", "m4");Set<String> set = jedis.sinter("key1", "key2");System.out.println(set);}private static void test6(Jedis jedis) {System.out.println("-------------------------");System.out.println("sinter");jedis.flushAll();jedis.sadd("key1", "m1", "m2", "m3");jedis.sadd("key2", "m2", "m3", "m4");long len = jedis.sinterstore("keyStore", "key1", "key2");System.out.println("len: " + len);System.out.println("keyStore: " + jedis.smembers("keyStore"));}public static void main(String[] args) {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try(Jedis jedis = jedisPool.getResource()) {test1(jedis);test2(jedis);test3(jedis);test4(jedis);test5(jedis);test6(jedis);}}}

2.5、zset
public class JedisZset {private static void test1(Jedis jedis) {System.out.println("-----------------------------");System.out.println("zadd 和 zrange");jedis.flushAll();jedis.zadd("key1", 10, "aaa");Map<String, Double> map = new HashMap<>();map.put("bbb", 20.0);map.put("ccc", 30.0);jedis.zadd("key1", map);List<String> list = jedis.zrange("key1", 0 ,-1);System.out.println(list);}private static void test2(Jedis jedis) {System.out.println("-----------------------------");System.out.println("zcard");jedis.flushAll();jedis.zadd("key1", 10, "aaa");jedis.zadd("key1", 20, "bbb");jedis.zadd("key1", 30, "ccc");long len = jedis.zcard("key1");System.out.println(len);}private static void test3(Jedis jedis) {System.out.println("-----------------------------");System.out.println("zrem");jedis.flushAll();jedis.zadd("key1", 10, "aaa");jedis.zadd("key1", 20, "bbb");jedis.zadd("key1", 30, "ccc");long count = jedis.zrem("key1", "aaa", "bbb", "xxx");System.out.println(count);}private static void test4(Jedis jedis) {System.out.println("-----------------------------");System.out.println("zscore 和 zrank");jedis.flushAll();jedis.zadd("key1", 10, "aaa");jedis.zadd("key1", 20, "bbb");jedis.zadd("key1", 30, "ccc");Double score = jedis.zscore("key1", "bbb");Long rank = jedis.zrank("key1", "bbb");System.out.println("score: " + score);System.out.println("rank: " + rank);}public static void main(String[] args) {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try(Jedis jedis = jedisPool.getResource()) {test1(jedis);test2(jedis);test3(jedis);test4(jedis);}}}

相关文章:
深入学习 Redis - 基于 Jedis 通过 Java 客户端操作 Redis
目录 一、Jedis 依赖 二、Java 客户端操控 redis 2.1、准备工作(ssh 隧道) 2.2、概要 2.2、string 2.3、hash 2.4、list 2.5、set 2.5、zset 一、Jedis 依赖 自己去 中央仓库 上面找. 二、Java 客户端操控 redis 2.1、准备工作(ssh 隧…...
019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识
019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识 最近工作比较忙,没时间摸鱼学习,抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候,可以调用SPI_FLASH_BufferWrite函数,将数…...
Selenium开发环境搭建
1.下载Python https://www.python.org/downloads/ 下载下来选择自己创建的路径进行安装,然后配置环境变量 cmd命令框查看 2.安装selenium cmd命令框输入: pip install selenium3.下载pycharm https://www.jetbrains.com/pycharm/download/#sec…...
解决 The ‘more_itertools‘ package is required
在使用爬虫获取维基百科数据时看到了一个很好的项目: 博客:https://blog.51cto.com/u_15919249/5962100 项目地址:https://github.com/wjn1996/scrapy_for_zh_wiki 但在使用过程中遇到若干问题,记录一下: The more_it…...
手把手教你在云环境炼丹(部署Stable Diffusion WebUI)
前几天写了一篇《手把手教你在本机安装Stable Diffusion秋叶整合包》的文章,有些同学反映对硬件的要求太高,显卡太TM贵了。今天我再分享一个云服务器炼丹的方法,方便大家快速入门上手,这个云服务不需要特殊网络设置,能…...
pytorch-gpu 极简安装
1、进入pytoch官网:PyTorch 找到pytorch-gpu版本,看到CUDA11.8、11.7、CPU,这里我选择安装CUDA11.8 2、下载CUDA Toolkit:CUDA Toolkit 11.8 Downloads | NVIDIA Developer 3、下载CUDANN:cuDNN Download | NVIDIA D…...
有道云笔记迁移到自建服务器Joplin
当前有道云笔记各项业务开始逐渐向会员靠拢,如一开始不受限的多端同步现在非会员限制成了两个终端,估计以后会有越来越多的免费内容会逐渐的向会员转移,因此博主开始考虑自建服务器来搞一个云笔记服务端。 因博主已有黑群晖,并且有…...
qt源码--事件系统之QAbstractEventDispatcher
1、QAbstractEventDispatcher内容较少,其主要是定义了一些注册接口,如定时器事件、socket事件、注册本地事件、自定义事件等等。其源码如下: 其主要定义了大量的纯虚函数,具体的实现会根据不同的系统平台,实现对应的方…...
深入了解Python中的os.path.join函数
深入了解Python中的os.path.join函数 1. 引言 在Python中,处理文件和目录路径是常见的任务。为了简化路径的拼接和操作,Python提供了os.path模块,其中的join函数是一个非常重要且常用的函数。本文将深入介绍os.path.join函数的用法和注意事…...
Node.js:execSync执行一个shell命令
默认输出是Buffer对象 const { execSync } require(child_process)let out execSync("echo hi") console.log(out); // <Buffer 68 69 0a>需要转为字符串 const { execSync } require(child_process)let out execSync("echo hi") console.log(…...
《入门级-Cocos2d 4.0塔防游戏开发》---第二课:游戏加载界面开发
目录 一、开发环境介绍 二、开发内容 2.1 修改窗口的大小。 2.2 添加加载场景相关代码 2.3 添加资源 三、显示效果 四、知识点 4.1 Sprite 4.2 定时器 一、开发环境介绍 操作系统:UOS1060专业版本。 cocos2dx:版本 环境搭建教程: 统信UOS下配…...
打卡力扣题目十二
#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、解题方法一 三、解题方法二 关于 ARTS 的释义 —— 每周完成一个 ARTS: ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技术技巧 ● Share: …...
QT服务器练习
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this); }Widget::~Widget() {delete ui; }//启动服务器按钮对…...
Vcenter 创建 虚拟机配置 Thin Provision 模式 disk
介绍 在vCenter中选择虚拟磁盘格式通常也取决于您的需求和使用情况。 vSphere支持多种虚拟磁盘格式,以下是一些常见的格式: Thick Provision Lazy Zeroed:这是vSphere中的默认格式。它会预分配虚拟磁盘所需的存储空间,但只有在虚…...
初识mysql数据库之事务的概念及操作
目录 一、数据库多客户端访问问题 1. 数据库的CURD无限制带来的问题 2. 如何解决CURD导致的问题 二、事务的概念 1. 什么是事务 2. 事务的四个属性 3. mysql对事务的管理 4. 为什么会有事务 5. 事务的版本支持 三、事务的操作 1. 事务提交方式 2. 事务操作的准备工…...
MPL-2.0(Mozilla Public License 2.0)
MPL-2.0(Mozilla Public License 2.0)是一种开源软件许可证,由 Mozilla 组织于2012年发布,用于授权开源项目。MPL-2.0 是 MPL-1.1 许可证的继任版本,旨在更好地适应现代开源软件的发展和使用。 MPL-2.0 许可证的主要特…...
Qt+OpenCV+VTK在VS2017中配置路径
QtOpenCVVTK在VS2017中配置路径 《Qt环境配置》《OpenCV环境配置》《VTK环境配置》 《Qt环境配置》 包含目录: D:\Qt\Qt5.12.11\5.12.11\msvc2017_64\include D:\Qt\Qt5.12.11\5.12.11\msvc2017_64\include\QtWidgets D:\Qt\Qt5.12.11\5.12.11\msvc2017_64\include…...
线性代数(应用篇):第五章:特征值与特征向量、第六章:二次型
文章目录 第5章 特征值与特征向量、相似矩阵(一) 特征值与特征向量1.定义2.性质3.求解(1)具体型矩阵试根法、多项式带余除法:三阶多项式分解因式 (2)抽象型矩阵 (二) 相似1.矩阵相似(1)定义(2)性质 2.相似对角化(1)定义(2)相似对角化的条件(n阶矩阵A可相…...
Java8实战-总结9
Java8实战-总结9 Lambda表达式把Lambda付诸实践:环绕执行模式第1步:记得行为参数化第2步:使用函数式接口来传递行为第3步:执行一个行为第4步:传递Lambda 使用函数式接口PredicateConsumerFunction原始类型特化 Lambda表…...
大数据开发面试必问:Hive调优技巧系列一
Hive必问调优 Hive 调优拆解:Hive SQL 几乎是每一位互联网分析师的必备技能,相信很多小伙伴都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要,hive优化也是小伙伴应该掌握的一项技能,本篇文章具体从hive建表优化、HQ…...
AI导演系统:编排角色扮演,让多智能体协作效率飙升10倍
🧑💻 博主介绍 & 诚邀关注 作者:专注于 Java、Python、前端开发的技术博主 | 全网粉丝 30 万 在校期间协助导师完成毕业设计课题分类、论文格式初审及代码整理工作;工作后持续分享毕设思路,助力毕业生顺利完成…...
WireUI颜色选择器和日期选择器:提升用户体验的利器 [特殊字符][特殊字符]
WireUI颜色选择器和日期选择器:提升用户体验的利器 🎨📅 【免费下载链接】wireui TallStack UI components 项目地址: https://gitcode.com/gh_mirrors/wi/wireui WireUI颜色选择器和日期选择器是Laravel Livewire应用中提升用户体验的…...
深入理解Famous Engine场景图系统:构建复杂UI的10个技巧
深入理解Famous Engine场景图系统:构建复杂UI的10个技巧 【免费下载链接】engine 项目地址: https://gitcode.com/gh_mirrors/engine2/engine Famous Engine是一个强大的开源框架,专为构建高性能、复杂交互的用户界面而设计。其核心的场景图系统…...
【扣子coze教程】0成本搭建自动生成公众号的飞书智能体(附实战工作流)
今天教大家0成本搭建自动生成公众号的飞书智能体,并部署至飞书。话不多说,咋们直接开始~ 1. 采集网站文章的工作流 如下是完整的工作流1.1 登录多维飞书表格 创建url、title、content、new_content列,为后续保存位置做准备其中url用以存放网页…...
C++面试考点 头文件与实现文件形式
为什么C标准头文件没有所谓的.h后缀? 在一个源文件中,函数模板的声明与定义分离是可以的,即使把函数模板的实现放在调用 之下也是ok的,与普通函数一致。//函数模板的声明 template <class T> T add(T t1, T t2);…...
护照照片怎么在手机上拍好?2026年用微信小程序搞定的完整方案
很多人做护照照片默认找线下照相馆,但其实用手机微信小程序这个组合已经完全够用。微信里有个叫多多职业照的小程序在处理各类证件照的需求上效率比较高,这篇文章就详细拆解一下这个方向,搭配同家的立得一寸照、奈斯证照助手、抠图喵作为补充…...
萨科微宋仕强“华强北山寨手机”研究
萨科微宋仕强“华强北山寨手机”研究(十六),手机的灰色产业链。华强北每个手机柜台背后都有灰色供应链支撑。如香港手机比华强北便宜,就通过各种渠道从香港走私过来。沙头角的中英街两边分属于香港和深圳,香港一侧的走…...
毕业论文难写?2026年AI论文平台排行榜权威发布,轻松定稿不是梦!
写论文效率低、熬夜赶稿、查重不过关?别慌!2026 年最新 AI 论文写作软件排行榜来了,覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程,帮你精准匹配最适合的学术助手,彻底告别论文内耗!Ἴ…...
30天试用期即将到期?3种方法一键重置JetBrains IDE,告别频繁重装烦恼
30天试用期即将到期?3种方法一键重置JetBrains IDE,告别频繁重装烦恼 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经因为JetBrains IDE试用期到期而不得不重新安装软件…...
抓包实战:用Wireshark深度解析ENSP中VxLAN静态隧道的封装过程
抓包实战:用Wireshark深度解析ENSP中VxLAN静态隧道的封装过程 当你第一次在Wireshark中看到VxLAN报文时,是否曾被那层层嵌套的协议头搞得一头雾水?本文将带你亲历一次完整的VxLAN报文"解剖"过程,通过ENSP实验环境中的真…...
