通过 Spring 操作 Redis

要想通过 Java 操作 redis,首先要连接上 redis 服务器,推荐看通过 Java 操作 redis -- 连接 redis

创建项⽬

        勾选 NoSQL 中的 Spring Data Redis 

        当然, 把 Web 中的 Spring Web 也勾选⼀下.⽅便写接进⾏后续测试.

配置 redis 服务地址

        在 application.properties 配置文件中配置参数:

#redis 服务器的地址
spring.redis.host=127.0.0.1
#redis 服务器的端口号
spring.redis.port=8888

        至于为什么是这里配置的 redis 端口是本地的 8888 端口,相信看了本文章头部推荐的博客以后就很清楚了,我们用 shh 的端口转发,将服务器上 redis 的 6379 端口映射到了本地的 8888 端口

 测试代码

package com.example.redisspringdemo.Controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Set;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2024-05-21* Time: 18:03*/
@RestController
@RequestMapping("/RedisDemoController")
public class RedisDemoController {//从 spring 的 IOC 容器中获取 stringRedisTemplate 对象@Autowired//在 Spring 中通过 StringRedisTemplate 类的对象来操作 Redis//  在 Spring 中操作 Redis 最原始的类是 RedisTemplate,StringRedisTemplate 是它的子类//专门用于处理文本数据,还有一个类专门用于处理二进制数据private StringRedisTemplate stringRedisTemplate;/*** 操作 Redis 中 String 类型的键值对* */@RequestMapping("/stringDemo")public String stringDemo(){//  清空 Redis 中已有的键值对避免对最终结果造成影响//  但 Spring 中并没有封装 flushAll 等操作,那怎么办呢?//RedisTemplate 留了一个后手,能够让我们执行 Jedis 原生命令//  这里的 RedisConnection 就代表了 Redis 连接,对标 Jedis 对象//通过 RedisConnection 对象就可以执行 Jedis 对象中的方法stringRedisTemplate.execute((RedisConnection redisConnection)->{//清空 redis 中的数据redisConnection.flushAll();return null;});//stringRedisTemplate.opsForValue() 得到一个专门操作 String 类型的对象//调用 set 方法设置键值对stringRedisTemplate.opsForValue().set("key1","111");stringRedisTemplate.opsForValue().set("key2","222");stringRedisTemplate.opsForValue().set("key3","333");//通过 get 方法通过 key 获取 valueString key1=stringRedisTemplate.opsForValue().get("key1");String key2=stringRedisTemplate.opsForValue().get("key2");System.out.println("key1:"+key1);System.out.println("key2:"+key2);return "ok";}/*** 操作 Redis 中 List 类型的键值对* */@RequestMapping("/listDemo")public String listDemo(){stringRedisTemplate.execute((RedisConnection redisConnection)->{//清空 redis 中的数据redisConnection.flushAll();return null;});// stringRedisTemplate.opsForList() 得到一个专门操作 List 类型的对象// leftPush() 向列表的左边插入数据stringRedisTemplate.opsForList().leftPush("key","1");//leftPushAll()向列表的左边插入多条数据stringRedisTemplate.opsForList().leftPushAll("key","2","3","4");//range() 获取指定范围内的数据List<String> key=stringRedisTemplate.opsForList().range("key",0,-1);System.out.println(key);return "ok";}/*** 操作 Redis 中 set 类型的键值对* */@RequestMapping("/setDemo")public String setDemo(){stringRedisTemplate.execute((RedisConnection redisConnection)->{redisConnection.flushAll();return null;});// stringRedisTemplate.opsForSet() 得到一个专门操作 Set 类型的对象//向集合中添加数据stringRedisTemplate.opsForSet().add("key","zhangsan","lisi","wangwu");//获取集合中的所有数据Set<String> key=stringRedisTemplate.opsForSet().members("key");System.out.println(key);//判断集合中 zhangsan 是否存在Boolean result1=stringRedisTemplate.opsForSet().isMember("key","zhangsan");System.out.println(result1);//获取集合中的元素个数Long count=stringRedisTemplate.opsForSet().size("key");System.out.println(count);stringRedisTemplate.opsForSet().remove("key","zhangsan","lisi");key=stringRedisTemplate.opsForSet().members("key");System.out.println(key);return "ok";}@RequestMapping("/hashDemo")public String hashDemo(){stringRedisTemplate.execute((RedisConnection redisConnection)->{redisConnection.flushAll();return null;});// stringRedisTemplate.opsForHash() 得到一个专门操作 Hash 类型的对象//向哈希表中添加数据stringRedisTemplate.opsForHash().put("key","f1","111");stringRedisTemplate.opsForHash().put("key","f2","222");stringRedisTemplate.opsForHash().put("key","f3","333");//获取 hash 表中的数据String f1=(String) stringRedisTemplate.opsForHash().get("key","f1");System.out.println(f1);//判断哈希表中的某个键值对是否存在Boolean exists=stringRedisTemplate.opsForHash().hasKey("key","f1");System.out.println(exists);//删除哈希表中的键值对stringRedisTemplate.opsForHash().delete("key","f1","f2");//获取哈希表中的元素个数Long count=stringRedisTemplate.opsForHash().size("key");System.out.println(count);return "ok";}@RequestMapping("/zsetDemo")public String zsetDemo(){//清空 redis 中的数据stringRedisTemplate.execute((RedisConnection redisConnection)->{redisConnection.flushAll();return null;});// stringRedisTemplate.opsForZSet() 得到一个专门操作 ZSet 类型的对象//添加数据到有序集合中stringRedisTemplate.opsForZSet().add("key","zhangsan",10);stringRedisTemplate.opsForZSet().add("key","lisi",20);stringRedisTemplate.opsForZSet().add("key","wangwu",30);//获取有序集合中指定范围的元素Set<String> members=stringRedisTemplate.opsForZSet().range("key",0,-1);System.out.println(members);//获取有序集合指定范围内的元素和分数Set<ZSetOperations.TypedTuple<String>> membersAndScore=stringRedisTemplate.opsForZSet().rangeWithScores("key",0,-1);System.out.println(membersAndScore);//获取有序集合中指定元素的分数Double score=stringRedisTemplate.opsForZSet().score("key","zhangsan");System.out.println(score);//删除有序集合中指定的元素stringRedisTemplate.opsForZSet().remove("key","zhangsan","lisi");//获取有序集合中的元素个数Long count=stringRedisTemplate.opsForZSet().size("key");System.out.println(count);//获取有序集合中指定元素的排名Long rank=stringRedisTemplate.opsForZSet().rank("key","wangwu");System.out.println(rank);return "ok";}}

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

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

相关文章

基于springboot + vue实现工厂车间管理系统项目演示【附项目源码+论文说明】

基于springboot vue实现工厂车间管理系统演示 摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

PasteSpider更新摘要(持续更新... .. .)

写在前面 PasteSpider整个项目分为三大块PasteSpider(主端我称为API(.net 6.0)),PasteSpiderWeb(后台管理端(js,html,css)),PasteSpiderFile(文件同步端(.net6.0)&#xff0c;一键部署&#xff0c;差量同步等就是用他&#xff0c;不然每次升级要打开网站后台很麻烦的&#xff…

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…

大创项目推荐 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

某东-绑卡

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

【文末附gpt升级方案】AIGC(人工智能):技术革命与人类未来的深度解析

AIGC&#xff08;人工智能&#xff09;&#xff1a;技术革命与人类未来的深度解析 摘要&#xff1a;随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已成为现代社会的重要支柱。其中&#xff0c;AIGC&#xff08;Artificial Intelligence Generated Conten…

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…

Mujoco仿真【xml文件的学习 2】

承接上一篇的博客&#xff1a;Mujoco仿真【xml文件的学习 1】-CSDN博客 我们继续来学习Mujoco仿真中的xml文件&#xff0c;哦豁&#xff0c;gogogo&#xff01; 给出这次的xml文件案例【bimanual_viperx_transfer_cube.xml】&#xff1a; <mujoco><include file&qu…

EventSource 在项目中常用的两种方式

一、认识EventSource EventSource&#xff08;也称为Server-Sent Events&#xff0c;简称SSE&#xff09;是HTML5中的一种新的API&#xff0c;用于实现服务器端向客户端推送事件。其数据主要基于HTTP协议进行传输&#xff0c;并且数据帧必须编码成UTF-8的格式。 eventSource…

本地电子邮件测试工具-MailHog

通过MailHog&#xff0c;可以在浏览器中查看本机发的邮件内容&#xff0c;而无需发送到外网。 https://github.com/mailhog/MailHog在 macOS 环境下&#xff0c;下载文件后: 添加可执行权限:chmod x MailHog_darwin_amd64 运行:./MailHog_darwin_amd64 浏览器打开查看邮件:htt…

LitCTF

[LitCTF 2023]enbase64 base 64 里面有一个换表的函数 写代码 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() {char *result; char Destination[65]; int v3[65];int j;int i; char Source[]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcde…

【Python设计模式15】适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而无法一起工作的类能够一起工作。通过使用适配器模式&#xff0c;可以使得现有的类能够适应新的接口需…

打造高效安全新标杆:智慧楼宇视频智能管理系统的建设探索

大数据、人工智能、5G等技术在城市中的不同应用也让人们看到了数字化和智能化技术赋予城市管理的巨大潜力&#xff0c;为更多城市数字化应用场景的发展带来机遇。在新基建的大背景下&#xff0c;人工智能、物联网等先进技术与基础设施的深度融合&#xff0c;将大力推进电网、楼…

PostgreSQL自带的命令行工具25- ecpg

PostgreSQL自带的命令行工具25- ecpg ecpg 是 PostgreSQL 提供的一个工具&#xff0c;允许在 C 语言程序中嵌入 SQL 语句&#xff0c;从而能够与 PostgreSQL 数据库进行交互。ecpg 全称是 Embedded SQL in C&#xff0c;采用了标准的 SQL 预编译技术&#xff0c;将 SQL 语句嵌…

ArcGIS批量更改所有符号的格式

这期谈一下&#xff0c;如何修改所有符号的样式。 比如&#xff0c;我们需要更改下图的面符号位无轮廓的 该如何批量修改的呢&#xff1f; 视频教学吧&#xff1a; ArcGIS批量更改所有符号的格式 ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放-CSDN博客文章浏览阅…

el-input 自动获取焦点

前言&#xff1a; 需求描述&#xff1a;在 Dialog 对话框中 使用 input 组件&#xff1b;当点击按钮&#xff0c;Dialog 对话框显示&#xff0c;且里面的 input 组件要自动获取焦点。因为页面上还存在其他的 input 组件&#xff0c;所以使用 自动获取焦点属性没用&#xff01;&…

Docker仓库解析

目录 1、Docker仓库类型2、Docker仓库的作用3、工作原理4、管理与使用最佳实践 Docker仓库是Docker生态系统中的重要组成部分&#xff0c;它是用于存储和分发Docker镜像的集中化服务。无论是公共还是私有&#xff0c;仓库都是开发者之间共享和复用容器镜像的基础。 1、Docker仓…

2024年5月23号PMP每日三题含答案

2024年5月23号PMP每日三题含答案 1.项目可交付成果已移交给客户&#xff0c;项目经理现在必须收集项目参与者的反馈意见。项目经理应该查阅哪份文件来确定哪些人应该被包含进请求反馈意见的名单中&#xff1f; A.干系人登记册 B.沟通管理计划 C.经验教训 D.项目资源管理计划 1…

基于Java的推箱子游戏设计与实现(论文 + 源码)

【免费】关于基于JAVA的推箱子游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89325018 基于Java的推箱子游戏设计与实现 摘 要 社会在进步&#xff0c;人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。…

Centos7离线安装RabbitMQ教程

目录 安装包准备开始安装1. 创建目录2. 上传文件3. 安装erlang语言4. 安装socat5. 安装rabbitmq6. 启动、停止rabbitmq7. 设置开机启动8. 开启web界面管理工具9. 开启防火墙(root)10. 访问页面11. 附录 安装包准备 &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;…