java 操作 redis

文章目录

  • 一. java 操作 redis
    • 1. 引入依赖
    • 2. 配置端口转发
    • 3. 连接redis服务器
  • 二. 基础命令
      • get/set
      • exists/del
      • KEYS
      • EXPIRE/TTL
      • TYPE

之前介绍的是各种redis的基本操作/命令, 都是在redis命令行客户端, 手动执行的
但是在日常开发中, 更多的是使用redis的api, 来实现定制化的redis客户端程序, 进一步操作redis服务器

redis服务器在官网公开了使用的协议RESP, 任何一个第三方都可以通过上述协议, 实现一个和redis服务器通信的客户端程序

已经有很多大佬做好了库, 可以让我们直接调用(不必关注redis协议的细节)

在java生态中, 封装了RESP协议, 实现的redis客户端有很多, 我们主要使用jedis

一. java 操作 redis

1. 引入依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.1.0</version>
</dependency>

2. 配置端口转发

我们的windows电脑, 需要通过终端(xshell)登录云服务器的外网IP, 才能访问到linux云服务器, 本质上也是网络通信, 通过ssh协议/程序, 默认是访问22端口号, 这样才能达到远程操控的目的
在这里插入图片描述
之前, 我们是通过在云服务器端开放端口号, 来访问程序, 但是这个方法是非常不安全的, redis服务器的端口号6379, 非常容易被黑客入侵
ssh协议功能非常强大, 其中有一个很重要的功能, 就是支持端口转发, 可以理解为通过ssh的22端口, 来传递其他端口的数据
于是我们可以构造一个特殊的ssh数据包, 把要访问的redis请求, 放到ssh数据包中
在这里插入图片描述
这个数据包就会通过22端口发送给服务器, 服务器的ssh服务器程序, 就能解析出上述的数据包, 然后把数据包交给6379端口的程序
一个linux主机上, 存在的服务器有很多, ssh也可能需要给多个端口提供数据, 这个时候, 为了区分不同的端口, 往往会把服务器的端口在本地用另外一个端口来进行表示
此时, 我们只需要进行简单的配置, 后续就能将本地的端口当做云服务器的端口使用
在这里插入图片描述
在这里插入图片描述
将6379端口号, 映射到本地的8888端口号
在这里插入图片描述
在本地验证8888端口是否被占用, 被占用则映射成功
注意: 只有当ssh连接上之后, 端口转发才能生效

3. 连接redis服务器

在这里插入图片描述

public class RedisDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()){
            String pong = jedis.ping();
            System.out.println(pong);
        }
    }
}

在这里插入图片描述

在这里插入图片描述

二. 基础命令

get/set

  public static void test1(Jedis jedis){
        jedis.flushAll();
        jedis.set("key1", "111");
        jedis.set("key2", "222");
        SetParams params = new SetParams();
        params.ex(10);
        params.xx();//存在设置成功
//        params.nx();//不存在设置成功
        jedis.set("key1", "444", params);

        String value = jedis.get("key1");
        System.out.println(value);
    }

exists/del

   public static void test2(Jedis jedis){
        jedis.flushAll();
        jedis.set("key1", "111");
        jedis.set("key2", "222");
        boolean result = jedis.exists("key1");
        System.out.println("result = " + result);
        long result2 = jedis.del("key1");
        System.out.println("result2 = " + result2);
        result = jedis.exists("key1");
        System.out.println("result = " + result);
        result2 = jedis.del("key1", "key2", "key3");//删除多个.
        System.out.println("result2 = " + result2);
    }

KEYS

 public static void test3(Jedis jedis){
        jedis.flushAll();
        jedis.set("key1", "111");
        jedis.set("key2", "222");
        jedis.set("key3", "333");
        jedis.set("key4", "444");

        Set<String> keys = jedis.keys("*");
        System.out.println(keys);
    }

EXPIRE/TTL

