【Redis学习笔记04】Jedis客户端(通用命令)

news2025/6/9 4:48:27

Java客户端操作Redis

Java生态丰富,自定义的客户端非常多,常见的有Jedis、Lettuce、以及Spring整合后的RedisTemplate,但是对于初学者而言,从Jedis开始入门学习是非常容易上手的,因为Jedis中的API与原生Redis命令高度一致。

1. 引入Jedis依赖

此处引入如下依赖:

  • Jedis:Java操作Redis客户端
  • Junit:方便编写单元测试
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>4.4.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

2. 配置Xshell端口转发

  1. 操作步骤:1. 打开Xshell点击属性 => 2. 配置SSH隧道 => 3. 配置如下端口转发内容

image.png

  1. 打开windows cmd程序输入:netstat -ano | findstr 8888如果观察如下

image.png

  1. 确保redis.conf配置中设置protect-mode为no以及bind为0.0.0.0

3. 编写Demo

使用Jedis的步骤如下:

  1. 创建JedisPool连接池对象(配置redis服务器所在IP地址+端口号)
  2. 从JedisPool连接池中取出连接对象,并操作其中提供的API方法
  3. 解析响应内容
/**
 * 测试Redis连通性
 * @author 米饭好好吃
 */
@Test
public void testPing() {
    // 1. 创建JedisPool
    JedisPool pool = new JedisPool("tcp://127.0.0.1:8888");
    // 2. 获取连接对象
    try(Jedis jedis = pool.getResource();) {
        // 设置密码(如果有)
        jedis.auth("xxxxxx");
        // 3. 调用API-ping
        String pong = jedis.ping();
        // 4. 解析响应结果
        System.out.println(pong);
    }
}

4. 测试通用命令

  1. 测试SET、GET命令:
    :::success
    注意:此处GET、SET命令是针对string类型的,此处测试通用命令需要借助SET、GET命令
    :::
/**
 * 测试通用命令
 * @author 米饭好好吃
 */
public class TestCommon {
    // redis连接池对象
    private JedisPool pool;

    @Before
    public void init() {
        pool = new JedisPool("tcp://127.0.0.1:6379");
    }

    /**
     * 测试SET、GET命令
     */
    @Test
    public void testGETAndSET() {
        // 1. 获取连接对象
        try(Jedis jedis = pool.getResource();) {
            // 2. 配置密码(如果有的话)
           jedis.auth("xxxxxx");
            // 3. 清空数据库
            jedis.flushDB();
            // 4. 测试SET命令
            jedis.set("k1", "hello");
            // 5. 测试GET命令
            String resp = jedis.get("k1");
            System.out.println("k1: " + resp);
            // 6. 测试SET 选项NX命令
            SetParams params = new SetParams();
            params.nx(); // 不存在才新增
            jedis.set("k1", "222", params);
            resp = jedis.get("k1");
            System.out.println("k1: " + resp);
        }
    }
}
  1. 测试EXISTS命令:

/**
 * 测试EXISTS命令
 * @author 米饭好好吃
 */
@Test
public void testEXISTS() {
    // 1. 获取到redis连接对象
    try(Jedis jedis = pool.getResource();) {
        // 2. 配置密码(如果有的话)
        jedis.auth("xxxxxx");
        // 3. 清空数据库
        jedis.flushDB();
        // 4. 测试EXISTS命令
        jedis.set("k1", "111");
        boolean exists = jedis.exists("k1");
        System.out.println("k1: " + exists);
        jedis.del("k1");
        exists = jedis.exists("k1");
        System.out.println("k1: " + exists);
    }
}
  1. 测试DEL命令:
/**
 * 测试DEL命令
 * @author 米饭好好吃
 */
@Test
public void testDEL() {
    // 1. 创建redis连接对象
    try(Jedis jedis = pool.getResource();) {
        // 2. 配置密码(如果有的话)
           jedis.auth("xxxxxx");
        // 3. 清空数据库
        jedis.flushDB();
        // 4. 测试del命令
        jedis.set("k1", "111");
        jedis.set("k2", "222");
        jedis.set("k3", "333");
        long delCount = jedis.del("k1", "k2", "k3");
        System.out.println("delCount: " + delCount);
        String resp = jedis.get("k1");
        System.out.println("k1: " + resp);
    }
}

注意:DEL命令中参数列表为可边长参数,可以同时删除多个key,并且返回值为删除成功的个数,这与命令行中DEL命令一致

  1. 测试KEYS命令:
