【redis】Jedis 操作 Redis 基础指令(下)

列表操作

lpush/rpush 和 lpop/rpop

  • 将一个或者多个元素从左/右侧放入(头/尾插)到 list
    • 依次头插
  • list 左/右侧取出元素(即头/尾删)
public static void test1(Jedis jedis) {  jedis.flushAll();  long n = jedis.lpush("key", "1", "2", "3", "4");  System.out.println(n);  String value = jedis.lpop("key");  System.out.println(value);  value = jedis.lpop("key");  System.out.println(value);  value = jedis.lpop("key");  System.out.println(value);  value = jedis.lpop("key");  System.out.println(value);  
}//输出结果
4
4
3
2
1
  • 返回值:插入后 list 的长度

lrange

获取从 startend 区间的所有元素,左闭右闭

public static void test2(Jedis jedis) {  jedis.flushAll();  jedis.rpush("key", "1", "2", "3", "4");  List<String> values = jedis.lrange("key", 1, 3);  System.out.println(values);  
}//输出结果
[2, 3, 4]
  • rpush,从右往左插入

blpop

  • 返回值 List 是一个二元组,[0] 表示 key[1] 表示 value
  • 超时时间设为 0 表示死等
  • 在执行同时,起一个 redis-cli,插入数据,即可以看到 blpop 的返回结果

**注意:**在代码中另起一个线程,直接通过当前 jedis 这个连接插入数据是不行的,必须另起一个 jedis 连接

public static void test3(Jedis jedis) {  jedis.flushAll();  while(true) {  List<String> values = jedis.blpop(0, "key");  System.out.println(values);  }  
}

image.png
image.png

lindex

public static void test4(Jedis jedis) {  jedis.flushAll();  jedis.rpush("key", "1", "2", "3", "4");  String value = jedis.lindex("key", 3);  System.out.println(value);  
}//输出结果
4
  • 参数是元素的下标

linsert

将新元素插入到指定元素前/后

public static void test5(Jedis jedis) {  jedis.flushAll();  jedis.rpush("key", "a", "b", "c", "d");  jedis.linsert("key", ListPosition.BEFORE, "c", "100");  List<String> values = jedis.lrange("key", 0, -1);  System.out.println(values);  
}//输出结果
[a, b, 100, c, d]
  • BEFOREListPostion.BEFORE
  • AFTERListPPostion.BEFORE

llen

获取 list 的长度

public static void test6(Jedis jedis) {  jedis.flushAll();  jedis.rpush("key", "1", "2", "3", "4");  long n = jedis.llen("key");  System.out.println(n);  
}//返回结果
4

哈希表操作

hset 和 hget

public static void test1(Jedis jedis) {  jedis.flushAll();  jedis.hset("key", "name", "zhangsan");  jedis.hset("key", "age", "20");  String name = jedis.hget("key", "name");  System.out.println(name);  String age = jedis.hget("key", "age");  System.out.println(age);  
}//输出结果
zhangsan
20

hexists 和 hdel

public static void test2(Jedis jedis) {  jedis.flushAll();  jedis.hset("key", "name", "zhangsan");  boolean ok = jedis.hexists("key", "name");  System.out.println(ok);  jedis.hdel("key", "name");  ok = jedis.hexists("key", "name");  System.out.println(ok);  
}
  • hdel 删除的是 field
  • del 删除的是 key

hkeys 和 hval

  • hkeys:获取所有 key
  • hval:获取所有 value
public static void test3(Jedis jedis) {  jedis.flushAll();  jedis.hset("key", "name", "zhangsan");  jedis.hset("key", "age", "20");  Set<String> keys = jedis.hkeys("key");  System.out.println(keys);  List<String> values = jedis.hvals("key");  System.out.println(values);  
}//输出结果
[name, age]
[zhangsan, 20]

hmget

一次获取 hash 中多个字段的值

public static void test4(Jedis jedis) {  jedis.flushAll();  jedis.hset("key", "name", "zhangsan");  jedis.hset("key", "age", "20");  jedis.hset("key", "gender", "man");  List<String> values = jedis.hmget("key", "name", "age", "gender", "hh", "kk");  System.out.println(values);  
}//输出结果:[zhangsan, 20, man, null, null]

hlen

获取 hash 中的所有字段的个数

public static void test5(Jedis jedis) {  jedis.flushAll();  jedis.hset("key", "name", "zhangsan");  jedis.hset("key", "age", "20");  long n = jedis.hlen("key");  System.out.println(n);  
}//输出结果:2

hincrby 和 hincrbyfloate

