深入学习 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…...

Jupyter Notebook 7重磅发布,新增多个特性!
本文分享Jupyter Notebook大版本v7.0.0更新亮点,及简单测试! 近日,Jupyter Notebook大版本v7.0.0更新,Jupyter Notebook 7基于JupyterLab,因此它包含了过去几年JupyterLab中添加的许多新功能和改进,部分亮…...

linux V4L2子系统——v4l2架构(1)之整体架构
概述 V4L(Video for Linux)是Linux内核中关于视频设备的API接口,涉及视频设备的音频和视频信息采集及处理、视频设备的控制。V4L出现于Linux内核2.1版本,经过修改bug和添加功能,Linux内核2.5版本推出了V4L2(…...

Qt信号与槽机制的本质
引入 对象与对象之间的通信有多个方式,如果我们要提供一种对象之间的通信机制。这种机制,要能够给两个不同对象中的函数建立映射关系,前者被调用时后者也能被自动调用。 再深入一些,两个对象如果都互相不知道对方的存在ÿ…...

Linux:入门学习知识及常见指令
文章目录 入门介绍操作系统的概念Linux机器的使用Linux上的指令 对文件知识的补充文件的定义和一些含义文件和目录的存储绝对路径和相对路径 ls指令pwd指令cd指令touch指令mkdir指令rmdir指令rm指令man指令cp指令mv指令cat指令more指令echo指令输出重定向 less指令find指令grep…...

K8s:Kubernetes 故障排除方法论
写在前面 博文内容为节译整理文中提到的工具大部分是商业软件,不是开源的,作为了解理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它…...

TCP 三次握手四次挥手浅析
大家都知道传输层中的TCP协议是面向连接的,提供可靠的连接服务,其中最出名的就是三次握手和四次挥手。 一、三次握手 三次握手的交互过程如下 喜欢钻牛角尖的我在学习三次握手的时候就想到了几个问题:为什么三次握手是三次?不是…...

【软件安装】MATLAB_R2021b for mac 安装
Mac matlab_r2021b 安装 下载链接:百度网盘 下载链接中所有文件备用。 我所使用的电脑配置: Macbook Pro M1 Pro 16512 系统 macOS 13.5 安装步骤 前置准备 无此选项者,自行百度 “mac 任何来源”。 1 下载好「MATLAB R2021b」安装文…...

电脑维护:10妙招,让你的电脑更加稳定!
你的电脑已经成为你工作、学习、娱乐的最佳工具之一,但是如果你不做好电脑维护工作,就可能面临着电脑变慢、蓝屏、崩溃等问题。在这篇文章中,我们将介绍10个电脑维护步骤,让你的电脑更加稳定! 为什么需要电脑维护&…...

大数据面试题:Kafka的单播和多播
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 参考答案: 1、单播 一条消息只能被某一个消费者消费的模式称为单播。要实现消息单播,只要让这些消费者属于同一个消费者组即…...

python与深度学习(八):CNN和fashion_mnist二
目录 1. 说明2. fashion_mnist的CNN模型测试2.1 导入相关库2.2 加载数据和模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章训练的模型进行测…...