Redis(三) - 使用Java操作Redis详解

文章目录

  • 前言
  • 一、创建项目
  • 二、导入依赖
  • 三、键操作
  • 四、字符串操作
  • 五、列表操作
  • 六、集合操作
  • 七、哈希表操作
  • 八、有序集合操作
  • 九、完整代码
    • 1. 完整代码
    • 2. 项目下载


前言

本文主要介绍如何使用 Java 操作 Redis 数据库,涵盖项目创建、依赖导入及 Redis 各数据类型(键、字符串、列表、集合、哈希表、有序集合)的常用操作示例。通过 IDEA + Maven 搭建开发环境,并基于 Jedis 客户端实现代码演示,适合 Java 开发者快速掌握 Redis 的编程接口与基本操作逻辑。


一、创建项目

在开始使用 Java 操作 Redis 之前,需先搭建开发环境。本章节以 IDEA 为开发工具,演示如何创建一个基于 Maven 的 Java 项目。通过 IDEA 的项目向导,依次选择 Java 项目类型、配置 Maven 管理依赖、指定 JDK 版本,快速生成标准的项目结构,为后续引入 Redis 依赖和编写代码做好准备。

打开IDEA,点击文件-->新建-->项目

在这里插入图片描述

如下图所示,选择Java-->输入项目名-->选择位置-->选择Maven-->选择JDK-->点击创建

在这里插入图片描述


二、导入依赖

Maven 是 Java 项目中常用的依赖管理工具,通过在 pom.xml 文件中添加 Redis 客户端(Jedis)的依赖配置,Maven 会自动下载并管理相关 Jar 包。本章节详细说明如何在 Maven 项目中引入 Jedis 依赖(版本为 5.0.1),并通过 IDEA 的依赖刷新功能完成配置,确保项目能够调用 Redis 的 Java API。

pom.xml文件中添加如下依赖配置。

    <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.1</version></dependency></dependencies>

添加依赖后如下图所示,点击右上角的刷新图标下载配置Redis依赖包。

在这里插入图片描述


三、键操作

键(Key)是 Redis 中最基础的操作对象,本章节通过 Jedis 客户端演示键的常用操作,包括创建键值对(set/mset)、获取键值(get/mget)、查询所有键或匹配模式的键(keys)、判断键是否存在(exists)、重命名键(rename)、设置键过期时间(expire/ttl)、删除键(del)等。代码示例覆盖了键操作的核心功能,帮助理解 Redis 键的生命周期管理。

    public static void keyOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给school键设置值为dy。String set = jedis.set("school", "dy");System.out.println(set);System.out.println("===============");// 示例:给k1键设置值为v1,k2键设置值为v2,k3键设置值为v3。jedis.mset("k1", "v1", "k2", "v2", "k3", "v3");System.out.println(jedis.mget("k1", "k2", "k3"));System.out.println("===============");// 示例1:查看所有键。Set<String> keys = jedis.keys("*");for (String key : keys) {System.out.println(key);}System.out.println("===============");// 示例2:查看所有以k开头的键。Set<String> keys1 = jedis.keys("k*");for (String key : keys1) {System.out.println(key);}System.out.println("===============");// 示例:查看scool键的值。String school = jedis.get("school");System.out.println(school);System.out.println("===============");// 示例:查看k1、k2、k3键的值。List<String> mget = jedis.mget("k1", "k2", "k3");for (String s : mget) {System.out.println(s);}System.out.println("===============");// 示例:查看k1键的值的序列化版本。byte[] k1s = jedis.dump("k1");System.out.println(Arrays.toString(k1s));System.out.println("===============");// 示例1:查看school键是否存在。Boolean exists = jedis.exists("school");System.out.println(exists);System.out.println("===============");// 示例2:查看k1、k2、k3、k4、k5键是否存在。long exists1 = jedis.exists("k1", "k2", "k3", "k4", "k5");System.out.println(exists1);// 示例:查看school键的值的类型。String type = jedis.type("school");System.out.println(type);System.out.println("===============");// 示例:把school键重命名为new_school键。String rename = jedis.rename("school", "new_school");System.out.println(rename);System.out.println("===============");// 示例:把k3键的生存时间设置为600秒。long expire = jedis.expire("k3", 600);System.out.println(expire);System.out.println("===============");// 示例:查看k3键的剩余存活时间。long ttl = jedis.ttl("k3");System.out.println(ttl);System.out.println("===============");// 示例:删除k3键的存活时间。long persist = jedis.persist("k3");System.out.println(persist);System.out.println("===============");// 示例1:删除school键。long del = jedis.del("school");System.out.println(del);System.out.println("===============");// 示例2:删除k1、k2、k3键。long del1 = jedis.del("k1", "k2", "k3");System.out.println(del1);System.out.println("===============");// 关闭连接jedis.close();}

