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

深入学习 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 天,你的服务器就会被黑客攻击)

我们有两种办法

  1. 将 java 程序打包成 jar 包,放到 linux 服务器上执行(过于麻烦,不推荐);
  2. 匹配 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、准备工作&#xff08;ssh 隧道&#xff09; 2.2、概要 2.2、string 2.3、hash 2.4、list 2.5、set 2.5、zset 一、Jedis 依赖 自己去 中央仓库 上面找. 二、Java 客户端操控 redis 2.1、准备工作&#xff08;ssh 隧…...

019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识

019 - STM32学习笔记 - Fatfs文件系统&#xff08;一&#xff09; - FatFs文件系统初识 最近工作比较忙&#xff0c;没时间摸鱼学习&#xff0c;抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候&#xff0c;可以调用SPI_FLASH_BufferWrite函数&#xff0c;将数…...

Selenium开发环境搭建

1.下载Python https://www.python.org/downloads/ 下载下来选择自己创建的路径进行安装&#xff0c;然后配置环境变量 cmd命令框查看 2.安装selenium cmd命令框输入&#xff1a; pip install selenium3.下载pycharm https://www.jetbrains.com/pycharm/download/#sec…...

解决 The ‘more_itertools‘ package is required

在使用爬虫获取维基百科数据时看到了一个很好的项目&#xff1a; 博客&#xff1a;https://blog.51cto.com/u_15919249/5962100 项目地址&#xff1a;https://github.com/wjn1996/scrapy_for_zh_wiki 但在使用过程中遇到若干问题&#xff0c;记录一下&#xff1a; The more_it…...

手把手教你在云环境炼丹(部署Stable Diffusion WebUI)

前几天写了一篇《手把手教你在本机安装Stable Diffusion秋叶整合包》的文章&#xff0c;有些同学反映对硬件的要求太高&#xff0c;显卡太TM贵了。今天我再分享一个云服务器炼丹的方法&#xff0c;方便大家快速入门上手&#xff0c;这个云服务不需要特殊网络设置&#xff0c;能…...

pytorch-gpu 极简安装

1、进入pytoch官网&#xff1a;PyTorch 找到pytorch-gpu版本&#xff0c;看到CUDA11.8、11.7、CPU&#xff0c;这里我选择安装CUDA11.8 2、下载CUDA Toolkit&#xff1a;CUDA Toolkit 11.8 Downloads | NVIDIA Developer 3、下载CUDANN&#xff1a;cuDNN Download | NVIDIA D…...

有道云笔记迁移到自建服务器Joplin

当前有道云笔记各项业务开始逐渐向会员靠拢&#xff0c;如一开始不受限的多端同步现在非会员限制成了两个终端&#xff0c;估计以后会有越来越多的免费内容会逐渐的向会员转移&#xff0c;因此博主开始考虑自建服务器来搞一个云笔记服务端。 因博主已有黑群晖&#xff0c;并且有…...

qt源码--事件系统之QAbstractEventDispatcher

1、QAbstractEventDispatcher内容较少&#xff0c;其主要是定义了一些注册接口&#xff0c;如定时器事件、socket事件、注册本地事件、自定义事件等等。其源码如下&#xff1a; 其主要定义了大量的纯虚函数&#xff0c;具体的实现会根据不同的系统平台&#xff0c;实现对应的方…...

深入了解Python中的os.path.join函数

深入了解Python中的os.path.join函数 1. 引言 在Python中&#xff0c;处理文件和目录路径是常见的任务。为了简化路径的拼接和操作&#xff0c;Python提供了os.path模块&#xff0c;其中的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 定时器 一、开发环境介绍 操作系统&#xff1a;UOS1060专业版本。 cocos2dx:版本 环境搭建教程&#xff1a; 统信UOS下配…...

打卡力扣题目十二

#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、解题方法一 三、解题方法二 关于 ARTS 的释义 —— 每周完成一个 ARTS&#xff1a; ● 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支持多种虚拟磁盘格式&#xff0c;以下是一些常见的格式&#xff1a; Thick Provision Lazy Zeroed&#xff1a;这是vSphere中的默认格式。它会预分配虚拟磁盘所需的存储空间&#xff0c;但只有在虚…...

初识mysql数据库之事务的概念及操作

目录 一、数据库多客户端访问问题 1. 数据库的CURD无限制带来的问题 2. 如何解决CURD导致的问题 二、事务的概念 1. 什么是事务 2. 事务的四个属性 3. mysql对事务的管理 4. 为什么会有事务 5. 事务的版本支持 三、事务的操作 1. 事务提交方式 2. 事务操作的准备工…...

MPL-2.0(Mozilla Public License 2.0)

MPL-2.0&#xff08;Mozilla Public License 2.0&#xff09;是一种开源软件许可证&#xff0c;由 Mozilla 组织于2012年发布&#xff0c;用于授权开源项目。MPL-2.0 是 MPL-1.1 许可证的继任版本&#xff0c;旨在更好地适应现代开源软件的发展和使用。 MPL-2.0 许可证的主要特…...

Qt+OpenCV+VTK在VS2017中配置路径

QtOpenCVVTK在VS2017中配置路径 《Qt环境配置》《OpenCV环境配置》《VTK环境配置》 《Qt环境配置》 包含目录&#xff1a; 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)具体型矩阵试根法、多项式带余除法&#xff1a;三阶多项式分解因式 (2)抽象型矩阵 (二) 相似1.矩阵相似(1)定义(2)性质 2.相似对角化(1)定义(2)相似对角化的条件&#xff08;n阶矩阵A可相…...

Java8实战-总结9

Java8实战-总结9 Lambda表达式把Lambda付诸实践&#xff1a;环绕执行模式第1步&#xff1a;记得行为参数化第2步&#xff1a;使用函数式接口来传递行为第3步&#xff1a;执行一个行为第4步&#xff1a;传递Lambda 使用函数式接口PredicateConsumerFunction原始类型特化 Lambda表…...

大数据开发面试必问:Hive调优技巧系列一

Hive必问调优 Hive 调优拆解:Hive SQL 几乎是每一位互联网分析师的必备技能&#xff0c;相信很多小伙伴都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要&#xff0c;hive优化也是小伙伴应该掌握的一项技能&#xff0c;本篇文章具体从hive建表优化、HQ…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...