深入学习 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");
        //这里为了演示效果,使用之前会先释放所有 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);
        }
    }

}

 

 

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

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

相关文章

简要介绍 | 自编码器:神经网络中的自我复制艺术

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对自编码器进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 自编码器&#xff1a;神经网络中的自我复制艺术 Autoencoders Explained - MATLAB & Simulink 一、背景介绍 自编码器&#xff0…

高可用(keepalived)部署方案

前言&#xff1a;为了减少三维数据中心可视化管理系统的停工时间&#xff0c;保持其服务的高度可用性。同时部署多套同样的三维可视化系统&#xff0c;让三维数据中心可视化系统同时部署并运行到多个服务器上。同时提供一个虚拟IP&#xff0c;然后外面通过这个虚拟IP来访问三维…

[数据集][目标检测]城市道路井盖破损丢失目标检测1377张

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1377 标注数量(xml文件个数)&#xff1a;1377 标注类别数&a…

MIT 6.830数据库系统 -- lab five

MIT 6.830数据库系统 -- lab five 项目拉取引言搜索练习1 BTreeFile.findLeafPage() 插入练习2 Spliting Page 删除练习3 页再分配练习4 合并页 事务小结 项目拉取 原项目使用ant进行项目构建&#xff0c;我已经更改为Maven构建&#xff0c;大家直接拉取我改好后的项目即可: …

【Linux】网络基础

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统网络编程 文章目录 一、协议初识和网络协议分层&#xff08;TCP/IP四层模型&#xff09;认识协议TCP/IP五层&#xff08;或四层&#xff09;模型 二、认识MAC地址和IP地址认识MAC地址认识IP地址认…

关闭深度学习训练/推理进程的方法

引言 设想有一种情况&#xff0c;在ssh服务器训练/推理的时候&#xff0c;突然断线&#xff0c;再次打开ssh的时候&#xff0c;发现后台在运行&#xff0c;此时无法使用 ctrlc 终止&#xff0c;从而&#xff0c;可以用一个很简单的办法来结束&#xff1a;手动关闭进程。 方法 输…

rust 闭包函数

函数有自己的类型&#xff0c;可以像使用基础类型一样使用函数&#xff0c;包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数&#xff0c;也有自己的类型定义。不过&#xff0c;函数实际上是指针类型&#xff0c;在 rust 所有权中属于借用的关…

小白带你学习linux的mysql服务(主从mysql服务和读写分离三十一)

目录 二、MySQL Replication优点&#xff1a; 三、MySQL复制类型 1、异步复制&#xff08;Asynchronous repication&#xff09; 2、全同步复制&#xff08;Fully synchronous replication&#xff09; 3、半同步复制&#xff08;Semisynchronous replication&#xff09;…

设计模式-中介者模式在Java中使用示例-客户信息管理

场景 欲开发客户信息管理窗口界面&#xff0c;界面组件之间存在较为复杂的交互关系&#xff1a;如果删除一个客户&#xff0c; 要在客户列表(List)中删掉对应的项&#xff0c;客户选择组合框(ComboBox)中客户名称也将减少一个&#xff1b; 如果增加一个客户信息&#xff0c;…

网络安全行业相关证书

一&#xff1a;前言 对于考证这个话题&#xff0c;笔者的意见是&#xff1a;“有比没有好&#xff0c;有一定更好&#xff0c;但不一定必须&#xff1b;纸上证明终觉浅&#xff0c;安全还得实力行”。很多人对于各种机构的考证宣传搞得是云里雾里&#xff0c;不知道网络安全行业…

fastadmin采坑之固定表格某一列

// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: id,sortName: id,fixedColumns: true,fixedRightNumber: 1,columns: [[{checkbox: true},{field: id, title: __(Id)},{field: proposal_title, title: __(Proposal_title), opera…

动脑学院Jetpack Compose学习笔记

最近b站学习了一下Compose相关内容&#xff0c;整理了相关笔记&#xff0c;仅供大家参考。 资源链接如下&#xff0c;象征性收取1个积分 https://download.csdn.net/download/juliantem/88125198

【图论】树上差分(边差分)

一.简介 其实点差分和边差分区别不大。 点差分中&#xff0c;d数组存储的是树上的节点 边差分中&#xff0c;d数组存储的是当前节点到父节点的那条边的差分值。 指定注意的是&#xff1a;边差分中因为根连的父节点是虚点&#xff0c;所以遍历结果时应当忽略&#xff01; 二…

腾讯云—自动挂载云盘

腾讯云&#xff0c;稍微麻烦了点。 腾讯云服务器&#xff0c;镜像为opencloudos 8。 ### 1、挂载云盘bash #首先通过以下命令&#xff0c;能够看到新的数据盘&#xff0c;如果不能需要通过腾讯云控制台卸载后&#xff0c;重新挂载&#xff0c;并重启服务器。 fdisk -l#为 /dev…

Houdini查看参数能用的内置变量($符号开头的变量)

在某个参数上&#xff0c;右键&#xff0c;reference, local variable就能看到

Postman如何导出接口的几种方法

本文主要介绍了Postman如何导出接口的几种方法&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 前言&#xff1a; 我的文章还是一贯的作风&#xff0c;简确用风格&#xff08;简单确实有用&#xff09;&am…

金三银四好像消失了,IT行业何时复苏!

疫情时候不敢离职&#xff0c;以为熬过来疫情了&#xff0c;行情会好一些&#xff0c;可是疫情结束了&#xff0c;反而行情更差了&#xff0c; 这是要哪样 我心中不由一万个 草泥&#x1f434; 路过 我心中不惊有了很多疑惑和感叹&#xff01; 自我10连问 我的心情 自去年下…

HCIA实验二

实验要求&#xff1a; 1.R2为ISP&#xff0c;只能配置IP 2.R1-R2之间为HDLC封装 3.R2-R3之间为PPP封装&#xff0c;pap认证&#xff0c;R2为主认证方 4.R2-R4之间为PPP封装&#xff0c;chap认证&#xff0c;R2为主认证方 5.R1、R2、R3构建MGRE&#xff0c;仅R1的IP地址固定…

vmware的window中安装GNS3

1.向vmware中的windows虚拟机传送文件 点击虚拟机-安装VMwaretools 安装在虚拟机上面 此图标代表已经成功&#xff0c;将文件复制到虚拟机上里面 2.安装 安装gns3&#xff0c;需要先安装winpcap&#xff08;检查网卡&#xff09;和wireshark&#xff08;对winpcap上数据进行抓…

excel绘制折线图或者散点图

一、背景 假如现在通过代码处理了一批数据&#xff0c;想看数据的波动情况&#xff0c;是不是还需要写个pyhon代码&#xff0c;读取文件&#xff0c;绘制曲线&#xff0c;看起来也简单&#xff0c;但是还有更简单的方法&#xff0c;就是直接生成csv文件&#xff0c;csv文件就是…