public static void test4(Jedis jedis) throws InterruptedException {
       jedis.flushAll();
       jedis.set("key", "111");
       jedis.expire("key", 10);
       Thread.sleep(3000);
       long time = jedis.ttl("key");
       System.out.println(time);
   }

TYPE

    public static void test5(Jedis jedis){
        jedis.flushAll();
        jedis.set("key", "111");
        String type = jedis.type("key");
        System.out.println(type);

        jedis.lpush("key2", "111", "222", "333");
        type = jedis.type("key2");
        System.out.println(type);

        jedis.hset("key3", "f1", "111");
        type = jedis.type("key3");
        System.out.println(type);

        jedis.sadd("key4", "111", "222", "333");
        type = jedis.type("key4");
        System.out.println(type);

        jedis.zadd("key5", 10, "zhangsan");
        type = jedis.type("key5");
        System.out.println(type);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/931981.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WGAN生成对抗网络数据生成

数据生成 | WGAN生成对抗网络数据生成 目录 数据生成 | WGAN生成对抗网络数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 1.WGAN生成对抗网络&#xff0c;数据生成&#xff0c;样本生成程序&#xff0c;MATLAB程序&#xff1b; 2.适用于MATLAB 2020版及以上版本&…

飞凌嵌入式受邀亮相瑞萨2024工业技术研讨会

11月30日&#xff0c;一年一度的2024瑞萨电子MCU/MPU工业技术研讨会在深圳举行了首秀&#xff0c;为大湾区及全国嵌入式工程师献上一场全新工业技术的大秀。 飞凌嵌入式作为瑞萨电子的生态合作伙伴&#xff0c;给现场观众带去了基于RZ/G2L高性能多核异构处理器设计开发的FET-G2…

C++STL容器vector容器大小相关函数

目录 前言 主要参考 vector::size vector::max_size vector::resize vector::capacity vector::empty vector::reserve vector::shrink_to_fit 共勉 前言 本文将讨论STL容器vector中与迭代器相关的函数&#xff0c;模板参数T为int类型。 主要参考 cpluscplus.com 侯…

JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))

目录 一、Servlet详细。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 &#xff08;1&#xff09;实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…

Spring Boot读取配置文件的六种方案

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;但就是这么常用的功能&#xff0c;仍然有很多开发者在这个方面踩坑&#xff0c;以下是我整理的几种获取配置属性的方式。 一、Environment 使用 Environment 方式来获取配置属性值非常简单&#xf…

在google cloud虚拟机上配置anaconda虚拟环境简单教程

下载anaconda安装包 wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh 安装 bash Anaconda3-2022.10-Linux-x86_64.sh 进入base环境 eval "$(/home/xmxhuihui/anaconda3/bin/conda shell.bash hook)" source ~/.bashrc 安装虚拟环境…

【5G】5G目标和标准化 5G targets and standardization

5G标准是在第三代合作伙伴关系项目&#xff08;3GPP&#xff0c;3rd Generation Partnership Project&#xff09;中定义的&#xff0c;实际的标准制定工作由参与3GPP活动的区域标准机构成员共同推进。目前&#xff0c;超过600家公司通过各自的地区标准组织成为3GPP的成员。然而…

神经网络的梯度反向传播计算过程,举例说明

目录 神经网络的梯度反向传播计算过程 网络结构 权重和偏置 激活函数 前向传播 损失函数 反向传播 参数更新 举例 神经网络的梯度反向传播计算过程 为了说明神经网络的梯度反向传播计算过程,我们考虑一个简单的全连接网络,该网络有一个输入层、一个隐藏层和一个输出…

网络分层模型( OSI、TCP/IP、五层协议)

1、网络分层模型 计算机网络是一个极其复杂的系统。想象一下最简单的情况&#xff1a;两台连接在网络上的计算机需要相互传输文件。不仅需要确保存在一条传输数据的通路&#xff0c;还需要完成以下几项工作&#xff1a; 发起通信的计算机必须激活数据通路&#xff0c;这包括发…