public static void test6(Jedis jedis) {  jedis.hset("key", "age", "20");  long n = jedis.hincrBy("key", "age", 10);  System.out.println(n);  String value = jedis.hget("key", "age");  System.out.println(value);  double dn = jedis.hincrByFloat("key", "age", 5.5);  System.out.println(dn);  value = jedis.hget("key", "age");  System.out.println(value);  
}//输出结果
30
30
35.5
35.5

集合操作

sadd 和 smembers

  • 将一个或者多个元素添加到 set 中,重复的元素无法添加到 set
  • 获取一个 set 中的所有元素,**元素之间的顺序是无序的!!!
public static void test1(Jedis jedis) {  jedis.flushAll();  jedis.sadd("key", "aaa", "bbb", "ccc");  Set<String> members = jedis.smembers("key");  System.out.println(members);  
}//返回结果:[aaa, ccc, bbb]

srem 和 sismember

  • 将制定的元素从 set 中删除
  • 用于检查元素是否属于集合 set
public static void test2(Jedis jedis) {  jedis.flushAll();  jedis.sadd("key", "aaa", "bbb", "ccc");  boolean ok = jedis.sismember("key", "aaa");  System.out.println(ok);  long n = jedis.srem("key", "aaa", "bbb");  System.out.println(n);  ok = jedis.sismember("key", "aaa");  System.out.println(ok);  
}//运行结果
true
2
false

scard

获取一个 set 的基数(cardinality),即 set 中的元素个数

public static void test3(Jedis jedis) {  jedis.flushAll();  jedis.sadd("key", "aaa", "bbb", "ccc");  long n = jedis.scard("key");  System.out.println(n);  
}//输出结果
3

sinter

获取给定 set 的交集中的元素

public static void test4(Jedis jedis) {  jedis.flushAll();  jedis.sadd("key1", "aaa", "bbb", "ccc");  jedis.sadd("key2", "aaa", "bbb", "ddd");  Set<String> results = jedis.sinter("key1", "key2");  System.out.println(results);  
}//输出结果
[aaa, bbb]

sunion

获取给定 set 的并集中的元素

public static void test5(Jedis jedis) {  jedis.flushAll();  jedis.sadd("key1", "aaa", "bbb", "ccc");  jedis.sadd("key2", "aaa", "bbb", "ddd");  Set<String> results = jedis.sunion("key1", "key2");  System.out.println(results);  
}//输出结果
[aaa, ccc, bbb, ddd]

sdiff

获取给定 set 的差集中的元素

public static void test6(Jedis jedis) {  jedis.flushAll();  jedis.sadd("key1", "aaa", "bbb", "ccc");  jedis.sadd("key2", "aaa", "bbb", "ddd");  Set<String> results = jedis.sdiff("key1", "key2");  System.out.println(results);  
}//输出结果
[ccc]

有序集合操作

zadd 和 zrange

public static void test1(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  jedis.zadd("key", 98, "赵云");  jedis.zadd("key", 95, "典韦");  jedis.zadd("key", 92, "关羽");  jedis.zadd("key", 70, "刘备");  List<String> members = jedis.zrange("key", 0, -1);  System.out.println(members);  List<Tuple> membersWithScore = jedis.zrangeWithScores("key", 0, -1);  System.out.println(membersWithScore);
}//输出结果
[刘备, 关羽, 典韦, 赵云, 吕布]
[[刘备,70.0], [关羽,92.0], [典韦,95.0], [赵云,98.0], [吕布,100.0]]
  • 如果需要逆序输出,只要使用 ZREVRANGE 即可

zrem 和 zcard

  • 删除指定元素
  • 获取一个 zset 的计数,即元素个数
public static void test2(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  jedis.zadd("key", 98, "赵云");  jedis.zadd("key", 95, "典韦");  jedis.zadd("key", 92, "关羽");  jedis.zadd("key", 70, "刘备");  long n = jedis.zcard("key");  System.out.println(n);  n = jedis.zrem("key", "吕布", "赵云");  System.out.println(n);  n = jedis.zcard("key");  System.out.println(n);  
}//输出结果
5
2
3
  • zrem 返回的是删除成功的元素个数

zcount

返回分数在 minmax 之间元素的个数,默认情况下 minmax 都是包含的,可以通过 () 排除

public static void test3(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  jedis.zadd("key", 98, "赵云");  jedis.zadd("key", 95, "典韦");  jedis.zadd("key", 92, "关羽");  jedis.zadd("key", 70, "刘备");  long n = jedis.zcount("key", 92, 98);  System.out.println(n);  
}//输出结果
3
  • 闭区间

