深入学习 Redis - 基于 Jedis 通过 Java 客户端操作 Redis

news2024/11/16 2:54:30

目录

一、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");
        //这里为了演示效果,使用之前会先释放所有 key
        jedis.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);
        }
    }

}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学建模学习(7):单目标和多目标规划

优化问题描述 优化 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 线性规划 线性规划是指目标函数和约束都是线性的情况 [x,fval]linprog(f,A,b,Aeq,Beq,LB,U…

C++创建线程

前言 线程是轻量级的进程&#xff08;LWP&#xff1a;light weight process&#xff09;&#xff0c;在Linux环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合&#xff0c;指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位&#xff0c;分…

【点云处理教程】03使用 Python 实现地面检测

一、说明 这是我的“点云处理”教程的第3篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在上一教程中&#xff0c;我们在不使用 Open3D 库的情况下从深度数据计算点云。在本教程中&#xff0c;我们将首先…

H5打包封装小程序系统开发

H5打包封装小程序系统开发 H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤&#xff1a; 准备工作&#xff1a;首先&#xff0c;需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行&#xff0c;并且没有依赖于浏览器特…

【LeetCode每日一题合集】2023.7.24-2023.7.30

文章目录 771. 宝石与石头代码1——暴力代码2——位运算集合⭐&#xff08;英文字母的long集合表示&#xff09; 2208. 将数组和减半的最少操作次数&#xff08;贪心 优先队列&#xff09;2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐&#xff08;线段树&#xff09;TODO2500. 删除…

渗透测试技术知识技能全景图(超清晰哦~~!)

这张技术全景图是博主对信息安全专业的了解学习&#xff0c;以及通过多方资料学习整理出来的&#xff0c;也结合了个人的一些学习经验在里面&#xff0c;图里详细列举了渗透测试这门技术应该具备的知识技能以及一些相关的图书的推荐。里面东西均为通过个人经验对渗透测试的了解…

DRIFTINGBLUES-1靶机通关详解

信息收集 漏洞发现 进web看源码发现 解码得到 /noteforkingfish.txt 访问发现是ook 解得 先把这个名字记下来 说不定之后要ssh爆破有用 然后他说要用 host file 注意到域名可能是driftingblues.box 加到hosts里试试 没啥用 看别人wp知道还得爆破子域名 那kali也添加个hosts…

【腾讯云 Cloud Studio 实战训练营】全新的开发方式,让你实现一站式开发

一、前言 关于 Cloud Studio 全在线云端开发 用户只需要浏览器就可以访问和使用Cloud Studio,无需在本地配置开发环境。Cloud Studio将开发环境部署在云服务器上,用户可以随时随地进行开发。多语言支持 Cloud Studio支持常见的开发语言,如Node.js、Python、Java、PHP等。用户…

QtC++ 技术分析3 - IOStream

目录 iostreamscanf/printfiostream 整体架构流相关类流缓冲区 模板特化后整体结构文件流文件流对象创建常见文件流操作输出格式设定文件流状态 字符串流字符串流内部缓冲区字符串流使用 流缓冲区用户自定义 IO iostream scanf/printf 几种常见的输入输出流函数 scanf 从键盘…

哆啦A梦(Python代码实现)

目录 1 送她的多啦A梦 2 白驹过隙 3 Python代码实现 1 送她的多啦A梦 一个哆啦A梦让她开心开心好久好久。我也很开心&#xff0c;昨天送了一个实体模型&#xff0c;今天用Python代码再弄一个送给她。 哆啦A梦&#xff08;日语&#xff1a;ドラえもん&#xff0c;英语&…

linux页框回收之shrink_node函数源码剖析

概述 《Linux内存回收入口_nginux的博客-CSDN博客》前文我们概略的描述了几种内存回收入口&#xff0c;我们知道几种回收入口最终都会调用进入shrink_node函数&#xff0c;本文将以Linux 5.9源码来描述shrink_node函数的源码实现。 函数调用流程图 scan_control数据结构 str…

如何关闭谷歌浏览器自动更新

适用范围: 写自动化脚本时&#xff0c;需要安装浏览器驱动&#xff0c;安装浏览器驱动时需要下载对应的浏览器驱动版本&#xff0c;如果浏览器版本一直在自动更新的话&#xff0c;自动化脚本会报错浏览器版本和浏览器驱动不匹配&#xff0c;所以建议关闭谷歌浏览器自动更新&am…

认识 springboot 之 它的配置文件 -2

前言 本篇了解springboot中配置的作用&#xff0c;介绍配置文件的种类&#xff0c;介绍简单使用配置文件&#xff0c;简单的小技巧如何设置注释&#xff0c;开启热部署等等&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&…

内存分区模型

C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自动分配释放, 存放函数的参数值,局部变量等堆区&#xff1a;由程…

ReentrantLock锁的实现

ReentrantLock基于AQS&#xff0c;在并发编程中可以实现公平锁和非公平锁来对同步资源进行控制&#xff0c;并且是可重入锁。 1.ReentrantLock中的类的继承结构&#xff1a; 2.构造方法&#xff1a; 3.非公平锁的实现 看是否能够通过CAS来设置state来获取到锁&#xff0c;如果…

【数据结构】这堆是什么

目录 1.二叉树的顺序结构 2.堆的概念及结构 3.堆的实现 3.1 向上调整算法与向下调整算法 3.2 堆的创建 3.3 建堆的空间复杂度 3.4 堆的插入 3.5 堆的删除 3.6 堆的代码的实现 4.堆的应用 4.1 堆排序 4.2 TOP-K问题 首先&#xff0c;堆是一种数据结构&#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…

VLOOKUP多条件查询

LOOKUP(1,0/((A3:A15A18)*(C3:C15C18)),F3:F15)

打印Winfrom控件实现简陋版的打印(C#)

本文在前面写的博文基础上进行修改&#xff1a;利用Graphics的CopyFromScreen实现简陋版的打印(C#)_zxy2847225301的博客-CSDN博客 通过截图的方式进行打印在前面的文章后面已经介绍过&#xff0c;有问题。 UI布局如下&#xff1a; 代码如下&#xff1a; using System; using…

无涯教程-jQuery - Dialog组件函数

小部件对话框函数可与JqueryUI中的小部件一起使用。对话框是在HTML页面上显示信息的一种不错的方法。对话框是一个带有标题和内容区域的浮动窗口。此窗口可以移动&#xff0c;调整大小&#xff0c;并且默认情况下可以使用" X"图标关闭。 Dialog - 语法 $( "#d…