当前位置: 首页 > article >正文

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

相关文章:

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

文章目录 前言一、创建项目二、导入依赖三、键操作四、字符串操作五、列表操作六、集合操作七、哈希表操作八、有序集合操作九、完整代码1. 完整代码2. 项目下载 前言 本文主要介绍如何使用 Java 操作 Redis 数据库&#xff0c;涵盖项目创建、依赖导入及 Redis 各数据类型&…...

【全网首发】解决coze工作流批量上传excel数据文档数据重复的问题

注意&#xff1a;目前方法将基于前一章批量数据库导入的修改&#xff01;&#xff01;&#xff01;&#xff01;请先阅读上篇文章的操作。抄袭注明来源 背景 上一节说的方法可以批量导入文件到数据库&#xff0c;但是无法解决已经上传的条目更新问题。简单来说&#xff0c;不…...

高效异步 TCP/UDP 服务器设计:低延迟与高吞吐量实现指南

高效异步 TCP/UDP 服务器设计:低延迟与高吞吐量实现指南 1. 引言 在现代高并发网络环境中,如何设计一个低延迟且高吞吐量的 TCP/UDP 服务器成为了关键问题。从游戏服务器、实时数据处理,到高性能 API 网关,异步编程架构的选择至关重要。 在这篇文章中,我们将深入探讨如…...

xss-labs靶场第11-14关基础详解

前言&#xff1a; 目录 第11关 第12关 第13关前期思路&#xff1a; 第十四关 内容&#xff1a; 第11关 也和上一关一样&#xff0c;什么输入框都没有&#xff0c;也就是 也是一样的操作&#xff0c;先将这里的hidden属性删掉一个&#xff0c;注意是删掉一个 输入1111&a…...

ConcurrentSkipListMap的深入学习

目录 1、介绍 1.1、线程安全 1.2、有序性 1.3、跳表数据结构 1.4、API 提供的功能 1.5、高效性 1.6、应用场景 2、数据结构 2.1、跳表&#xff08;Skip List&#xff09; 2.2、节点类型&#xff1a; 1.Node 2.Index 3.HeadIndex 2.3、特点 3、选择层级 3.1、随…...

XML简要介绍

实际上现在的Java Web项目中更多的是基于springboot开发的&#xff0c;所以很少再使用xml去配置项目。所以我们的目的就是尽可能快速的去了解如何读懂和使用xml文件&#xff0c;对于DTD&#xff0c;XMLSchema这类约束的学习可以放松&#xff0c;主要是确保自己知道这里面的大致…...

什么是直播美颜SDK?美颜技术底层算法科普

当下&#xff0c;不论是社交直播、电商直播&#xff0c;还是线上教学、虚拟主播场景&#xff0c;都离不开美颜技术的加持。虽然大家在日常使用直播APP时经常体验到美颜效果&#xff0c;但背后的技术原理却相对复杂。本篇文章小编将为大家揭开直播美颜SDK的神秘面纱&#xff0c;…...

【pbootcms】打开访问首页显示未检测到您服务器环境的sqlite3数据库拓展,请检查php.ini中是否已经开启该拓展

【pbootcms】新建网站&#xff0c;新放的程序&#xff0c;打开访问首页显示未检测到您服务器环境的sqlite3数据库拓展&#xff0c;请检查php.ini中是否已经开启该拓展。 检查目前网站用到哪个版本的php&#xff0c;然后打开相关文件。 修改一下内容&#xff1a; 查找sqlite3,…...

MySQL——十、InnoDB引擎

MVCC 当前读&#xff1a; 读取的是记录的最新版本&#xff0c;读取时还要保证其他并发事务不能修改当前记录&#xff0c;会对读取的记录进行加锁。 -- 当前读 select ... lock in share mode(共享锁) select ... for update update insert delete (排他锁)快照读&#xff1a;…...

visual studio生成动态库DLL

visual studio生成动态库DLL 创建动态库工程 注意 #include “pch.h” 要放在上面 完成后点击生成 创建一个控制台项目 设置项目附加目录为刚才创建的动态库工程Dll1&#xff1a; 配置附加库目录&#xff1a; 配置动态库的导入库&#xff08;.lib&#xff09;&#xff1a;链…...

IDEA中git对于指定文件进行版本控制

最近在自己写代码的时候遇到了和公司里面不一样的&#xff0c;自己写的代码推到码云上是&#xff0c;会默认对于所有修改都进行提交&#xff0c;这样再提交的时候很不方便。 问了问ai&#xff0c;表示可以手动创建脚本实现&#xff0c;但是ai曲解了我的意思&#xff0c;它实现…...

用Python绘制梦幻星空

用Python绘制梦幻星空 在这篇教程中&#xff0c;我们将学习如何使用Python创建一个美丽的星空场景。我们将使用Python的图形库Pygame和随机库来创建闪烁的星星、流星和月亮&#xff0c;打造一个动态的夜空效果。 项目概述 我们将实现以下功能&#xff1a; 创建深蓝色的夜…...

GEE计算 RSEI(遥感生态指数)

&#x1f6f0;️ 什么是 RSEI&#xff1f;为什么要用它评估生态环境&#xff1f; RSEI&#xff08;遥感生态指数&#xff0c;Remote Sensing Ecological Index&#xff09; 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。 它的设计初衷是用最少的变量&…...

Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?

引言&#xff1a;泛型的“魔术”与类型擦除的困境 在 Java 中&#xff0c;泛型为开发者提供了类型安全的集合操作&#xff0c;但其背后的**类型擦除&#xff08;Type Erasure&#xff09;**机制却常常让人困惑。你是否遇到过这样的场景&#xff1f; List<String> list …...