Unity中使用Sqlite存储本地数据

sqlite-net sqlite下载页 我的环境&#xff1a;win11、unity团结1.3.4 1.下载sqlite-net&#xff0c;将SQLite.cs脚本导入Unity 2.下载各平台依赖项&#xff0c;如dll、aar等。导入Unity并设置 3.简单列子&#xff0c;打包测试 using System; using System.IO; using SQLi…

详解LeetCode地下城游戏(动态规划)——区分两种状态表示形式

地下城游戏 题目链接&#xff1a;174. 地下城游戏 状态表示&#xff1a; 按照以往题的表示&#xff0c;dp[i][j]表示&#xff1a;从起点&#xff08;0&#xff0c;0&#xff09;位置到达&#xff08;i&#xff0c;j&#xff09;位置时&#xff0c;所需的最小初始健康值。但是…

【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)

本文详细介绍了String类以及常用的String相关方法&#xff0c;以及StrinBuftrer , StringBulder相关方法的使用&#xff0c;建议有印象即可&#xff0c;不需要都记住&#xff0c;使用时去查取即可 一、创建一个String类型的变量 我们平时创建String类型的变量一般是第一种形式…

JavaWeb文件上传

文件上传总览 文件上传主要是指将本地文件&#xff08;包括但不限于图片、视频、音频等&#xff09;上传到服务器&#xff0c;提供其他用户浏览或下载的过程。在日常生活中&#xff0c;我们在很多情况下都需要使用文件上传功能&#xff0c;比如&#xff1a;发微博、发朋友圈等…

Doris的基础架构

Doris的基础架构 Frontend&#xff08;FE&#xff09;&#xff1a;主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。Backend&#xff08;BE&#xff09;&#xff1a;主要负责数据存储、查询计划的执行。 我的Github地址&#xff0c;欢迎大家加入我的开…

Shell test 命令

Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立&#xff0c;它可以进行数值、字符和文件三个方面的测试。 数值测试 参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真 实例 num1100 num2100 if test $[n…

Kafka的消费消息是如何传递的?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka的消费消息是如何传递的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka的消费消息是如何传递的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka 的消息传递是通过 消费者&#xff08…

Linux-ADC驱动实验

上一章我们讲解了如何给 ICM20608 编写 IIO 驱动&#xff0c;ICM20608 本质就是 ADC&#xff0c;因此纯粹的 ADC 驱动也是 IIO 驱动框架的。本章我们就来学习一下如何使用 I.MX6ULL 内部的 ADC&#xff0c;并且在学习巩固一下 IIO 驱动。 ADC 驱动源码简析 设备树下的 ADC 节点…

如何制作“优美”PPT

目录 1.免费PPT模板网站&#xff1a; 2.免费有较好质量的图片网站&#xff1a; 免费图片资源 免费透明PNG图片资源&#xff1a; 免费icon图片资源&#xff1a; 3.选择好的图片&#xff1a; 图片底色 4.要与不要 千万不要&#xff1a; 一定要&#xff1a; 6.一些建议…

SSRF对Redis进行内网渗透

SSRF对Redis进行内网渗透 一 环境搭建 准备一台服务器&#xff0c;开启lampp和redis&#xff0c;redis只允许内网访问 使用kali进行端口扫描&#xff0c;扫不到6379 使用kali连接redis&#xff0c;也连不上 ssrf漏洞代码 <?php ​$url $_GET[url]; ​// 创建一个cUR…

面经自测——死锁/死锁的必要条件/死锁的预防/进程通信的方式

前言 本文是作者专门用来自测Java后端相关面试题的&#xff0c;所有问题都是在牛客、知识星球或网上找到的最近最新的面试题&#xff0c;全文回答都是作者按自己的真实水平仿照真实环境的回答&#xff0c;所以答案不一定真实&#xff08;但回答一定真诚&#x1f923;&#xff0…