四、字符串操作

字符串(String)是 Redis 最常用的数据类型,适用于存储简单的键值对。本章节通过示例代码演示字符串的常见操作,包括设置值(set/mset)、获取值(get/mget)、获取字符串长度(strlen)、截取子字符串(getrange)、替换指定索引内容(setrange)、追加内容(append)等。通过 getSet 方法还展示了原子性的 “获取旧值并设置新值” 操作。

    public static void stringOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给字符串键str1设置值为value1。String set = jedis.set("str1", "value1");System.out.println(set);System.out.println("===============");// 示例:给字符串键str2、str3、str4分别设置值为value2、value3、value4。String mset = jedis.mset("str2", "value2", "str3", "value3", "str4", "value4");System.out.println(mset);System.out.println("===============");// 示例:获取字符串键str1的值。String str1 = jedis.get("str1");System.out.println(str1);System.out.println("===============");// 示例:获取字符串键str2、str3、str4的值。List<String> mget = jedis.mget("str2", "str3", "str4");for (String s : mget) {System.out.println(s);}System.out.println("===============");// 示例:获取字符串键str1的旧值,并设置新值为new_value1。String getSet = jedis.getSet("str1", "new_value1");System.out.println(getSet);// 查看设置后的新值。String str11 = jedis.get("str1");System.out.println(str11);System.out.println("===============");// 示例:获取字符串键str1的值的长度。long strlen = jedis.strlen("str1");System.out.println(strlen);System.out.println("===============");// 示例:获取字符串键str1的索引0-5的值的内容。String getrange = jedis.getrange("str1", 0, 5);System.out.println(getrange);System.out.println("===============");// 示例:把字符串键str1从索引2开始的后面三个字母的内容替换为aaa。long setrange = jedis.setrange("str1", 2, "aaa");System.out.println(setrange);// 查看设置后的新值。String str12 = jedis.get("str1");System.out.println(str12);System.out.println("===============");// 示例:向字符串键str1的结尾追加内容bbb。long append = jedis.append("str1", "bbb");System.out.println(append);// 查看设置后的新值。String str13 = jedis.get("str1");System.out.println(str13);// 关闭连接jedis.close();}

五、列表操作

列表(List)是 Redis 中有序、可重复的链表结构,支持从头部或尾部插入 / 删除元素。本章节通过代码示例演示列表的核心操作,包括右推(rpush)和左推(lpush)元素、获取列表范围元素(lrange)、获取指定索引元素(lindex)、弹出尾部(rpop)和头部(lpop)元素、移除指定元素(lrem)、获取列表长度(llen)等。列表操作适用于队列、栈等场景。

    public static void listOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:在列表右端向列表color中添加多个值。// rpush color blue green purple red whitelong rpush = jedis.rpush("color", "blue", "green", "purple", "red", "white");System.out.println(rpush);System.out.println("===============");// 示例:在列表左端向列表color中添加多个值。// lpush color blue2 green2 purple2 red2 white2long lpush = jedis.lpush("color", "blue2", "green2", "purple2", "red2", "white2");System.out.println(lpush);System.out.println("===============");// 示例1:获取列表color中索引0-5的元素。List<String> color = jedis.lrange("color", 0, 5);for (String s : color) {System.out.println(s);}System.out.println("===============");// 示例2:获取列表color中的所有元素。List<String> color1 = jedis.lrange("color", 0, -1);for (String s : color1) {System.out.println(s);}System.out.println("===============");// 示例:获取列表color中索引为2的元素。String color2 = jedis.lindex("color", 2);System.out.println(color2);System.out.println("===============");// 示例:移除并获取列表color中的最后一个(最右端)元素。String rpop = jedis.rpop("color");System.out.println(rpop);System.out.println("===============");// 示例:移除并获取列表color中的第一个(最左端)元素。String lpop = jedis.lpop("color");System.out.println(lpop);System.out.println("===============");// 示例:获取列表color的长度。long llen = jedis.llen("color");System.out.println(llen);System.out.println("===============");// 示例1:从列表开头开始搜索移除列表color中1个red元素。long lrem = jedis.lrem("color", 1, "red");System.out.println(lrem);System.out.println("===============");// 示例2:从列表结尾开始搜索移除列表color中3个blue元素。long lrem1 = jedis.lrem("color", -3, "blue");System.out.println(lrem1);System.out.println("===============");// 示例3:移除列表color中所有blue2元素。long lrem2 = jedis.lrem("color", 0, "blue2");System.out.println(lrem2);System.out.println("===============");// 关闭连接jedis.close();}