达梦数据库多版本并发控制(MVCC)_yxy

达梦数据库多版本并发控制 1 多版本并发控制解决了什么问题&#xff1f;2 达梦MVCC实现方式2.1 版本链结构2.1.1 物理记录2.1.2 回滚记录2.1.3 版本链实现方式 2.2 可见性原则2.3 历史数据获取 1 多版本并发控制解决了什么问题&#xff1f; MVCC&#xff08;Multi-Version Con…...

math.js 加/减/乘/除 使用

math.js 加/减/乘/除 使用 安装 npm install mathjs引入 import * as math from "mathjs";使用 // 加法 let addNumber math.add( math.bignumber(0.1), math.bignumber(0.3)) // 加法 保留两位小数 let addNumber1 math.format(math.add( math.bignumber(0.1…...

python的家教课程管理系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

计算机组成原理——数据的表示

2.1数据的表示 整理自Beokayy_ 1.进制转换 十六进制与二进制的转换 一位十六进制等于四位二进制 四位二进制等于一位十六进制 0x173A4C0001 0111 0011 1010 0100 1100 十六进制与十进制的转换 十六转十&#xff1a;每一位数字乘以相应的16的幂再相加 十转十六&#xff1a…...

实现书签-第一部分

实现书签-第一部分 本节我们将实现书签功能&#xff0c;为菜谱点击类似于收藏的功能&#xff0c;然后可以在上方的书签找到我们所有收藏的书签&#xff1b; 在此之前&#xff0c;让我们修复一下之前的功能BUG&#xff0c;当我们搜索的时候&#xff0c;下面分页始终保持在上一…...

解决将其他盘可用空间,移植到C盘

第一步首先下载安装 用来扩内存盘的实用工具资源-CSDN文库 第二步打开diskgenius.exe 第三步选中想扩容的盘 右击-》选择扩容分区-》选择要缩小的分区-》然后确定 第四步拖拽对勾的地方 或者在箭头地方输入想阔的大小&#xff0c;然后开始&#xff0c;一直确定&#xff0c;就…...

第二天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 清晰的明白自己想要的是什么&#xff0c;培养兴趣也好&#xff0c;一定要有自己的一技之长。我们不说多优秀&#xff0c;但是如果父母需要我们出力&#xff0c;不要只有眼泪。 二、练习题 对…...

k8s灰度发布

基于 Traefik 的加权灰度发布-腾讯云开发者社区-腾讯云 Traefik | Traefik | v1.7 Releases traefik/traefik GitHub 从上面连接下载后上传到harbor虚拟机 vagrant upload /C/Users/HP280/Downloads/traefik 下载配置文件 wget -c http://raw.githubusercontent.com/conta…...

前端面经 9 JS中的继承

借用Class实现继承 实现继承 extends super extends 继承父类 super调用父类的构造函数 子类中存在方法采取就近原则 &#xff0c;子类构造函数需要使用super()调用父类的构造函数 JS 静态属性和私有属性 寄生组合式继承...

memcached主主复制+keepalive

一、Memcached主主复制技术原理 Memcached原生不支持复制&#xff0c;需通过repcached分支实现双向同步。其关键机制包括&#xff1a; 双向同步架构 两节点互为主备&#xff08;Master-Master&#xff09;&#xff0c;任意节点写入的数据会同步至对端。同步基于TCP协议&#x…...

光学设计核心

光学设计核心技术全流程教学&#xff1a;从理论建模到工程实践 一、光学设计基础理论体系构建 1.1 光线传播核心定律 • 斯涅尔定律&#xff1a;n_1\sin\theta_1 n_2\sin\theta_2&#xff0c;通过编程实现折射角动态计算&#xff08;Python示例&#xff09;&#xff1a; im…...

使用 `aiohttp` 构建高效的异步网络爬虫系统

使用 aiohttp 构建高效的异步网络爬虫系统 引言 在爬取大量网页时,传统同步方法(如 requests)可能面临网络 I/O 阻塞问题,导致性能低下。而 Python 的 aiohttp 结合 asyncio 提供了一种高效的解决方案,使得爬虫可以同时处理多个请求,大幅提升数据抓取速度。 本文将详细…...

Microsoft Azure 服务4月更新告示

由世纪互联运营的 Microsoft Azure 重要更新 名称变更 Azure Stack HCI现已正式更名为Azure Local&#xff0c;并成为其重要组成部分。Azure Local是一种超融合基础设施&#xff08;HCI&#xff09;解决方案&#xff0c;专为托管Windows和Linux虚拟机&#xff08;VM&#xff…...

idea运行

各种小kips Linuxidea上传 Linux 部署流程 1、先在idea打好jar包&#xff0c;clean之后install 2、在Linux目录下&#xff0c;找到对应项目目录&#xff0c;把原来的jar包放在bak文件夹里面 3、杀死上一次jar包的pid ps -ef|grep cliaidata.jar kill pid 4、再进行上传新的jar…...

第八天——贪心算法——队列重构问题

1. 题目 给定一个由人群组成的数组 people&#xff0c;其中每个人以 [hi, ki] 的形式表示&#xff0c;people[i] [hi, ki] 表示第 i 个人的身高为 hi&#xff0c;并且前面恰好有 ki 个身高大于或等于 hi 的人。 你需要重新构造并返回一个表示队列的数组 queue&#xff0c;其中…...

CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载

论文介绍 题目&#xff1a;MUST: The First Dataset and Unified Framework for Multispectral UAV Single Object Tracking 期刊&#xff1a;IEEE/CVF Computer Vision and Pattern Recognition Conference 论文&#xff1a;https://arxiv.org/abs/2503.17699 数据&#x…...