SpringBoot 操作 Redis

news2024/12/25 18:23:31

导入对应版本的依赖

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

修改配置文件中的信息

spring:
  redis:
    host: 127.0.0.1
    port: 8888

注意: 我这里 xshell 中将 redis 的端口映射到了本机的 8888 端口, 你们映射了啥, 这里的 port 就写啥
在这里插入图片描述


写代码

SpringBoot 是通过 redisTemplate 对象 对 Redis 进行操作
redisTemplate 对 Redis 中的每个类型进行了封装, 使用对应类型的对应方法要先选择操作类型
在这里插入图片描述


String 类型

@Autowired
privateStringRedisTemplate redisTemplate;

@RequestMapping("/testString")
public void testString() {
    redisTemplate.opsForValue(). set("key1", "value1");
    redisTemplate.opsForValue(). set("key2", "value2");
    redisTemplate.opsForValue(). set("key3", "value3");

    System.out.println(redisTemplate.opsForValue().get("key1"));
    System.out.println(redisTemplate.opsForValue().get("key2"));
    System.out.println(redisTemplate.opsForValue().get("key3"));
}

List 类型

@Autowired
private StringRedisTemplate redisTemplate;

@RequestMapping("/testList")
public void testList() {
    //删库操作
    redisTemplate.execute((RedisConnection connection) -> {
        // execute 要求我们的回调方法中, 必须返回一个内容
        // 该回调返回的对象, 就是 execute 返回的内容
        connection.flushAll();
        return null;
    });

    redisTemplate.opsForList().leftPush("key", "val");
    redisTemplate.opsForList().leftPush("key", "val2");
    redisTemplate.opsForList().leftPush("key", "val3");

    System.out.println(redisTemplate.opsForList().rightPop("key"));
    System.out.println(redisTemplate.opsForList().rightPop("key"));
    System.out.println(redisTemplate.opsForList().rightPop("key"));
}

Set 类型

@Autowired
private StringRedisTemplate redisTemplate;

@RequestMapping("testSet")
public void testSet() {
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });

    redisTemplate.opsForSet().add("key", "111", "222","333");
    System.out.println(redisTemplate.opsForSet().members("key"));
    System.out.println(redisTemplate.opsForSet().isMember("key", "111"));
    System.out.println(redisTemplate.opsForSet().isMember("key", "444"));
    System.out.println(redisTemplate.opsForSet().size("key"));
    redisTemplate.opsForSet().remove("key", "111","222");
    System.out.println(redisTemplate.opsForSet().members("key"));
}

Hash 类型

@Autowired
private StringRedisTemplate redisTemplate;

@RequestMapping("/testHash")
public void testHash() {
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });

    redisTemplate.opsForHash().put("key", "f1", "111");
    redisTemplate.opsForHash().put("key", "f2", "222");
    redisTemplate.opsForHash().put("key", "f3", "333");

    System.out.println((String) redisTemplate.opsForHash().get("key", "f1"));
    System.out.println((String) redisTemplate.opsForHash().get("key", "f2"));
    System.out.println((String) redisTemplate.opsForHash().get("key", "f3"));

    System.out.println(redisTemplate.opsForHash().hasKey("key", "f1"));

    redisTemplate.opsForHash().delete("key", "f1");
    redisTemplate.opsForHash().delete("key", "f2");

    System.out.println(redisTemplate.opsForHash().size("key"));
}

ZSet 类型

@Autowired
private StringRedisTemplate redisTemplate;

@RequestMapping("/testZSet")
public void testZSet() {
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });

    redisTemplate.opsForZSet().add("key", "zhangsan", 10);
    redisTemplate.opsForZSet().add("key", "lisi", 20);
    redisTemplate.opsForZSet().add("key", "wangwu", 30);

    Set<String> members = redisTemplate.opsForZSet().range("key", 0, -1);
    System.out.println(members);

    Set<ZSetOperations.TypedTuple<String>> membersWithScore =
            redisTemplate.opsForZSet().rangeWithScores("key", 0, -1);
    System.out.println(membersWithScore);

    System.out.println(redisTemplate.opsForZSet().score("key", "zhangsan"));

    redisTemplate.opsForZSet().remove("key", "zhangsan");

    System.out.println(redisTemplate.opsForZSet().size("key"));

    System.out.println(redisTemplate.opsForZSet().rank("key", "lisi"));
}

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

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

相关文章

SVD奇异值分解原理及应用

-------------------------------------------------------------------------------------------------------------------------------- 首先说明&#xff1a;本文的内容来自百家号“人工智能遇见磐创”大佬的整理&#xff0c;感谢原作者&#xff08;本文在原作者的基础上按…

影响钕铁硼磁钢性能的因素及方法

钕铁硼永磁材料自问世以来&#xff0c;就以其优越的磁性能而备受关注&#xff0c;被称为“磁王“&#xff0c;在市场需求的不断地增长下&#xff0c;钕铁硼生产工艺及磁体性能也不断发展和提升。我们一般用剩磁、矫顽力和最大磁能积这几个指标来衡量磁性材料的磁性能。 剩磁 B…

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xf…

2024年3月电风扇家电线上电商(京东天猫淘宝)销售数据排行榜