六、集合操作

集合(Set)是 Redis 中无序、唯一的元素集合,支持高效的成员判断和集合运算。本章节通过示例代码演示集合的基本操作,包括添加成员(sadd)、获取成员数量(scard)、查询所有成员(smembers)、判断成员是否存在(sismember)、移除成员(srem)、移动成员到其他集合(smove)等。集合操作适用于去重、交集 / 并集 / 差集计算等场景。

    public static void setOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给集合键set1添加多个成员。// sadd set1 mem1 mem2 mem3long sadd = jedis.sadd("set1", "mem1", "mem2", "mem3");System.out.println(sadd);System.out.println("===============");// 示例:查看集合键set1中成员的数量。long scard = jedis.scard("set1");System.out.println(scard);System.out.println("===============");// 示例:查看集合键set1中的所有成员。Set<String> set1 = jedis.smembers("set1");for (String s : set1) {System.out.println(s);}System.out.println("===============");// 示例:检查成员mem1是否在集合set1中。boolean sismember = jedis.sismember("set1", "mem1");System.out.println(sismember);System.out.println("===============");// 示例:移除集合set1中成员mem3。long srem = jedis.srem("set1", "mem3");System.out.println(srem);System.out.println("===============");// 示例:把集合set1中成员mem2移动到集合set2中。long smove = jedis.smove("set1", "set2", "mem2");System.out.println(smove);System.out.println("===============");// 关闭连接jedis.close();}

七、哈希表操作

哈希表(Hash)用于存储字段和值的映射关系,适合存储对象数据。本章节通过代码示例演示哈希表的常用操作,包括单个字段设置(hset)和批量设置(hmset)、获取单个字段值(hget)和多个字段值(hmget)、获取所有字段和值(hgetAll)、删除字段(hdel)等。哈希表操作能有效减少键的数量,提升数据结构化存储的效率。

    public static void hashOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给哈希表student添加一个学生信息。// hset student:1 name zhangsan// hset student:1 age 19// hset student:1 address yunnanlong hset = jedis.hset("student:1", "name", "zhangsan");System.out.println(hset);long hset1 = jedis.hset("student:1", "age", "19");System.out.println(hset1);long hset2 = jedis.hset("student:1", "address", "yunnan");System.out.println(hset2);System.out.println("===============");// 示例:给哈希表student添加一个学生信息。// hmset student:2 name lisi age 20 address guizhouMap<String, String> map = new HashMap<>();map.put("name", "lisi");map.put("age", "20");map.put("address", "guizhou");String hmset = jedis.hmset("student:2", map);System.out.println(hmset);System.out.println("===============");// 示例:获取hash键student:2中name字段的值。String hget = jedis.hget("student:2", "name");System.out.println(hget);System.out.println("===============");// 示例:获取hash键student:2中name、age和address字段的值。List<String> hget1 = jedis.hmget("student:2", "name", "age", "address");for (String s : hget1) {System.out.println(s);}System.out.println("===============");// 示例:获取hash键student:2中的所有字段和值。Map<String, String> student2 = jedis.hgetAll("student:2");for (Map.Entry<String, String> entry : student2.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}System.out.println("===============");// 示例:获取hash键student:2中的所有字段。Set<String> hkeys = jedis.hkeys("student:2");for (String s : hkeys) {System.out.println(s);}System.out.println("===============");// 示例:获取hash键student:2中的所有值。List<String> hvals = jedis.hvals("student:2");for (String s : hvals) {System.out.println(s);}System.out.println("===============");// 示例:删除hash键student:2中的age和address字段。long hdel = jedis.hdel("student:2", "age", "address");System.out.println(hdel);System.out.println("===============");// 关闭连接jedis.close();}

