2024.1.11 关于 Jedis 库操作 Redis 基本演示

 目录

引言

通用命令

SET & GET

EXISTS & DEL

KEYS

EXPIRE & TTL

TYPE

String 类型命令

 MGET & MSET

GETRANGE & SETRANGE 

APPEND

INCR & DECR

List 类型命令

LPUSH & LRANG 

LPOP & LPOP

BLPOP & BRPOP

LLEN

Set 类型命令

SADD & SMEMBERS

SISMEMBERS

SCARD

SPOP

SINTER

SINTERSTORE

Hash 类型命令 

HSET & HGET

HEXISTS

HDEL

HKEYS & HVALS

HMGET & HMSET

 ZSet 类型命令

ZADD & ZRANGE

ZCARD

ZREM

ZSCORE

ZRANK


引言

  • Jedis 库的本质就是针对 Redis 的各种命令进行了封装
  • 调用某个方法就相当于在 Redis 客户端中敲下了对应的命令
  • 下文将介绍 Redis 命名在代码中的操作,但不会覆盖到所有的命令,只会挑一些比较重要的、代表性的命令

通用命令

SET & GET

public static void test1(Jedis jedis) {System.out.println("get 和 set 的使用");
//        先清空数据库,要避免上一组测试的残留数据影响到下一组测试的结果jedis.flushAll();jedis.set("key","111");jedis.set("key2","222");
//        通过创建 SetParams 的对象,给 set 命令设置参数和选项SetParams params = new SetParams();params.ex(10);
//        此处设置 XX 选项
//        表示只有当 key 存在时才设置,key 不存在时直接返回 nilparams.xx();
//        注意此时 set 的 key 在上述代码中已经设置过了jedis.set("key","333",params);SetParams params2 = new SetParams();params2.ex(10);params2.xx();
//        注意此时 set 的 key4 并未在上述代码中设置过jedis.set("key4","444",params2);String value = jedis.get("key");System.out.println("此处预期 value = 333, 实际 value = " + value);String value4 = jedis.get("key4");System.out.println("此处预期 value4 = null, 实际 value4 = " + value4);
}

 运行结果:


EXISTS & DEL

public static void test2(Jedis jedis) {System.out.println("exists 和 del 的使用");jedis.flushAll();jedis.set("key","111");jedis.set("key2","222");jedis.set("key3","333");
//        判断 key 是否存在boolean result = jedis.exists("key");System.out.println("此处预期 result = ture, 实际 result = " + result);
//        在此处直接将 key 删除long result2 = jedis.del("key");System.out.println("此处预期 result2 = 1, 实际 result2 = " + result2);
//        重新判断 key 是否存在result = jedis.exists("key");System.out.println("此处预期 result = false, 实际 result =  " + result);
//        使用 del 方法删除多个 key (变长参数)result2 = jedis.del("key2","key3");System.out.println("此处预期 result2 = 2, 实际 result2 = " + result2);
}

运行结果:


KEYS

public static void test3(Jedis jedis) {System.out.println("keys 的使用");jedis.flushAll();jedis.set("key","111");jedis.set("key2","222");jedis.set("key3","333");jedis.set("key4","444");
//        使用 keys 方法直接获取到 redis 中所有键Set<String> keys = jedis.keys("*");System.out.println(keys);
}

运行结果:


EXPIRE & TTL

public static void test4(Jedis jedis) throws InterruptedException {System.out.println("expire 和 ttl 的使用");jedis.flushAll();jedis.set("key","111");
//        使用 expire 方法给 key 设置过期时间 10秒jedis.expire("key",10);
//        休眠 3秒,再继续执行代码Thread.sleep(3000);
//        使用 ttl 方法获取到 key 的过期时间long time = jedis.ttl("key");System.out.println("此处预期 time = 7, 实际 time =  " + time);
}

运行结果:


TYPE