zpopmax 和 zpopmin

删除并返回分数最高/最低count 个元素

public static void test4(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  jedis.zadd("key", 98, "赵云");  jedis.zadd("key", 95, "典韦");  jedis.zadd("key", 92, "关羽");  jedis.zadd("key", 70, "刘备");  Tuple tuple = jedis.zpopmax("key");  System.out.println(tuple);  tuple = jedis.zpopmin("key");  System.out.println(tuple);  
}//返回结果
[吕布,100.0]
[刘备,70.0]

zrank

  • 获取指定 member 的下标
public static void test5(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  jedis.zadd("key", 98, "赵云");  jedis.zadd("key", 95, "典韦");  jedis.zadd("key", 92, "关羽");  jedis.zadd("key", 70, "刘备");  long n = jedis.zrank("key", "赵云");  System.out.println(n);  n = jedis.zrevrank("key", "赵云");  System.out.println(n);  
}//输出结果
3
1
  • 分别是从前往后和从后往前

zscore

  • 返回指定元素的分数
public static void test6(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  jedis.zadd("key", 98, "赵云");  jedis.zadd("key", 95, "典韦");  jedis.zadd("key", 92, "关羽");  jedis.zadd("key", 70, "刘备");  double score = jedis.zscore("key", "赵云");  System.out.println(score);  
}//输出结果
98.0

zincrby

public static void test7(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key", 100, "吕布");  double n = jedis.zincrby("key", 10, "吕布");  System.out.println(n);  n = jedis.zincrby("key", -20, "吕布");  System.out.println(n);  
}//输出结果
110.0
90.0

zinterstore

求交集,结果保存到另一个 key

public static void test8(Jedis jedis) {  jedis.flushAll();  jedis.zadd("key1", 100, "吕布");  jedis.zadd("key1", 98, "赵云");  jedis.zadd("key1", 95, "典韦");  jedis.zadd("key2", 100, "吕布");  jedis.zadd("key2", 98, "赵云");  jedis.zadd("key2", 92, "关羽");  long n = jedis.zinterstore("key3", "key1", "key2");  System.out.println(n);  List<Tuple> tuples = jedis.zrangeWithScores("key3", 0, -1);  System.out.println(tuples);  
}//输出结果
2
[[赵云,196.0], [吕布,200.0]]
  • key1key2 中交集部分,放到 key3

总结

Jedis 这个库的本质就是针对 redis 的各种命令进行封装。调用某个方法,就相当于在 redis 客户端中敲下了对应的命令

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

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

相关文章

基于消失点标定前视相机外参

1. 消失点 艺术家&工程师在纸上表现立体图时,常用一种透视法,这种方法源于人们的视觉经验:近大远小,且平行的直线都消失于无穷远处同一个点。就像我们观察两条平行的铁轨时会觉得他们相交于远处的一点,我们把这个点称为消失点。 图1 铁轨组成的消失点 2. 在标定中的应…

TypeScript接口 interface 高级用法完全解析

TypeScript接口 interface 高级用法完全解析 mindmaproot(TypeScript接口高级应用)基础强化可选属性只读属性函数类型高级类型索引签名继承与合并泛型约束设计模式策略模式工厂模式适配器模式工程实践声明合并类型守卫装饰器集成一、接口核心机制深度解析 1.1 类型兼容性原理 …

Vue3 Pinia $subscribe localStorage的用法 Store的组合式写法

Vue3 Pinia $subscribe 可以用来监视Stroe数据的变化 localStorage的用法 localStorage中只能存字符串&#xff0c;所有对象要选转成json字符串 定义store时&#xff0c;从localStorage中读取数据talkList可能是字符串也可能是空数组 Store的组合式写法 直接使用reactiv…

新版AndroidStudio / IDEA上传项目到Gitee

目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…

用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件

回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件&#xff0c;如今3年过去了&#xff0c;计划使用Vue 3.5 TypeScript 把组件重新开发&#xff0c;有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…

C语言【数据结构】:时间复杂度和空间复杂度.详解

引言 详细介绍什么是时间复杂度和空间复杂度。 前言&#xff1a;为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时…

Matlab 基于专家pid控制的时滞系统

1、内容简介 Matlab 185-基于专家pid控制的时滞系统 可以交流、咨询、答疑 2、内容说明 略 在处理时滞系统&#xff08;Time Delay Systems&#xff09;时&#xff0c;使用传统的PID控制可能会面临挑战&#xff0c;因为时滞会导致系统的不稳定或性能下降。专家PID控制通过结…