八、有序集合操作

有序集合(Sorted Set)每个成员关联一个分数(Score),通过分数实现自动排序。本章节通过示例代码演示有序集合的核心操作,包括添加成员及分数(zadd)、获取成员数量(zcard)、统计指定分数范围的成员数(zcount)、按索引范围获取成员(zrange)、获取成员分数(zscore)、移除成员(zrem)等。有序集合适用于排行榜、范围查询等场景。

    public static void orderSetOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给有序集合salary添加多个分数和成员。// zadd salary 5000 zhnagsan 4500 lisi 6000 wangwuMap<String, Double> map = new HashMap<>();map.put("zhangsan", 5000.0);map.put("lisi", 4500.0);map.put("wangwu", 6000.0);long zadd = jedis.zadd("salary", map);System.out.println(zadd);System.out.println("===============");// 示例:获取有序集合salary中的成员数量。long zcard = jedis.zcard("salary");System.out.println(zcard);System.out.println("===============");// 示例:计算有序集合中分数在5000-6500之间的成员数量。long zcount = jedis.zcount("salary", 5000, 6500);System.out.println(zcount);System.out.println("===============");// 示例:根据索引范围获取有序集合salary中的成员。// zrange salary 0 1List<String> salary = jedis.zrange("salary", 0, 1);for (String s : salary) {System.out.println(s);}System.out.println("===============");// 示例:获取有序集合salary中成员wangwu的分数。Double zscore = jedis.zscore("salary", "wangwu");System.out.println(zscore);System.out.println("===============");// 示例:移除有序集合salary中成员wangwu。long zrem = jedis.zrem("salary", "wangwu");System.out.println(zrem);System.out.println("===============");// 关闭连接jedis.close();}

九、完整代码

1. 完整代码

本章节提供上述所有操作示例的整合代码,方便开发者直接参考或运行。代码包含项目初始化、依赖配置及各数据类型操作的完整逻辑,可用于验证 Redis 功能或作为实际项目的基础模板。通过完整代码示例,可快速复现文中演示的所有操作,加深对 Java 操作 Redis 的整体理解。