public static void test5(Jedis jedis) throws InterruptedException {System.out.println("type 的使用");jedis.flushAll();jedis.set("key","111");String type = jedis.type("key");System.out.println("此处预期 type = sting , 实际 type =  " + type);jedis.lpush("key2","111","222","333");String type2 = jedis.type("key2");System.out.println("此处预期 type2 = list , 实际 type2 =  " + type2);jedis.hset("key3","f1","111");String type3 = jedis.type("key3");System.out.println("此处预期 type3 = hash , 实际 type3 =  " + type3);jedis.sadd("key4","111","222","333");String type4 = jedis.type("key4");System.out.println("此处预期 type4 = set , 实际 type4 =  " + type4);jedis.zadd("key5",10,"zhangsan");String type5 = jedis.type("key5");System.out.println("此处预期 type5 = zset , 实际 type5 =  " + type5);
}

运行结果:

String 类型命令

 MGET & MSET

public static void test1(Jedis jedis) {System.out.println("mget 和 mset 的使用");jedis.flushAll();jedis.mset("key1","111","key2","222","key3","333");
//        此处多个 key 得到的 value 的顺序都是和 key 匹配的
//        如果某个 key 在 redis 上不存在,对应的 value 使用 null 表示List<String> values = jedis.mget("key1","key2","key100","key3");System.out.println("values: " + values);
}

运行结果:


GETRANGE & SETRANGE 

public static void test2(Jedis jedis) {System.out.println("getrange 和 setrange 的使用");jedis.flushAll();jedis.set("key","abcdefghijk");String result = jedis.getrange("key",2,5);System.out.println("此处预期 result = cdef, 实际 result = " + result);jedis.setrange("key",2,"xyz");String value = jedis.get("key");System.out.println("此处预期 value = abxyzfghijk, 实际 value = " + value);
}

运行结果:


APPEND

public static void test3(Jedis jedis) {System.out.println("append 的使用");jedis.flushAll();jedis.set("key","abcdef");jedis.append("key","ghij");String value = jedis.get("key");System.out.println("此处预期 value = abcdefghij, 实际 value = " + value);
}

运行结果:


INCR & DECR

public static void test4(Jedis jedis) {System.out.println("incr 和 decr 的使用");jedis.flushAll();jedis.set("key","100");long result = jedis.incr("key");System.out.println("此处预期 result = 101, 实际 result = " + result);String value = jedis.get("key");System.out.println("此处预期 value = 101, 实际 value = " + value);result = jedis.decr("key");System.out.println("此处预期 result = 100, 实际 result = " + result);value = jedis.get("key");System.out.println("此处预期 value = 100, 实际 value = " + value);
}

运行结果:

List 类型命令

LPUSH & LRANG 

public static void test1(Jedis jedis) {System.out.println("lpush、rpush 和 lrange 的使用");jedis.flushAll();jedis.lpush("key","111","222","333");jedis.rpush("key2","111","222","333");List<String> result = jedis.lrange("key",0,-1);System.out.println("采用 lpush 的 result = " +result);List<String> result2 = jedis.lrange("key2",0,-1);System.out.println("采用 rpush 的 result = " + result2);
}

运行结果:


LPOP & LPOP

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;public class RedisDemoList {public static void test2(Jedis jedis) {System.out.println("lpop、rpop 的使用");jedis.flushAll();jedis.rpush("key","111","222","333");String result = jedis.lpop("key");System.out.println("采用 lpop 的预期 result = 111, 实际 result = " + result);result = jedis.rpop("key");System.out.println("采用 rpop 的预期 result = 333, 实际 result = " + result);}public static void main(String[] args) {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try (Jedis jedis = jedisPool.getResource()) {test2(jedis);}}
}

运行结果:


