教你如何在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");}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

(done) 声音信号处理基础知识(7) (Understanding Time Domain Audio Features)

参考&#xff1a;https://www.youtube.com/watch?vSRrQ_v-OOSg&t1s 时域特征包括&#xff1a; 1.幅度包络 2.均方根能量 3.过零率 振幅包络的定义&#xff1a;一个 frame 里&#xff0c;所有采样点中最大的振幅值 一个形象的关于振幅包络的可视化解释如下&#xff1a;…

MateBook 16s 2023在Deepin下开启性能模式,调节风扇转速到最大,全网首发!

方法 在Deepin下按住Fnp快捷键&#xff0c;开启性能模式。 验证 首先去debian下载acpi-call-dkms https://packages.debian.org/sid/all/acpi-call-dkms/download 然后使用root用户执行&#xff1a; apt install --simulate ./acpi-call-dkms_1.2.2-2.1_all.deb apt inst…

C++入门——(类的默认成员函数)析构函数

文章目录 一、析构函数二、析构函数的特点总结 一、析构函数 析构函数与构造函数功能相反&#xff0c;析构函数不是完成对对象本⾝的销毁&#xff0c;⽐如局部对象是存在栈帧的&#xff0c;函数结束栈帧销毁&#xff0c;他就释放了&#xff0c;不需要我们管&#xff0c;C规定对…

【ChatGPT】提示词助力广告文案、PPT制作与书籍推荐的高效新模式

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效广告推销文案提示词使用方法 &#x1f4af;AI自动生成PPT全流程提示词使用方法 &#x1f4af;精选书籍推荐爆款文案提示词使用方法 &#x1f4af;小结 &#x1f4af;…

第一个NDK项目

新建项目 选择Native C的项目&#xff0c;我这里给项目的命名是NDKTest。 目录分析 新增了一个cpp目录&#xff0c;里面有一个CMakeLists和.cpp文件。 CMakeLists 文件是用来配置C编译过程的。 # Sets the minimum CMake version required for this project. cmake_minimum_…

【解密 Kotlin 扩展函数】命名参数和默认值(十三)

导读大纲 1.0.1 命名参数1.0.2 默认参数值 上一节讲述如何自定义 joinToString 函数来代替集合的默认字符串表示 文末遗留下几个待优化问题–传送门 1.0.1 命名参数 我们要解决的第一个问题涉及函数调用的可读性 例如,请看下面的joinToString调用: joinToString(collection,&…

循环中用sleep

echo <pre>;for ($i0;$i<10000000;$i){var_dump($i);} 没有用sleep,快速消耗cpu和内存 使用sleep后效果 echo <pre>;for ($i0;$i<10000000;$i){var_dump($i);usleep(1000);//php 暂停0.001秒} 总结&#xff1a;sleep能释放资源(cpu和内存)&#xff0c;但是运…

2025校招内推-招联金融

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

LeetCode 面试经典150题 191.位1的个数

Java中的算术右移和逻辑右移的区别 题目&#xff1a;编写一个函数&#xff0c;获取一个正整数的二进制形式并返回其二进制表达式中设置位的个数&#xff08;也被称为汉明重量&#xff09;。 设置位的个数即二进制中1的个数。 思路&#xff1a;方法一&#xff1a;因为正数的原…

【永磁同步电机(PMSM)】 4. 同步旋转坐标系仿真模型

【永磁同步电机&#xff08;PMSM&#xff09;】 4. 同步旋转坐标系仿真模型 1. Clarke 变换的模型与仿真1.1 Clarke 变换1.2 Clarke 变换的仿真模型 2. Park 变换的模型与仿真2.1 Park 变换2.2 Park 变换的仿真模型 3. Simscape标准库变换模块3.1 abc to Alpha-Beta-Zero 模块3…

java反射基础知识

1.java的反射机制 Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射…

学生管理系统1.0版本

学生管理系统1.0版本有5个功能&#xff0c;即添加学生、删除学生、修改学生、查看全部学生、退出系统。 里面对添加重复学号、删除和修改不存在的学号等问题都有相应的解决办法。 代码区&#xff1a; Student.java package student;//快捷键Altinsert public class Student …

Machine Learning Specialization 学习笔记(4)

文章目录 前言一、模型评估训练集常规训练集线性回归逻辑回归 交叉验证集 偏差与方差正则化 学习曲线数据集的添加&#xff08;数据增强&#xff09;迁移学习精确率与召回率 二、决策树基本概念决策树的工作原理决策树的优点决策树的缺点决策树算法的变体决策树在Python中的实现…

Shell 脚本学习

Shell学习 Shell 脚本 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服…

xxl-job使用总结

xxl-job从入门到入土 xxl-job介绍 xxl-job是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。xxl-job支持调度中心集群和执行器集群。 xxl-job开源项目 xxl-job使用 xxl-job整合SpringBoot 引入xxl-job的依赖 <dependency>…

ArcGIS核密度分析(栅格处理范围与掩膜分析)

多时候我们在进行栅格分析的时候&#xff0c;处理的结果不能完全覆盖我们需要的范围。 比如&#xff0c;我们对点数据进行密度分析、栅格插值等。比如下图 为什么会如此呢&#xff1f; 那是因为在做这个密度分析或者栅格插值的时候&#xff0c;默认是以点的四至范围来生成的&am…

LeetCode 热题 100 回顾9

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

算法之逻辑斯蒂回归(Logistic regression)

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是统计学中一种广泛应用于二分类问题的算法。它的主要目标是预测二分类问题中的事件发生的概率。尽管名字里有“回归”&#xff0c;但逻…

2024已然过半,AI技术卷到哪儿了?

可以说&#xff0c;科技的发展真的是日新月异&#xff0c;2024年年初&#xff0c;大模型Sora的出现&#xff0c;改变了短视频行业的演变方向&#xff0c;使得AI技术不再只是停留在文生文&#xff0c;文生图阶段&#xff0c;而是发展到了文生视频领域。2024年5月&#xff0c;回忆…

Java笔试面试题AI答之设计模式(5)

文章目录 21. 简述Java什么是适配器模式 ?适配器模式的主要组成部分包括&#xff1a;适配器模式的实现方式主要有两种&#xff1a;适配器模式的优点&#xff1a;适配器模式的缺点&#xff1a;示例说明&#xff1a; 22. 请用Java代码实现适配器模式的案例 &#xff1f; 21. 简述…