package org.example;import redis.clients.jedis.Jedis;import java.util.*;public class Main {public static void main(String[] args) {flushDB(1);stringOperation();keyOperation();listOperation();setOperation();hashOperation();orderSetOperation();}public static void flushDB(int dbIndex) {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(dbIndex);// 清空数据库jedis.flushDB();// 关闭连接jedis.close();}public static void keyOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给school键设置值为dy。String set = jedis.set("school", "dy");System.out.println(set);System.out.println("===============");// 示例:给k1键设置值为v1,k2键设置值为v2,k3键设置值为v3。jedis.mset("k1", "v1", "k2", "v2", "k3", "v3");System.out.println(jedis.mget("k1", "k2", "k3"));System.out.println("===============");// 示例1:查看所有键。Set<String> keys = jedis.keys("*");for (String key : keys) {System.out.println(key);}System.out.println("===============");// 示例2:查看所有以k开头的键。Set<String> keys1 = jedis.keys("k*");for (String key : keys1) {System.out.println(key);}System.out.println("===============");// 示例:查看scool键的值。String school = jedis.get("school");System.out.println(school);System.out.println("===============");// 示例:查看k1、k2、k3键的值。List<String> mget = jedis.mget("k1", "k2", "k3");for (String s : mget) {System.out.println(s);}System.out.println("===============");// 示例:查看k1键的值的序列化版本。byte[] k1s = jedis.dump("k1");System.out.println(Arrays.toString(k1s));System.out.println("===============");// 示例1:查看school键是否存在。Boolean exists = jedis.exists("school");System.out.println(exists);System.out.println("===============");// 示例2:查看k1、k2、k3、k4、k5键是否存在。long exists1 = jedis.exists("k1", "k2", "k3", "k4", "k5");System.out.println(exists1);// 示例:查看school键的值的类型。String type = jedis.type("school");System.out.println(type);System.out.println("===============");// 示例:把school键重命名为new_school键。String rename = jedis.rename("school", "new_school");System.out.println(rename);System.out.println("===============");// 示例:把k3键的生存时间设置为600秒。long expire = jedis.expire("k3", 600);System.out.println(expire);System.out.println("===============");// 示例:查看k3键的剩余存活时间。long ttl = jedis.ttl("k3");System.out.println(ttl);System.out.println("===============");// 示例:删除k3键的存活时间。long persist = jedis.persist("k3");System.out.println(persist);System.out.println("===============");// 示例1:删除school键。long del = jedis.del("school");System.out.println(del);System.out.println("===============");// 示例2:删除k1、k2、k3键。long del1 = jedis.del("k1", "k2", "k3");System.out.println(del1);System.out.println("===============");// 关闭连接jedis.close();}public static void stringOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给字符串键str1设置值为value1。String set = jedis.set("str1", "value1");System.out.println(set);System.out.println("===============");// 示例:给字符串键str2、str3、str4分别设置值为value2、value3、value4。String mset = jedis.mset("str2", "value2", "str3", "value3", "str4", "value4");System.out.println(mset);System.out.println("===============");// 示例:获取字符串键str1的值。String str1 = jedis.get("str1");System.out.println(str1);System.out.println("===============");// 示例:获取字符串键str2、str3、str4的值。List<String> mget = jedis.mget("str2", "str3", "str4");for (String s : mget) {System.out.println(s);}System.out.println("===============");// 示例:获取字符串键str1的旧值,并设置新值为new_value1。String getSet = jedis.getSet("str1", "new_value1");System.out.println(getSet);// 查看设置后的新值。String str11 = jedis.get("str1");System.out.println(str11);System.out.println("===============");// 示例:获取字符串键str1的值的长度。long strlen = jedis.strlen("str1");System.out.println(strlen);System.out.println("===============");// 示例:获取字符串键str1的索引0-5的值的内容。String getrange = jedis.getrange("str1", 0, 5);System.out.println(getrange);System.out.println("===============");// 示例:把字符串键str1从索引2开始的后面三个字母的内容替换为aaa。long setrange = jedis.setrange("str1", 2, "aaa");System.out.println(setrange);// 查看设置后的新值。String str12 = jedis.get("str1");System.out.println(str12);System.out.println("===============");// 示例:向字符串键str1的结尾追加内容bbb。long append = jedis.append("str1", "bbb");System.out.println(append);// 查看设置后的新值。String str13 = jedis.get("str1");System.out.println(str13);// 关闭连接jedis.close();}public static void listOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:在列表右端向列表color中添加多个值。// rpush color blue green purple red whitelong rpush = jedis.rpush("color", "blue", "green", "purple", "red", "white");System.out.println(rpush);System.out.println("===============");// 示例:在列表左端向列表color中添加多个值。// lpush color blue2 green2 purple2 red2 white2long lpush = jedis.lpush("color", "blue2", "green2", "purple2", "red2", "white2");System.out.println(lpush);System.out.println("===============");// 示例1:获取列表color中索引0-5的元素。List<String> color = jedis.lrange("color", 0, 5);for (String s : color) {System.out.println(s);}System.out.println("===============");// 示例2:获取列表color中的所有元素。List<String> color1 = jedis.lrange("color", 0, -1);for (String s : color1) {System.out.println(s);}System.out.println("===============");// 示例:获取列表color中索引为2的元素。String color2 = jedis.lindex("color", 2);System.out.println(color2);System.out.println("===============");// 示例:移除并获取列表color中的最后一个(最右端)元素。String rpop = jedis.rpop("color");System.out.println(rpop);System.out.println("===============");// 示例:移除并获取列表color中的第一个(最左端)元素。String lpop = jedis.lpop("color");System.out.println(lpop);System.out.println("===============");// 示例:获取列表color的长度。long llen = jedis.llen("color");System.out.println(llen);System.out.println("===============");// 示例1:从列表开头开始搜索移除列表color中1个red元素。long lrem = jedis.lrem("color", 1, "red");System.out.println(lrem);System.out.println("===============");// 示例2:从列表结尾开始搜索移除列表color中3个blue元素。long lrem1 = jedis.lrem("color", -3, "blue");System.out.println(lrem1);System.out.println("===============");// 示例3:移除列表color中所有blue2元素。long lrem2 = jedis.lrem("color", 0, "blue2");System.out.println(lrem2);System.out.println("===============");// 关闭连接jedis.close();}public static void setOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给集合键set1添加多个成员。// sadd set1 mem1 mem2 mem3long sadd = jedis.sadd("set1", "mem1", "mem2", "mem3");System.out.println(sadd);System.out.println("===============");// 示例:查看集合键set1中成员的数量。long scard = jedis.scard("set1");System.out.println(scard);System.out.println("===============");// 示例:查看集合键set1中的所有成员。Set<String> set1 = jedis.smembers("set1");for (String s : set1) {System.out.println(s);}System.out.println("===============");// 示例:检查成员mem1是否在集合set1中。boolean sismember = jedis.sismember("set1", "mem1");System.out.println(sismember);System.out.println("===============");// 示例:移除集合set1中成员mem3。long srem = jedis.srem("set1", "mem3");System.out.println(srem);System.out.println("===============");// 示例:把集合set1中成员mem2移动到集合set2中。long smove = jedis.smove("set1", "set2", "mem2");System.out.println(smove);System.out.println("===============");// 关闭连接jedis.close();}public static void hashOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给哈希表student添加一个学生信息。// hset student:1 name zhangsan// hset student:1 age 19// hset student:1 address yunnanlong hset = jedis.hset("student:1", "name", "zhangsan");System.out.println(hset);long hset1 = jedis.hset("student:1", "age", "19");System.out.println(hset1);long hset2 = jedis.hset("student:1", "address", "yunnan");System.out.println(hset2);System.out.println("===============");// 示例:给哈希表student添加一个学生信息。// hmset student:2 name lisi age 20 address guizhouMap<String, String> map = new HashMap<>();map.put("name", "lisi");map.put("age", "20");map.put("address", "guizhou");String hmset = jedis.hmset("student:2", map);System.out.println(hmset);System.out.println("===============");// 示例:获取hash键student:2中name字段的值。String hget = jedis.hget("student:2", "name");System.out.println(hget);System.out.println("===============");// 示例:获取hash键student:2中name、age和address字段的值。List<String> hget1 = jedis.hmget("student:2", "name", "age", "address");for (String s : hget1) {System.out.println(s);}System.out.println("===============");// 示例:获取hash键student:2中的所有字段和值。Map<String, String> student2 = jedis.hgetAll("student:2");for (Map.Entry<String, String> entry : student2.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}System.out.println("===============");// 示例:获取hash键student:2中的所有字段。Set<String> hkeys = jedis.hkeys("student:2");for (String s : hkeys) {System.out.println(s);}System.out.println("===============");// 示例:获取hash键student:2中的所有值。List<String> hvals = jedis.hvals("student:2");for (String s : hvals) {System.out.println(s);}System.out.println("===============");// 示例:删除hash键student:2中的age和address字段。long hdel = jedis.hdel("student:2", "age", "address");System.out.println(hdel);System.out.println("===============");// 关闭连接jedis.close();}public static void orderSetOperation() {// 连接本地的 Redis 服务Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.select(1);// 示例:给有序集合salary添加多个分数和成员。// zadd salary 5000 zhnagsan 4500 lisi 6000 wangwuMap<String, Double> map = new HashMap<>();map.put("zhangsan", 5000.0);map.put("lisi", 4500.0);map.put("wangwu", 6000.0);long zadd = jedis.zadd("salary", map);System.out.println(zadd);System.out.println("===============");// 示例:获取有序集合salary中的成员数量。long zcard = jedis.zcard("salary");System.out.println(zcard);System.out.println("===============");// 示例:计算有序集合中分数在5000-6500之间的成员数量。long zcount = jedis.zcount("salary", 5000, 6500);System.out.println(zcount);System.out.println("===============");// 示例:根据索引范围获取有序集合salary中的成员。// zrange salary 0 1List<String> salary = jedis.zrange("salary", 0, 1);for (String s : salary) {System.out.println(s);}System.out.println("===============");// 示例:获取有序集合salary中成员wangwu的分数。Double zscore = jedis.zscore("salary", "wangwu");System.out.println(zscore);System.out.println("===============");// 示例:移除有序集合salary中成员wangwu。long zrem = jedis.zrem("salary", "wangwu");System.out.println(zrem);System.out.println("===============");// 关闭连接jedis.close();}
}

2. 项目下载

下载地址:https://download.csdn.net/download/zcs2312852665/90849803?spm=1001.2014.3001.5501

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

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

相关文章

【Folium】使用离线地图

文章目录 相关文献离线地图下载Folium 使用离线地图 相关文献 Folium — Folium 0.19.5 documentationOffline Map Maker 离线地图下载 我们使用 Offline Map Maker 进行地图下载。 特别注意&#xff1a;Folium 默认支持 WGS84 坐标系&#xff0c;建议下载 WGS84 坐标系的地…

DeepSearch:字节新一代 DeerFlow 框架

项目地址&#xff1a;https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架构设计】独家设计的 Research Team 机制&#xff0c;支持多轮对话、多轮决策和多轮任务执行。与 LangChain 原版 Supervisor 相比&#xff0c;显著减少 Tokens 消耗和 API 调用次数&#…

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口&#xff0c;当点击注册按钮时&#xff0c;登录窗口会消失&#xff0c;会出现一个新的注册界面&#xff1b;完成注册或退出注册时&#xff0c;注册窗口会消失&#xff0c;重新出现登录窗口。注册过的用户信息会出现在SQLi…

day 18:零基础学嵌入式之数据结构——

一、基础内容 1.数据结构&#xff1a;相互之间存在一种或多种特定关系的数据元素的集合。 2.逻辑结构 &#xff08;1&#xff09;集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等。 &#xff08;2&#xff09;线性&#xff0c;数据和数据之间是一对一的关系 &am…

【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发

客户端验证HTTPS网站证书是否由受信任的根证书颁发机构&#xff08;CA&#xff09;签发&#xff0c;是一个多步骤的过程&#xff0c;涉及证书链验证、信任锚&#xff08;Trust Anchor&#xff09;检查、域名匹配和吊销状态验证等。以下是详细的验证流程&#xff1a; 1. 证书链的…

iOS即时通信的技术要点

iOS即时通信开发的关键技术要点总结&#xff1a; 一、通讯协议选择 Socket通信 基础实现&#xff1a;使用原生BSD Socket或CFNetwork框架&#xff08;复杂&#xff09;&#xff0c;推荐第三方库如CocoaAsyncSocket&#xff08;封装GCDAsyncSocket&#xff09;&#xff0c;简化T…

智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖

智能AI在工地安全中的应用&#xff1a;从监测到救援的全流程实践 一、背景&#xff1a;高温作业下的工地安全挑战 随着夏季高温持续&#xff0c;工地户外作业环境面临严峻考验。工人因高温疲劳、脱水或突发疾病引发的行为异常&#xff08;如晕厥、抽搐、跌倒&#xff09;频发…

Doris

Apache Doris&#xff08;原名&#xff1a;Palo&#xff09;是一个高性能、实时的MPP分析型数据库&#xff0c;非常适合海量数据的即席查询、报表分析、指标统计等 OLAP 场景。Doris 的设计目标是&#xff1a;极致查询性能、简单易用、支持高并发分析和明细查询。 一、Doris 核…

# 2-STM32F103-复位和时钟控制RCC

STM32-复位和时钟控制RCC 2-STM32-复位和时钟控制RCC摘要说明本文参考资料如下&#xff1a; 一、STM32最小系统回顾STM32F103C8T6核心板原理图 二、复位三、时钟3.1 时钟树3.2 STM32启动过程3.2 SystemInit()函数3.2.1 SystemInit()第1句&#xff1a;3.2.2 SystemInit()第2句&a…

rk3576 gstreamer opencv

安装gstreamer rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 Installing on Linux sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-pl…

Quic如何实现udp可靠传输

QUIC&#xff08;Quick UDP Internet Connections&#xff09;是由 Google 设计并被 IETF 标准化的传输层协议&#xff0c;它基于 UDP 实现&#xff0c;但提供了类似 TCP 的可靠性和更高级的功能&#xff08;如多路复用、0-RTT 握手、TLS 加密等&#xff09;。 尽管 UDP 是不可…

uniapp-商城-59-后台 新增商品(属性的选中,进行过滤展示,filter,some,every和map)

前面讲了属性的添加&#xff0c;添加完成后&#xff0c;数据库中已经存在数据了&#xff0c;这时再继续商品的添加时&#xff0c;就可以进行属性的选择了。 在商品添加过程中&#xff0c;属性选择是一个关键步骤。首先&#xff0c;界面需要展示嵌套的属性数据&#xff0c;用户通…

负载均衡 ELB 在 zkmall开源商城高流量场景下的算法优化

在电商大促、直播带货等高频交易场景下&#xff0c;流量突发增长对系统稳定性提出严峻挑战。ZKmll 开源商城通过对负载均衡 ELB&#xff08;Elastic Load Balancer&#xff09;算法的深度优化&#xff0c;结合业务场景特性设计动态加权轮询 地域感知 热点分流的混合策略&…

Linux干货(三)

前言 从B站黑马程序员Linux课程摘选的学习干货&#xff0c;新手友好&#xff01;若有侵权&#xff0c;会第一时间处理。 目录 前言 1.which find命令 1.which命令 2.find命令 2.grep wc 管道符 1.grep命令 2.wc命令 3.管道符 3.echo tail 重定向符 1.echo命令 2.反…

Sigmoid与Softmax:从二分类到多分类的深度解析

Sigmoid与Softmax:从二分类到多分类的深度解析 联系 函数性质:二者都是非线性函数 ,也都是指数归一化函数,可将输入值映射为0到1之间的实数 ,都能把输出转化成概率分布的形式,在神经网络中常作为激活函数使用。Softmax是Sigmoid的推广:从功能角度看,Softmax函数可视为…

文件系统交互实现

关于之前的搭建看QT控件文件系统的实现-CSDN博客&#xff0c;接下来是对本程序的功能完善&#xff0c;我想着是这样设计的&#xff0c;打开一个目录以后&#xff0c;鼠标选中一个项可以是目录&#xff0c;也可以是文件&#xff0c;右键可以出现一个菜单选择操作&#xff0c;比如…

[ctfshow web入门] web75

信息收集 启用了open_basedir&#xff0c;所以之前的方法又不能用了 解题 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false …

Vulfocus靶场-文件上传-3

WSO2 文件上传 &#xff08;CVE-2022-29464&#xff09; WSO2是一家成立于 2005 年的开源技术提供商。它提供了一个企业平台&#xff0c;用于在本地和整个 Internet 上 集成应用程序编程接口(API)、应用程序和 Web 服务。 某些 WSO2 产品允许无限制的文件上传和远程代码执行。…

基于MCP的桥梁设计规范智能解析与校审系统构建实践

引言 今天本文准备盘一个大活&#xff0c;聊一聊偏特定行业一点的AI技术深入应用思考及实践。 一、传统设计行业项目背景与行业痛点 在桥梁设计领域&#xff0c;标准规范是设计的基础&#xff0c;直接关系到桥梁结构的安全性、耐久性和经济性。然而&#xff0c;传统的规范应…

远程连接电脑的方法?异地远程桌面连接和三方软件实现

远程连接电脑&#xff0c;是指通过网络技术&#xff0c;在一台设备上操控另一台设备的电脑桌面&#xff0c;实现跨地域的操作和管理。在日常工作、技术支持、远程办公等场景中&#xff0c;远程连接电脑都发挥着重要作用。实现远程连接电脑主要有系统自带工具和第三方软件两种方…