BLPOP & BRPOP

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;import java.util.List;public class RedisDemoList {public static void test3(Jedis jedis) {System.out.println("blpop 的使用");jedis.flushAll();//        返回结果是一个 "二元组" 有个是从哪个 key 对应的 list 中删除的,一个删除的元素是什么List<String> results = jedis.blpop(100,"key");System.out.println("results.get(0) = " + results.get(0));System.out.println("results.get(1) = " + results.get(1));}public static void main(String[] args) {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try (Jedis jedis = jedisPool.getResource()) {test3(jedis);}}
}

运行结果:


LLEN

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;public class RedisDemoList {public static void test4(Jedis jedis) {System.out.println("llen 的使用");jedis.flushAll();jedis.rpush("key","111","222","333");long len = jedis.llen("key");System.out.println("此处预期 len = 3, 实际 len = " + len);}public static void main(String[] args) {JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");try (Jedis jedis = jedisPool.getResource()) {
//            test3(jedis);test4(jedis);}}
}

运行结果:

Set 类型命令

SADD & SMEMBERS

public static void test1(Jedis jedis) {System.out.println("sadd 和 smembers 的使用");jedis.flushAll();jedis.sadd("key","111","222","333");Set<String> result = jedis.smembers("key");System.out.println("result: " + result);
}

运行结果:


SISMEMBERS

public static void test2(Jedis jedis) {System.out.println("sismembers 的使用");jedis.flushAll();jedis.sadd("key","111","222","333");boolean result = jedis.sismember("key","111");System.out.println("此处预期 result = true, 实际 result = " + result);result = jedis.sismember("key","100");System.out.println("此处预期 result = false, 实际 result = " + result);
}

运行结果:


SCARD

public static void test3(Jedis jedis) {System.out.println("scard 的使用");jedis.flushAll();jedis.sadd("key","111","222","333");long result = jedis.scard("key");System.out.println("此处预期 result = 3, 实际 result = " + result);
}

运行结果:


SPOP

public static void test4(Jedis jedis) {System.out.println("spop 的使用");jedis.flushAll();jedis.sadd("key","111","222","333","444","555");String result = jedis.spop("key");System.out.println("此处将随机删除一个元素, result = " + result);
}

运行结果:


SINTER

public static void test4(Jedis jedis) {System.out.println("spop 的使用");jedis.flushAll();jedis.sadd("key","111","222","333","444","555");String result = jedis.spop("key");System.out.println("此处将随机删除一个元素, result = " + result);
}

运行结果:


SINTERSTORE

public static void test6(Jedis jedis) {System.out.println("sinterstore 的使用");jedis.flushAll();jedis.sadd("key","111","222","333");jedis.sadd("key2","111","222","444");long len = jedis.sinterstore("key3","key","key2");System.out.println("此处预期 len = 2, 实际 len = " + len);Set<String> result = jedis.smembers("key3");System.out.println("result = " + result);
}

运行结果:

Hash 类型命令 

HSET & HGET

public static void test1(Jedis jedis) {System.out.println("hset 和 hget 的使用");jedis.flushAll();
//        一次性设置单个jedis.hset("key","f1","111");
//        一次性设置多个HashMap<String,String> fields = new HashMap<>();fields.put("f2","222");fields.put("f3","333");jedis.hset("key",fields);String result = jedis.hget("key","f1");System.out.println("此处预期 result = 111, 实际 result = " + result);result = jedis.hget("key","f100");System.out.println("此处预期 result = null, 实际 result = " + result);
}

运行结果:


HEXISTS

public static void test2(Jedis jedis) {System.out.println("hexists 的使用");jedis.flushAll();jedis.hset("key","f1","111");jedis.hset("key","f2","222");jedis.hset("key","f3","333");boolean result = jedis.hexists("key","f1");System.out.println("此处预期 result = ture, 实际 result = " + result);result = jedis.hexists("key","f100");System.out.println("此处预期 result = false, 实际 result = " + result);
}

运行结果:


HDEL

public static void test3(Jedis jedis) {System.out.println("hdel 的使用");jedis.flushAll();jedis.hset("key","f1","111");jedis.hset("key","f2","222");jedis.hset("key","f3","333");long result = jedis.hdel("key","f1","f2");System.out.println("此处预期 result = 1, 实际 result = " + result);boolean exists = jedis.hexists("key","f1");System.out.println("此处预期 exists = false, 实际 exists = " + exists);exists = jedis.hexists("key","f2");System.out.println("此处预期 exists = false, 实际 exists = " + exists);
}

运行结果:


HKEYS & HVALS

public static void test4(Jedis jedis) {System.out.println("hkeys 和 hvals 的使用");jedis.flushAll();jedis.hset("key","f1","111");jedis.hset("key","f2","111");jedis.hset("key","f3","333");Set<String> fields = jedis.hkeys("key");System.out.println("fields = " + fields);List<String> vals = jedis.hvals("key");System.out.println("vals = " + vals);
}

运行结果:


HMGET & HMSET

public static void test5(Jedis jedis) {System.out.println("hmget 和 hmset 的使用");jedis.flushAll();HashMap<String,String> map = new HashMap<>();map.put("f1","111");map.put("f2","222");map.put("f3","333");jedis.hmset("key",map);List<String> vals = jedis.hmget("key","f3","f1","f2");
//        此时返回元素的顺序一定为 我们自己所指定 field 的先后顺序System.out.println("此处预期 vals = [333,111,222], 实际 vals = " + vals);
}

运行结果:

 ZSet 类型命令

ZADD & ZRANGE

public static void test1(Jedis jedis) {System.out.println("zadd 和 zrange 的使用");jedis.flushAll();jedis.zadd("key",10,"zhangsan");Map<String,Double> map = new HashMap<>();map.put("lisi",20.0);map.put("wangwu",30.0);jedis.zadd("key",map);List<String> members = jedis.zrange("key",0,-1);System.out.println("members = " + members);List<Tuple> membersWithScore = jedis.zrangeWithScores("key",0,-1);System.out.println("membersWithScore = " + membersWithScore);String member = membersWithScore.get(0).getElement();double score = membersWithScore.get(0).getScore();System.out.println("member = " + member + ", score" + score);
}

运行结果:


ZCARD

public static void test2(Jedis jedis) {System.out.println("zcard 的使用");jedis.flushAll();jedis.zadd("key",10,"zhangsan");jedis.zadd("key",20,"lisi");jedis.zadd("key",30,"wangwu");long len = jedis.zcard("key");System.out.println("此处预期 len = 3, 实际 len = " + len);
}

运行结果:


ZREM

public static void test3(Jedis jedis) {System.out.println("zrem 的使用");jedis.flushAll();jedis.zadd("key",10,"zhangsan");jedis.zadd("key",20,"lisi");jedis.zadd("key",30,"wangwu");long n = jedis.zrem("key","zhangsan");System.out.println("此处预期 n = 1, 实际 n = " + n);List<Tuple> membersWithScore = jedis.zrangeWithScores("key",0,-1);System.out.println("membersWithScore = " + membersWithScore);
}

运行结果:


ZSCORE

public static void test4(Jedis jedis) {System.out.println("zscore 的使用");jedis.flushAll();jedis.zadd("key",10,"zhangsan");jedis.zadd("key",20,"lisi");jedis.zadd("key",30,"wangwu");Double score = jedis.zscore("key","zhangsan");System.out.println("此处预期 score = 10.0, 实际 n = " + score);score = jedis.zscore("key","zhaoliu");System.out.println("此处预期 score = null, 实际 n = " + score);
}

运行结果:


ZRANK

public static void test5(Jedis jedis) {System.out.println("zrank 的使用");jedis.flushAll();jedis.zadd("key",10,"zhangsan");jedis.zadd("key",20,"lisi");jedis.zadd("key",30,"wangwu");Long rank = jedis.zrank("key","zhangsan");System.out.println("此处预期 score = 1, 实际 n = " + rank);rank = jedis.zrank("key","zhaoliu");System.out.println("此处预期 score = null, 实际 n = " + rank);
}

运行结果:

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

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

相关文章

SwiftUI 为任意视图加上徽章(Badge)而想到的(下)

概览 在 SwiftUI 为任意视图加上徽章(Badge)而想到的(上) 这篇文章中,我们讨论了如何使用 Preference 技术打造 SwiftUI 中任意视图上徽章的实现。 虽然,我们完成了一系列挑战最后基本得偿所愿,不过在上篇的实现中仍有些许不尽如人意之处。 在本篇博文中,您将学到如下…

Jmeter 性能压测 —— TPS与QPS

1、TPS和QPS的区别 TPS&#xff1a;意思是每秒事务数&#xff0c;具体事务的定义都是人为的&#xff0c;可以一个接口、多个接口、一个业务流程等等。 一个事务是指事务内第一个请求发送到接收到最后一个请求的响应的过程&#xff0c;以此来计算使用的时间和完成的事务个数。…

WPF 布局

了解 WPF中所有布局如下&#xff0c;我们一一尝试实现&#xff0c;本文档主要以图形化的形式展示每个布局的功能。 布局&#xff1a; Border、 BulletDecorator、 Canvas、 DockPanel、 Expander、 Grid、 GridView、 GridSplitter、 GroupBox、 Panel、 ResizeGrip、 Separat…

蓝屏代码0x000007E解决办法

概述 出现该问题&#xff1a; 1、硬件冲突造成的蓝屏 驱动冲突&#xff1a;与其他设备或应用程序的驱动冲突可能会引起系统崩溃。 2、内存虚拟不足造成的蓝屏 错误配置&#xff1a;不正确的配置或设置可能会导致蓝屏错误。 3、超频后也可能出现蓝屏 CUP超频或者显卡超频后出现蓝…

NAS使用的一些常见命令 ssh sftp 上传 下载 ALL in one

目录 登陆上传/下载内网穿透 登陆 ssh 登陆 ssh usernameserverIP -p portNumsftp 登陆 sftp -P portNum usernameserverIP上传/下载 如ls等&#xff0c;远程服务器操作 如lls等&#xff0c;本机操作&#xff0c;前缀为l 文件 put **** 将本机上文件上传到远程服务器上当…

分析一个项目(微信小程序篇)三

目录 接下来分析接口方面&#xff1a; home接口&#xff1a; categories接口&#xff1a; details接口&#xff1a; login接口&#xff1a; 分析一个项目讲究的是如何进行对项目的解析分解&#xff0c;进一步了解项目的整体结构&#xff0c;熟悉项目的结构&#xff0c;能够…

kylin集群反向代理(健康检查)

前面一篇文章提到了使用nginx来对kylin集群进行反向代理&#xff0c; kylin集群使用nginx反向代理-CSDN博客文章浏览阅读349次&#xff0c;点赞8次&#xff0c;收藏9次。由于是同一个集群的&#xff0c;元数据没有变化&#xff0c;所以&#xff0c;直接将原本的kylin使用scp的…

C++学习笔记——类继承

目录 一、一个简单的基类 1.1封装性 1.2继承性 1.3虚函数 1.4多态性 二、基类 2.1一个简单的C基类的示例 2.2 Animal是一个基类。 三、继承 3.1概念 3.2is-a关系 3.3多态公有继承 3.4静态联编和动态联编 3.5访问控制 3.6ABC理念 一、一个简单的基类 C中的基类是一…

02. 坦克大战项目-准备工作和绘制坦克

02. 坦克大战项目-准备工作和绘制坦克 01. 准备工作 1. 首先我们要创建四个类 1. Tank类 介绍&#xff1a;Tank 类主要用来表示坦克的基本属性和行为 public class Tank {private int x;//坦克的横坐标private int y;//坦克的纵坐标public int getX() {return x;}public v…

【ACL 2023】 The Art of Prompting Event Detection based on Type Specific Prompts

【ACL 2023】 The Art of Prompting: Event Detection based on Type Specific Prompts 论文&#xff1a;https://aclanthology.org/2023.acl-short.111/ 代码&#xff1a;https://github.com/VT-NLP/Event_APEX Abstract 我们比较了各种形式的提示来表示事件类型&#xff0…

生成式AI,发展可持续吗?

最近有消息透露&#xff0c;OpenAI预计在2024年实现16亿美元的年化收入。相较于去年10月预测的13亿美元&#xff0c;这一数字增长了3亿美元&#xff0c;增长部分主要来源于ChatGPT订阅、API接入以及其他业务。 与此同时&#xff0c;其竞争对手Anthropic预计年化收入至少为8.5亿…

Goby 漏洞发布|用友 NC registerServlet 反序列化远程代码执行漏洞

漏洞名称&#xff1a;用友 NC registerServlet 反序列化远程代码执行漏洞 English Name&#xff1a;Yonyou NC registerServlet Deserialize Remote Code Execute Vulnerability CVSS core: 9.8 影响资产数&#xff1a; 21320 漏洞描述&#xff1a; 用友 NC Cloud 是一种商…

UVa1308/LA2572 Viva Confetti

题目链接 本题是2002年ICPC亚洲区域赛金沢(日本)赛区的H题 题意 我已经把n个圆盘依次放到了桌面上。现按照放置顺序依次给出各个圆盘的圆心位置和半径&#xff0c;问最后有多少圆盘可见&#xff1f;如下图所示。 分析 《训练指南》的题解&#xff1a; 题目说“保证在对输入数据…

Kafka配置Kerberos安全认证及与Java程序集成

Background 本文主要介绍在 Kafka 中如何配置 Kerberos 认证&#xff0c;以及 java 使用 JAAS 来进行 Kerberos 认证连接。本文演示为单机版。 所用软件版本 查看 Kerberos 版本命令&#xff1a;klist -V 软件名称版本jdk1.8.0_202kafka2.12-2.2.1kerberos1.15.1 1、Kerberos …

vivado 使用项目摘要、配置项目设置、仿真设置

使用项目摘要 Vivado IDE包括一个交互式项目摘要&#xff0c;可根据设计动态更新命令被运行&#xff0c;并且随着设计在设计流程中的进展。项目摘要包括概览选项卡和用户可配置的仪表板&#xff0c;如下图所示。有关信息&#xff0c;请参阅《Vivado Design Suite用户指南&…

Python基础知识:整理11 模块的导入、自定义模块和安装第三方包

1 模块的导入 1.1 使用import 导入time模块&#xff0c;使用sleep功能&#xff08;函数&#xff09; import time print("start") time.sleep(3) print("end")1.2 使用from 导入time的sleep功能 from time import sleep print("start") slee…

高级分布式系统-第6讲 分布式系统的容错性--可靠的组通信

可靠的组通信 组内通信最好是每个进程之间都建立点到点的通信&#xff0c; 但实际中这样的组织结构不是有效的&#xff0c; 因为会浪费很大的通信带宽。 在平等组中&#xff0c; 多播是主要的组织结构。 但多播是具有同步性质的容错结构&#xff0c; 并不适用拜占庭模型。 多…

LeetCode刷题笔记

面试经典150题 1. 数组/字符串 1.1 合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺…

spring Data Elasticsearch入门

1.Elasticsearch Elasticsearch提供了两种连接方式&#xff1a; transport&#xff1a;通过TCP方式访问ES。&#xff08;已废弃&#xff09; rest&#xff1a;通过HTTP API 方式访问ES。 描述&#xff1a; Spring Data Elasticsearch 项目提供了与Elasticsearch 搜索引擎的集成…

17. 电话号码的字母组合(回溯)

从第一个数字开始遍历其对应的字母&#xff0c;将其加入StringBuffer中&#xff0c;继续深度优先搜索&#xff0c;当访问到最后一个数字的时候&#xff0c;将StringBuffer存储到ans中&#xff0c;然后回溯到下一个对应字母。 class Solution {public List<String> lette…