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.hqwc.cn/news/343838.html

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

相关文章

自动化测试数据校验神器!

在做接口自动化测试时&#xff0c;经常需要从接口响应返回体中提取指定数据进行断言校验。 今天给大家推荐一款json数据提取神器: jsonpath jsonpath和常规的json有哪些区别呢&#xff1f;在Python中&#xff0c;json是用于处理JSON数据的内置模块&#xff0c;而jsonpath是用…

给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?

题目 思路&#xff1a; 对于字符串a&#xff0c;b, (a.size() < b.size()), 考虑对字符串b满足什么条件&#xff1a; 由1、3可知a是b的前后缀&#xff0c;由2知b有一个周期是3&#xff0c;即a.size()&#xff0c;所以b是用多个a拼接而成的&#xff0c;有因为a是b的前后缀&…

C++每日一练(15):简单幂计算

题目描述 输入两个数a和b&#xff0c;求a的b次方。 输入 输入两个整数a&#xff0c;b&#xff08;1<a<10&#xff0c;1<b<15&#xff09;。 输出 输出一个正整数&#xff0c;该值<1000000000000。 输入样例 3 3 输出样例 27 参考答案 #include<bits/stdc.h&…

87.乐理基础-记号篇-反复记号(一)反复、跳房子

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;86.乐理基础-记号篇-速度记号-CSDN博客 首先是反复记号表总结图&#xff1a; 当前是写前两个记号&#xff0c;其余记号后面写&#xff1a;这些反复记号最主要的目的很简单&#xff0c;还是为了节约纸张&#xff0c…

GPT Store,是否会成为下一个App Store?

经历了一场风波后&#xff0c;原本计划推出的GPT Store终于成功上线。OpenAI在北京时间1月11日推出了GPT Store&#xff0c;被广泛视为类似于苹果的"App Store"&#xff0c;为人工智能应用生态系统迈出了重要一步。然而&#xff0c;OpenAI要想将GPT Store打造成苹果般…

写在学习webkit过程的前面

webkit起源于KHTML&#xff0c;是KDE开源项目的KHTML和KJS引擎的一部分。在它的诞生和发展过程中&#xff0c;由两家著名的公司参与开发过程中&#xff0c;造成两次裂变。诞生两个内核webkit和blink&#xff0c;并发展和产生了两个主流的浏览器&#xff0c;分别为safari和chrom…

Nginx——基础配置

和大多数软件一样&#xff0c;Nginx也有自己的配置文件&#xff0c;但它又有很多与众不同的地方&#xff0c;本帖就来揭开Nginx基础配置的面纱。 1、Nginx指令和指令块 了解指令和指令块有助于大家了解配置的上下文&#xff0c;下面是一个配置模板示例&#xff1a; 在这个配…

搭建LNMP网站平台并部署Web应用

本章主要介绍&#xff1a; 安装Nginx安装MySQL安装PHP在LNMP平台中部署 Web 应用 构建LNMP网站平台就像构建LAMP平台一样&#xff0c;构建LNMP平台也需要Linux服务器&#xff0c;MySQL数据库&#xff0c;PHP解析环境&#xff0c;区别主要在Nginx 与 PHP的协作配置上&#xff0…

PHP在线考试平台管理系统源码带文字搭建教程和操作手册

PHP在线考试平台管理系统源码带文字搭建教程和操作手册 技术架构 PHP7.2 Thinkphp6 React UmiJs nginx mysql5.7 cnetos7以上 宝塔面板 系统功能特性与介绍 采用PHP7强类型&#xff08;严格模式&#xff09;。 题库管理 支持多种试题类型和录题方式。 考生管理 快速导入考…

RT-Thread入门笔记6-空闲线程及两个常用的钩子函数

空闲线程 空闲线程是一个比较特殊的系统线程&#xff0c;它具备最低的优先级。当系统中无其他就绪线程可运行时&#xff0c;调度器将调度到空闲线程。 空闲线程还负责一些系统资源回收以及将一些处于关闭态的线程从线程调度列表中移除的动作 空闲线程在形式上是一个无线循环结…

YOLOv5改进系列(25)——添加LSKNet注意力机制(大选择性卷积核的领域首次探索)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系

Vue-13、Vue绑定css样式

1、绑定css样式字符串写法&#xff0c;适用于&#xff1a;样式的类名不确定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"tex…