MyBatis源码分析のSql执行流程

文章目录 前言一、准备工作1.1、newExecutor 二、执行Sql2.1、getMappedStatement2.2、query 三、Cache装饰器的执行时机四、补充总结 前言 本篇主要介绍MyBatis解析配置文件完成后&#xff0c;执行sql的相关逻辑&#xff1a; public class Main {public static void main(Str…

【MySQL】数据库基础

目录 一、什么是数据库1.1 为什么要有数据库1.2 数据库的本质是什么1.3 在Linux下看一下数据库 二、主流数据库三、基本使用3.1 连接服务器3.2 服务器&#xff0c;数据库&#xff0c;表关系 四、MySQL架构五、SQL分类六、存储引擎6.1 存储引擎是什么6.2 查看存储引擎6.3 存储引…

算是解决可以访问github但无法clone的问题

本文的前提是使用了**且可以正常访问github 查看代理的端口 将其配置到git 首先查看git配置 git config --list然后添加配置&#xff0c;我这边使用的是Hiddfy默认的端口是12334&#xff0c;如果是clash应该是7890 git config --global http.proxy 127.0.0.1:12334其他 删除…

SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器

目录 1. 配置嵌入式服务器 1.1 如何定制和修改Servlet容器的相关配置 1.server.port8080 2. server.context-path/tx 3. server.tomcat.uri-encodingUTF-8 1.2 注册Servlet三大组件【Servlet&#xff0c;Filter&#xff0c;Listener】 1. servlet 2. filter 3. 监听器…

AdaLoRA 参数 配置:CAUSAL_LM“ 表示因果语言模型任务

AdaLoRA 参数 配置:CAUSAL_LM" 表示因果语言模型任务 config = AdaLoraConfig( init_r=16, # 增加 LoRA 矩阵的初始秩 lora_alpha=32, target_modules=[“q_proj”, “v_proj”], lora_dropout=0.1, bias=“none”, task_type=“CAUSAL_LM” ) 整体功能概述 AdaLoraCon…

IP 协议

文章目录 IP 协议概述数据包格式首部校验和实例分析实例一 分片抓包分析参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删除。 IP 协议 概述 IP 协议是 TCP/IP 协议簇中的核心协议&#xff0c;也…

日常开发记录-radioGroup组件

日常开发记录-radioGroup组件 1.前提2.问题&#xff1a;无限循环调用3.解释Vue 事件传播机制分析与无限循环原因解释4.解决 1.前提 在上一章的&#xff0c;我们实现了radio组件。从这进入了解 新增个radioGroup组件呢。 <template><divclass"q-radio-group&quo…

API调用comfyui工作流,做一个自己的app,chatgpt给我写的前端,一键创建自己的卡通形象,附源码

前言 工具介绍 首先 comfyui你是少不了的&#xff0c;这个是工作流的后端支持&#xff0c;用这个去调试工作流和生成API可调用文件 前端我们就用很流行的gradio吧&#xff0c;什么你一时半会没有学gradio的计划&#xff0c;没事&#xff0c;笔者也没系统学过&#xff0c;我干…

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中&#xff0c;数据流&#xff08;Data Workflow&#xff09;描述了应用程序中数据的流动过程&#xff0c;涉及 Routes&#xff08;路由&#xff09;、Controllers&#xff08;控制器&#xff09;、Models&#xff08;模型&#xff09; 和 Middleware&#xff08;中间件&…

【通义千问】蓝耘智算 | 智启未来:蓝耘MaaS×通义QwQ-32B引领AI开发生产力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。

Scratch是一款由麻省理工学院&#xff08;MIT&#xff09; 设计开发的少儿编程工具。其特点是&#xff1a;使用者可以不认识英文单词&#xff0c;也可以不使用键盘&#xff0c;就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以…

Deepseek学习--工具篇之Ollama

Deepseek学习--工具篇之Ollama 用途特点简化部署‌轻量级与可扩展性‌API支持‌预构建模型库‌模型导入与定制‌跨平台支持‌命令行工具与环境变量‌ 来源缘起诞生爆发持续 安装使用方法下载安装安装模型调用API 用途 我们在进行Deepseek本地部署的时候&#xff0c;通常会用到…

Flask多参数模版使用

需要建立目录templates&#xff1b; 把建好的html文件放到templates目录里面&#xff1b; 约定好参数名字&#xff0c;单个名字可以直接使用&#xff1b;多参数使用字典传递&#xff1b; 样例&#xff1a; from flask import render_template # 模板 (Templates) #Flask 使用…