/**
 * 测试KEYS命令
 * @author 米饭好好吃
 */
@Test
public void testKEYS() {
    // 1. 获取redis连接对象
    try(Jedis jedis = pool.getResource();) {
        // 2. 配置密码(如果有的话)
        jedis.auth("xxxxxx");
        // 3. 清空数据库
        jedis.flushDB();
        // 4. 测试KEYS命令
        jedis.set("k1", "111");
        jedis.set("k2", "222");
        jedis.set("k3", "333");
        Set<String> keys = jedis.keys("*");
        System.out.println("keys: " + keys);
    }
}

注意:KEYS命令返回的是一个Java当中的Set类型,这是因为redis中的key都是不允许重复且对于顺序没有要求的,KEYS方法可以传递一个pattern参数,即KEYS命令后紧跟的匹配模式

  1. 测试EXPIRE、TTL命令:
/**
 * 测试EXPIRE命令
 * @author 米饭好好吃
 */
@Test
public void testEXPIRE() {
    // 1. 获取redis连接对象
    try(Jedis jedis = pool.getResource();) {
        // 2. 设置密码(如果有的话)
        jedis.auth("xxxxxx");
        // 3. 清空数据库
        jedis.flushDB();
        // 4. 测试expire、ttl
        jedis.set("k1", "111");
        jedis.expire("k1", 10);
        long ttl = jedis.ttl("k1");
        System.out.println("ttl: " + ttl);
    }
}
  1. 测试TYPE命令:
/**
 * 测试TYPE命令
 * @author 米饭好好吃
 */
@Test
public void testTYPE() {
    // 1. 获取redis连接对象
    try(Jedis jedis = pool.getResource();) {
        // 2. 设置密码(如果有的话)
        jedis.auth("xxxxxx");
        // 3. 清空数据库
        jedis.flushDB();
        // 4. 测试type命令
        jedis.hset("k1", "f1", "v1");
        jedis.lpush("k2", "11", "22", "33");
        jedis.sadd("k3", "abc");
        System.out.println("k1: " + jedis.type("k1"));
        System.out.println("k2: " + jedis.type("k2"));
        System.out.println("k3: " + jedis.type("k3"));
    }
}

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

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

相关文章

集合进阶相关基础及底层原理

集合体系结构 单列集合&#xff1a; Collenction 每次只能添加一个值&#xff0c;其中红色是接口&#xff0c;蓝色是实现类 图来自黑马程序员网课 List系列集合&#xff1a;添加的元素是有序&#xff0c;可重复&#xff0c;有索引 Set系列集合&#xff1a;添加的元素是…

--- JAVA 多态 ---

多态&#xff0c;顾名思义就时有多种形态&#xff0c;那咋样才嫩共有多种形态呢&#xff0c;再java中就是用不同的对象去调用同一个方法&#xff0c;产生了不同的结果。 看这段代码&#xff0c;我调用的是同一个方法&#xff0c;且只是传入的对象的不同&#xff0c;但是产生了不…

【数据结构】平衡二叉树(AVL树)

目录 前言 一、AVL树概念 二、AVL树节点定义 三、AVL树插入 1. 按照二叉搜索树的方式插入新节点 2. 维护节点的平衡因子与调整树的结构 a. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 b. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 c. 新节点插入…

【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【LeetCode】两数相加(基于单向链表)难度:中等

目录 理清题目 解题思路 题目代码 运行结果 我们来看一下题目描述&#xff1a; 理清题目 首先题目要求链表中的节点的值必须在[0,9]之间也就是说我们要处理的数字必为正整数&#xff0c;因此就不会涉及到太复杂的计算&#xff0c;题目其实就是要求对两个链表中的节点的值分…

美业SaaS系统源码分享-收银管理的主要功能

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 活动促销 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 博弈美业-收银管理功能 1、同时支持支付宝和微信支付&#xff0c;具有简单便捷安全等优点&#xff0c;并且符…

vite+ts设置别名