鲸参谋监测的线上电商&#xff08;京东天猫淘宝&#xff09;平台3月份的电风扇家电销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年3月份&#xff0c;电风扇市场呈现出稳步增长态势。在线上电商平台上电风扇总销量累计约226万件&#xff0c;环比上个月上涨了2…

前程贷v6.5系统测试报告

1.引言部分 1&#xff0e;1 项目背景 本测试报告的具体编写目的&#xff0c;指出预期的读者范围。(3-4句) 项目描述 &#xff08;项目内容&#xff0c;用户需求&#xff09; 本测试报告为**&#xff08;系统名称&#xff09;**系统测试报告&#xff1b;本报告目的在于总结测试…

可平滑替代FTP的传输方案,需要具备哪些特质?

随着技术的发展和网络安全需求的提升&#xff0c;传统的FTP受安全性和效率方面的局限性&#xff0c;已经逐渐不能满足现代企业的需求。因此&#xff0c;许多企业和组织开始寻找替代FTP的方案&#xff0c;以提高文件传输的安全性、效率和便捷性。FTP传输存在的弊端及不足主要包括…

洛谷 A+B 问题 python

题目描述 输入两个整数 a,b&#xff0c;输出它们的和 输入格式 两个以空格分开的整数&#xff08;不是输入两个input&#xff08;&#xff09;解决&#xff09;。 输出格式 一个整数。 输入输出样例 输入 20 30 输出 50 这个问题的难点就是在于python当中进行两个输入数字…

JavaScript-3.DOM

通过HTML DOM,可以访问JavaScript HTML文档中的所有元素 DOM(Document Object Model) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。将网页内的元素封装成一个对象,并建立元素的层级关系,形似一棵树,称为DOM树。 通过可编程的对象模型,…

【简单介绍下Faiss原理和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 &#xff08;1&#xff09;数据流风格​​​​​​​ &#xff08;2&#xff09;调用/返回风格 &#xff08;3&#xff09;独立构件风格 &#xff08;4&#xff09;虚拟机风格 &#xff08;5&#xff09;仓库风格 三、架构…

知识图谱的起源与发展

文章目录 知识图谱的发展历史知识图谱的重要性知识图谱与Ontology、语义网络之间的区别知识图谱的定义 知识图谱的发展历史 知识图谱始于20世纪50年代&#xff0c;至今大致分为三个发展阶段&#xff1a;第一阶段 &#xff08;1955年—1977年&#xff09;是知识图谱的起源阶段&a…

C++学习————第八天(C/C++内存管理)

目录 1、1.C/C内存分布 2、 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3、C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4.operator new与operator delete函数 5. new和delete的实现原理 5.1 内置类型 5.2 自定…

C++ 初识模板

目录 0.前言 1.泛型编程 2.函数模板 2.1概念 2.2格式 2.3原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式实例化 2.5模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 4.结语 &#xff08;图像由AI生成&#xff09; 0.前言 在 C 中&a…

密码学 | 承诺:常见的承诺方案

&#x1f951;原文&#xff1a;密码学原语如何应用&#xff1f;解析密码学承诺的妙用 - 知乎 1 简介 密码学承诺 涉及 承诺方、验证方 两个参与方&#xff0c;以及以下两个阶段&#xff1a; 承诺阶段&#xff1a;承诺方选择一个敏感数据 v v v&#xff0c;为它计算出相应…

docker打包部署自己的应用

docker部署应用 当谈及使用 Docker 进行容器化部署应用时&#xff0c;可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码&#xff0c;还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来&#xf…

Python 全栈安全(二)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二部分&#xff1a;认证与授权 本书的第二部分是最具商业价值的部分。我这样说是因为它充满了大多数系统需要具备的实用工作流示例&#xf…

nginxtomcat笔记

nginx是一个轻量级高性能的http和反向代理web服务器&#xff0c;优点&#xff1a;占用内存少&#xff0c;并发能力强 实验主机&#xff1a;192.168.200.141 192.168.200.142 1.虚拟主机 1.1基于域名&#xff1a;一台服务器&#xff0c;一个端口&#xff0c;部署多个网站 在ng…

Transformer - Teacher Forcing

Transformer - Teacher Forcing flyfish 在训练过程中&#xff0c;将目标序列输入给解码器的方法称为&#xff08;Teacher Forcing&#xff09;。这个术语又代表什么意思呢&#xff1f; 这里的目标序列就是Ground Truth&#xff0c;也就是我们已知的正确答案 一句话就是我们…

火灾风险把控:数据采集卡搭配传感器实现电路异常全面监控!

引言 在现代社会中&#xff0c;火灾安全和用电安全是人们生活和工作中不可忽视的重要问题。为了有效应对火灾风险和电路异常情况&#xff0c;阿尔泰科技引入了一项创新解决方案&#xff1a;利用PXIe5681多功能数据采集卡对小信号的高精度测量优势&#xff0c;搭配电压传感器监…

使用代理绕过网站的反爬机制

最近在尝试收集一些网络指标的数据&#xff0c; 所以&#xff0c; 我又开始做爬虫了。 :) 我们在做爬虫的过程中经常会遇到这样的情况&#xff0c;最初爬虫正常运行&#xff0c;正常抓取数据&#xff0c;一切看起来都是那么的美好&#xff0c;然而一杯茶的功夫可能就会出现错误…