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

教你如何在Java中操作Redis

Redis的Java客户端

Redis Java 客户端很多,常用的几种:

  • Jedis:基于 Java 的 Redis 客户端,提供了 Redis 命令的全面支持。
  • Lettuce:高性能的 Java 客户端库,用于与 Redis 数据库进行交互。它支持同步、异步和反应式编程模型,提供了丰富的 API 来操作 Redis。Lettuce 与 Jedis 并列成为最热门的 Redis Java 客户端之一,并且已经成为 Spring Boot 2.0 版本默认的 Redis 客户端。
  • Spring Data Redis:Spring 提供的一个用于操作 Redis 的模块,它提供了多种高层次的数据访问抽象,使得在 Spring 应用程序中使用 Redis 变得更加容易和直观。

Spring Data Redis使用方式

操作步骤:

1.导入Spring Data Redis maven坐标:

<dependency>  <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.在配置文件中配置Redis数据源

spring:redis:   host: localhost    port: 6379   password: 123456

 3.编写配置类,创建RedisTemplate对象:

@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate getRedisTemplate(RedisConnectionFactory redisConnectionFactory){// 创建RedisTemplate模版对象log.info("开始创建Redis模版对象...");RedisTemplate redisTemplate = new RedisTemplate();// 设置模版对象关联的RedisConnectionFactoryredisTemplate.setConnectionFactory(redisConnectionFactory);// 设置模版对象关联的Key序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

4.通过RedisTemplate对象操作Redis:

RedisTemplate 针对大量api进行了归类封装,将同一数据类型操作封装为对应的Operation接口,具体分类如下:

@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test() {ValueOperations valueOperations = redisTemplate.opsForValue();// 字符操作操作HashOperations hashOperations = redisTemplate.opsForHash();// 哈希操作ListOperations listOperations = redisTemplate.opsForList();// 列表操作SetOperations setOperations = redisTemplate.opsForSet();// 集合操作ZSetOperations zSetOperations = redisTemplate.opsForZSet();// 有序集合操作}
}

 操作字符串类型的数据

 /*** 测试Redis字符串操作* 本方法展示了如何在Redis中设置和获取字符串值,包括设置过期时间和条件设置*/@Testpublic void testString() {// 获取RedisTemplate的ValueOperations对象,用于操作字符串值ValueOperations valueOperations = redisTemplate.opsForValue();// 设置键值对,将键"name"的值设置为"jack"valueOperations.set("name", "jack");// 尝试获取键"name"的值valueOperations.get("name");// 设置带过期时间的键值对,键"code"的值设置为"123",并在60秒后自动过期valueOperations.set("code","123",60, TimeUnit.SECONDS);// 使用setIfAbsent方法,如果键"code"不存在,则设置其值为"456"valueOperations.setIfAbsent("code", "456");}

 操作哈希类型的数据

 /*** 使用Redis的Hash数据类型进行操作的测试方法* 本方法主要演示了如何在Redis中使用HashOperations进行键值对存储、读取、删除等操作*/@Testpublic void testHash() {// 初始化HashOperations对象,用于操作Redis中的Hash数据类型HashOperations hashOperations = redisTemplate.opsForHash();// 向Redis中名为"user:1"的Hash中添加键值对,"name"字段存储值"jack"hashOperations.put("user:1","name","jack");// 向Redis中名为"user:1"的Hash中添加键值对,"age"字段存储值"18"hashOperations.put("user:1","age","18");// 从名为"user:1"的Hash中根据键"name"获取值,此处获取"jack"hashOperations.get("user:1","name");// 从名为"user:1"的Hash中根据键"age"获取值,此处获取"18"hashOperations.get("user:1","age");// 获取所有以"user"开头的Hash的键,用于查看或操作这些键对应的Hash数据hashOperations.keys("user");// 获取所有以"user"开头的Hash的值,用于查看或操作这些值hashOperations.values("user");// 从名为"user:1"的Hash中删除键为"name"的字段,此处删除"jack"hashOperations.delete("user:1","name");}

 操作列表类型的数据

  /*** 测试Redis列表操作* 本方法展示了如何在Redis列表中进行插入、查询和移动元素等操作*/@Testpublic void testList() {// 创建Redis列表操作对象ListOperations listOperations = redisTemplate.opsForList();// 向列表左侧添加一个元素listOperations.leftPush("list","jack");// 向列表左侧连续添加多个元素listOperations.leftPushAll("list","tom","lucy","mary");// 获取列表中的所有元素listOperations.range("list",0,-1);// 从列表右侧删除一个元素listOperations.rightPop("list");// 获取列表的大小listOperations.size("list");}

 操作集合类型的数据

 /*** 测试Redis中Set数据结构的操作* 本方法展示了使用RedisTemplate进行Set操作的各种方法,包括添加成员、获取成员、删除成员、检查成员是否存在等* 通过这些操作,我们可以了解如何在应用程序中操作Redis中的Set数据结构*/@Testpublic void testSet() {// 获取RedisTemplate的SetOperations操作对象SetOperations setOperations = redisTemplate.opsForSet();// 向名为"set"的集合中添加多个成员setOperations.add("set","jack","tom","lucy","mary");// 获取名为"set"的集合中的所有成员setOperations.members("set");// 获取名为"set"的集合的成员数量setOperations.size("set");// 检查名为"set"的集合中是否包含成员"jack"setOperations.isMember("set","jack");// 计算名为"set1"和"set2"的集合的交集setOperations.intersect("set1","set2");// 计算名为"set1"和"set2"的集合的并集setOperations.union("set1","set2");// 计算名为"set1"和"set2"的集合的差集setOperations.difference("set1","set2");// 随机获取名为"set"的集合中的2个成员setOperations.randomMembers("set",2);// 随机获取名为"set"的集合中的2个不重复成员setOperations.distinctRandomMembers("set",2);// 从名为"set"的集合中移除成员"jack"setOperations.remove("set","jack");}

 操作有序集合类型的数据

 /*** 测试Redis中ZSet的操作* 本方法通过使用RedisTemplate类的各种ZSet操作方法,演示如何对Redis中的ZSet进行操作* 包括添加元素、按范围查询、按分数查询、增加分数和删除元素等操作*/@Testpublic void testZSet() {// 获取ZSet操作对象ZSetOperations zSetOperations = redisTemplate.opsForZSet();// 向ZSet中添加元素,同时指定元素的分数zSetOperations.add("zset","jack",10);zSetOperations.add("zset","tom",20);zSetOperations.add("zset","lucy",30);// 按范围查询ZSet中的元素,0,-1表示查询所有元素zSetOperations.range("zset",0,-1);// 按分数查询ZSet中的元素,查询分数在0到100之间的元素zSetOperations.rangeByScore("zset",0,100);// 为指定元素增加分数,此处为将"jack"的分数增加10zSetOperations.incrementScore("zset","jack",10);// 删除ZSet中的指定元素zSetOperations.remove("zset","jack");}

通用命令

 /*** 测试RedisTemplate的常见操作* 本方法展示了与Redis交互的各种基本操作,包括键的检查、删除、过期、重命名以及事务操作等* 主要用于验证RedisTemplate的功能和集成*/@Testpublic void testCommon(){// 检索所有键redisTemplate.keys("*");// 检查是否存在特定的键redisTemplate.hasKey("name");// 删除单个键redisTemplate.delete("name");// 删除多个键redisTemplate.delete(Arrays.asList("name","age"));// 设置键的过期时间redisTemplate.expire("name",10, TimeUnit.SECONDS);// 移除键的过期时间,使其永不过期redisTemplate.persist("name");// 将键重命名为新的名称redisTemplate.rename("name","age");// 当键名不存在时,将其重命名为新的名称redisTemplate.renameIfAbsent("name","age");// 获取键的类型redisTemplate.type("name");}

相关文章:

教你如何在Java中操作Redis

Redis的Java客户端 Redis 的 Java 客户端很多&#xff0c;常用的几种&#xff1a; Jedis&#xff1a;基于 Java 的 Redis 客户端&#xff0c;提供了 Redis 命令的全面支持。Lettuce&#xff1a;高性能的 Java 客户端库&#xff0c;用于与 Redis 数据库进行交互。它支持同步、…...

nsight-system教程

一 安装 参考 nsight-compute使用教程-CSDN博客https://blog.csdn.net/youzjuer/article/details/142549332 二 使用 nsys profile -t cuda,nvtx --force-overwrite true -o xxxx python xxx.py xxxx表示生成文档的名字 如果是cuda c 则 python xxx.py替换为./xxx即可 这…...

进程的那些事--进程控制

目录 前言 一、创建进程 二、退出进程 void exit (int retval) 三、进程等待 四、进程替换 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 前面我们认识了进程&#xff0c;现在让我们认识几个进程的接口 提示&#xff1a;以下是本篇文章正文内容…...

FortiOS SSL VPN 用户访问权限配置

简介 使用不同用户组或用户登录 SSL VPN 隧道模式后&#xff0c;可配置不同的访问权限。 本文介绍为不同用户组分配不同访问权限的配置方法。 相关组件 FortiGate&#xff1a;FortiOS v6.4.14 build2093 (GA) 客户端&#xff1a;Windows11&#xff0c;安装 FortiClient VPN 7.…...

C++_vector类

欢迎来到本期节目- - - vector类 本期直接先上代码&#xff0c;然后以代码为例介绍需要注意的问题. 模拟实现&#xff1a; #pragma once #include<iostream> #include<assert.h> using namespace std;namespace my_room {template<class T>class vector{p…...

Spring Boot入门到精通:网上购物商城系统

第3章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析&#xff0c;这样做的目的就是使用最小成本解决最大问题&#xff0c;一旦程序开发满足用户需要&#xff0c;带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。…...

在Vue.js中,你可以使用Element UI的el-input组件结合计算属性来实现模糊查询

<template><div><el-input v-model"searchQuery" placeholder"请输入查询内容"></el-input><div v-for"item in filteredList" :key"item">{{ item }}</div></div> </template><s…...

delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)

delphi制作漂亮的农历窗体&#xff08;IntraWebLayui的完美结合&#xff09; 不需要安装服务器&#xff0c;Apache和IIS都不需要&#xff0c;自带企业级服务器。 运行exe服务器就架好了&#xff0c;直接打开手机浏览器或者电脑浏览器&#xff0c;网页就出来了&#xff0c;如果…...

发票OFD格式转换成PDF

引入依赖&#xff0c;低版本的报错&#xff0c;2.0.2能够实现转换 <dependency><groupId>org.ofdrw</groupId><artifactId>ofdrw-converter</artifactId><version>2.0.2</version><exclusions><exclusion><groupId&g…...

高通AI应用程序开发3:网络模型(一)

1. 支持的网络模型 Qualcomm神经处理SDK支持下表所列的网络模型。 有关支持的运行时和单个图层类型的限制和约束的详细信息&#xff0c;请参阅 限制 。 GPU运行时中支持的所有层对两种GPU模式都有效&#xff1a;GPU_FLOAT32_16_HYBRID和GPU_FLAAT16。GPU_FLOAT32_16_HYBRID-…...

03. 前端面试题之ts : typescript 的数据类型有哪些?

文章目录 一、typescript是什么二、typescript有哪些数据类型booleannumberstringarraytupleenumanynull 和 和 undefinedvoidneverobject 三、总结 一、typescript是什么 typescript 和 javascript几乎一样&#xff0c;拥有相同的数据类型&#xff0c;另外在javascript基础上…...

PyCharm和VS Code 安装通义灵码,可本地安装包安装,解决插件安装不上问题

PyCharm和VS Code 安装通义灵码&#xff0c;可本地安装包安装&#xff0c;解决插件安装不上问题 PyCharm、VS Code 安装通义灵码介绍主要应用场景支持编程语言安装指南JetBrains IDEs 中安装指南步骤 1&#xff1a;准备工作步骤 2&#xff1a;在 JetBrains IDEs 中安装通义灵码…...

机器人速度雅可比矩阵求解(2自由度平面关节机器人)

关节速度和末端速度空间的映射需要计算雅可比矩阵的逆矩阵,在博途PLC里如何计算一个方阵的逆矩阵,大家可以参考下面这篇文章: 博途PLC矩阵求逆 矩阵求逆 博图SCL_博图矩阵运算-CSDN博客文章浏览阅读839次。本文介绍如何用C语言实现矩阵求逆的过程,详细解析了相关代码,适…...

【AI大模型-文心-思维树解读-开篇】

提问&#xff1a;什么是“”“思维树”“”模型框架 回答&#xff1a;如下 版本&#xff1a;文心大模型3.5 “思维树”&#xff08;Tree of Thoughts, ToT&#xff09;模型框架是一个利用大型语言模型进行问题解决的框架。它借鉴了人类认知研究的成果&#xff0c;特别是关于人…...

2、electron vue3 怎么创建子窗口,并给子窗口路由传参

接上回初始化vue3 electron项目&#xff0c;创建完vue3 electron项目后&#xff0c;现在要实现在渲染进程中点击按钮创建一个新的子窗口 开始 子窗口创建操作只能在主线程内完成&#xff0c;而创建操作是在渲染线程触发&#xff0c;因此就需要进行两者间的通讯。 1、创建子窗…...

8.pod数据持久化

&#x1f482; 个人主页: Java程序鱼 &#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏(一键三连)和订阅专栏 &#x1f464; 微信号&#xff1a;hzy1014211086&#xff0c;想加入技术交流群的小伙伴可以加我好友&#xff0c;群里会分享学习资料、学习方法…...

C语言 | Leetcode C语言题解之第436题寻找右区间

题目&#xff1a; 题解&#xff1a; typedef struct {int start;int index; } Node;int cmp(const void *pa, const void *pb) {return ((Node *)pa)->start - ((Node *)pb)->start; }int* findRightInterval(int** intervals, int intervalsSize, int* intervalsColSiz…...

SpringBoot3中ymal配置文件(持续更新)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 在SpringBoot项目中,使用application.properties进行配置管理时&#xff0c;…...

Linux 基础IO 2

读取与写入 read与fread 在基础IO 1中我们学会了open和fopen的函数这两个函数是用于为进程打开文件也可以理解为为进程和文件建立了一个链接使其可以交互。那我们建立号链接之后肯定还是需要对文件进行操作&#xff0c;现在我们先来了解读取操作。 read&#xff1a; 这是一…...

图像预处理 图像去噪之常见的去噪方法

图像去噪是图像预处理中的一项关键技术&#xff0c;其目的是从含有噪声的图像中恢复出无噪声的图像&#xff0c;以提高图像质量和后续图像分析的准确性。图像去噪方法众多&#xff0c;本文将介绍几种常见的去噪方法&#xff0c;并提供相应的代码示例。 1. 均值滤波&#xff08…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...