准备工作 安装 types/node 避免代码爆红 npm install types/node一、根目录下 vite.config.ts 文件中配置 import { resolve } from path;resolve: {// 设置文件./src路径为 alias: [{find: ,replacement: resolve(__dirname, ./src)}] }二、根目录下 tsconfig.json 文件中配…

前端el-table-column使用template的新发现哈哈哈

记录一次无脑copy代码发现的新知识哈哈哈 新知识自己要去查阅相关知识学习&#xff0c;这里我没有描述噢 在el-table中的列el-table-column使用了多个button时&#xff0c;每个button都添加了<template slot-scope"scope">标签&#xff0c;导致只有其中一个but…

Makefile的入门学习

一、Makefile的入门学习 编译工具及构建工具介绍 在之前的课程&#xff0c;都是直接使用gcc对代码进行编译&#xff0c;这对简单的工程是可以的&#xff0c;但当我们遇到复杂的工程时&#xff0c;每次用gcc等编译工具去操作就会显得很低效。因此make工具就出现了&#xff0c;…

Linux高级进阶-ssh配置

Ubuntu-system 允许使用root远程登陆 apt install ssh -y在/etc/ssh/sshd_config 文件修改PermitRootLogin yes systemctl restart ssh远程连接软件用户名为root

Linux——内存管理代码分析

虚空间管理 页框和页的关系 页框 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框&#xff0c;也叫页帧&#xff0c;即物理页面&#xff0c;是linux划分内存空间的结果。 每个页框都有一个页框号&#xff0c;即内存块号、物理块号。 页 将用户…

【LeetCode 滑动窗口】LC_3_无重复字符的最长子串

文章目录 1. 无重复字符的最长子串 1. 无重复字符的最长子串 题目链接&#x1f517; &#x1f34e;题目思路&#xff1a;&#x1f427;① 滑动窗口的思想&#xff1b;&#x1f427;② 用什么来维护窗口呢 &#xff1f; 用 双指针 和 unordered_set来维护&#xff0c;为什么呢…

《大道平渊》· 玖 —— 把高深的道理讲的通俗,这是一门艺术。

《平渊》 玖 "化繁为简, 点石成金。" 把高深的道理讲得通俗&#xff0c;这是一门艺术&#xff01; 讲述者能够站在群众的角度&#xff0c;用尽可能简单通俗的语言来解释复杂的概念。 讲述者需要对概念有深刻的理解&#xff0c;还要有灵活的表达能力。 群众愿意接受…

新型航标驱鸟器:解决鸟粪污染问题

航标作为船舶航行的重要导向标志&#xff0c;承载着为各类水上活动提供安全信息的重任。近年来&#xff0c;随着环保意识的提升&#xff0c;鸟类种群数量的增加&#xff0c;航标船上的鸟类问题逐渐凸显。许多鸟类会在航标船上停歇、捕食&#xff0c;造成了航标船严重的鸟粪污染…

【实战】kafka3.X kraft模式集群搭建

文章目录 前言kafka2.0与3.x对比准备工作JDK安装kafka安装服务器增加hosts 修改Kraft协议配置文件格式化存储目录 启动集群停止集群测试Kafka集群创建topic查看topic列表查看消息详情生产消息消费消息查看消费者组查看消费者组列表 前言 相信很多同学都用过Kafka2.0吧&#xf…

redis安裝启动

1、下载redis解压 https://github.com/tporadowski/redis/releases 2、打开cmd&#xff0c;切换到解压的文件夹 3、redis-server.exe redis.windows.conf 启动redis redis可通过命令行输入config set requirepass password和直接修改redis.config文件中修改 requirepass 来设…

打破信息孤岛,U-Mail邮件系统轻松集成各类业务系统

随着国家大力推动企业数字化转型&#xff0c;企业内部数字化建设需要各种业务系统来提高企业生产力&#xff0c;然而&#xff0c;随着在业务数据量逐步增大的情形下&#xff0c;如何更加高效地整合、协同各个系统之间的信息交互&#xff0c;并且更好地融合企业邮件系统&#xf…

Visual Studio Code 开发esp8266流程2Arduino 配置 nodemcu

http://arduino.esp8266.com/stable/package_esp8266com_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json Arduino: Library Manager Arduino: Board

项目:基于httplib/消息队列负载均衡式在线OJ

文章目录 写在前面关于组件开源仓库和项目上线其他文档说明项目亮点 使用技术和环境项目宏观结构模块实现compiler模块runner模块compile_run模块compile_server模块 基于MVC结构的OJ服务什么是MVC&#xff1f;用户请求服务路由功能Model模块view模块Control模块 写在前面 关于…

UV胶为什么会开裂?如何避免UV胶开裂?

UV胶为什么会开裂&#xff1f;如何避免UV胶开裂&#xff1f; UV胶开裂可能由以下几个主要因素导致&#xff1a; 紫外线照射不足&#xff1a;UV胶的固化需要足够的紫外线能量。如果紫外线照射不足&#xff0c;胶水可能无法完全固化&#xff0c;导致开裂。这可能是由于固化设备…