在 Spring 中操作 Redis

🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;)

📜redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿

目录

 1、引入依赖

2、对 Redis 的配置文件进行书写 

 3、Spring中使用 StringRedisTemplate 这个类操作数据库

4、对set 和 get 相关命令举例

5、Spring 中没有封装的命令

6、对 List 相关命令举例

7、对 Set 相关命令举例

8、对 Hash 相关命令操作

9、对 ZSet 进行操作

10、注:学习此篇博客方法


1、引入依赖

创建 Spring 项目时,一定要引入这个依赖

这是操作 redis 的依赖

2、对 Redis 的配置文件进行书写 

这里以演示本地连接为例,若想本地操作远程服务器的redis,则要进行更为麻烦的配置,此处就不再展示了,毕竟本文主题是教大家spring如何操作redis 

注:若redis配置的有密码,或者想要使用某个固定的数据源,也可以增加下面两个配置

当然,还可以增加其他的连接配置,大家可以自行搜索,这里讲的这几个绝对够大家基础使用了!!! 

 3、Spring中使用 StringRedisTemplate 这个类操作数据库

需要注意的是,操作redis的方法很多,除了 StringRedisTemplate 外,还有 Jedis 等等都可以操作redis,此处主要讲解以 StringRedisTemplate 的方式操作redis,读者若想了解其他操作redis的方式,也可以查询相关资料自行学习

首先,使用 @Autowired 注解将这个类注入该类 

  • 使用Jedis,是通过 Jedis 对象里的各种方法来操作 redis 的
  • 此处 Spring 中是通过 StringRedisTemplate 来操作redis的
  • 最原始提供的类是 RedisTemplate
  •  StringRedisTemplate 是 RedisTemplate 的子类,专门用来处理 文本数据的
  • 这个类提供的方法,相比于之前的 Jedis 中的各种方法,还是存在较大的差异的!!!

可以看到,此处就与 Jedis 不同了,又多了一层,主要是选择对应数据类型的类,然后再选操作方法

此处以 对value操作的相关方法举例:

可以看到,有get、set等多种不同方法的操作方法以满足我们的需求

4、对set 和 get 相关命令举例

    @GetMapping("/testString")@ResponseBodypublic String testString() {// 先清除之前的数据redisTemplate.execute((RedisConnection connection) -> {// execute 要求回调方法中必须写 return 语句,返回个东西// 这个回调返回的对象,就会作为 execute 本身的返回值connection.flushAll();return null;});redisTemplate.opsForValue().set("key", "111");redisTemplate.opsForValue().set("key2", "222");redisTemplate.opsForValue().set("key3", "333");String value = redisTemplate.opsForValue().get("key");System.out.println("value: " + value);return "OK";}

5、Spring 中没有封装的命令

有些命令 Spring 没有封装,这时咱就要用 Redis 原生的命令进行操作了,通过 excute 方法就可以使用 Redis 原生的命令了

这里的 RedisConnection 就代表了 Redis 连接,对标 Jedis 对象

以 flushall 举例:

6、对 List 相关命令举例

    @GetMapping("/testList")@ResponseBodypublic String testList() {// 先清除之前的数据redisTemplate.execute((RedisConnection connection) -> {// execute 要求回调方法中必须写 return 语句,返回个东西// 这个回调返回的对象,就会作为 execute 本身的返回值connection.flushAll();return null;});redisTemplate.opsForList().leftPush("key", "111");redisTemplate.opsForList().leftPush("key", "222");redisTemplate.opsForList().leftPush("key", "333");String value = redisTemplate.opsForList().rightPop("key");System.out.println("value:" + value);value = redisTemplate.opsForList().rightPop("key");System.out.println("value:" + value);value = redisTemplate.opsForList().rightPop("key");System.out.println("value:" + value);return "OKList";}

7、对 Set 相关命令举例

    @GetMapping("/testSet")@ResponseBodypublic String testSet() {// 先清除之前的数据redisTemplate.execute((RedisConnection connection) -> {// execute 要求回调方法中必须写 return 语句,返回个东西// 这个回调返回的对象,就会作为 execute 本身的返回值connection.flushAll();return null;});redisTemplate.opsForSet().add("key", "111", "222", "333");Set<String> result = redisTemplate.opsForSet().members("key");System.out.println("result:" + result);Boolean exists = redisTemplate.opsForSet().isMember("key", "111");System.out.println("exists:" + exists);Long count = redisTemplate.opsForSet().size("key");System.out.println("count:" + count);redisTemplate.opsForSet().remove("key", "111", "222");result = redisTemplate.opsForSet().members("key");System.out.println("result:" + result);return "OKSet";}

8、对 Hash 相关命令操作

    @GetMapping("/testHash")@ResponseBodypublic String testHash() {// 先清除之前的数据redisTemplate.execute((RedisConnection connection) -> {// execute 要求回调方法中必须写 return 语句,返回个东西// 这个回调返回的对象,就会作为 execute 本身的返回值connection.flushAll();return null;});redisTemplate.opsForHash().put("key", "f1", "111");redisTemplate.opsForHash().put("key", "f2", "222");redisTemplate.opsForHash().put("key", "f3", "333");String value = (String) redisTemplate.opsForHash().get("key", "f1");System.out.println("value:" + value);Boolean exists = redisTemplate.opsForHash().hasKey("key", "f1");System.out.println("exist:" + exists);redisTemplate.opsForHash().delete("key", "f1", "f2");Long size = redisTemplate.opsForHash().size("key");System.out.println("size:" + size);return "OKHash";}

9、对 ZSet 进行操作

    @GetMapping("/testZSet")@ResponseBodypublic String 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:" + members);Set<ZSetOperations.TypedTuple<String>> membersWithScore = redisTemplate.opsForZSet().rangeWithScores("key", 0 ,-1);System.out.println("membersWithScore:" + membersWithScore);Double score = redisTemplate.opsForZSet().score("key", "zhangsan");System.out.println("score:" + score);redisTemplate.opsForZSet().remove("key", "zhangsan");Long size = redisTemplate.opsForZSet().size("key");System.out.println("size:" + size);Long rank = redisTemplate.opsForZSet().rank("key", "lisi");System.out.println("rank:" + rank);return "OKZSet";}

10、注:学习此篇博客方法

此篇博客上的代码为对某种数据类型整体操作的方法,是一连串的,并没有再拆开来细讲每一行代码的作用

大家可以使用gpt将每段我的代码发过去,让gpt生成更加详细的注释,这样学习事半功倍!!!

🧸前路漫漫,愿星光与您相伴!

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

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

相关文章

kivy PageLayout 的说明及例子

PageLayout 是 Kivy GUI 框架中的一个布局管理器&#xff0c;它允许开发者在同一个窗口中放置多个页面&#xff0c;用户可以通过滑动来浏览这些页面。PageLayout 的工作方式类似于一个可以滑动的标签页&#xff08;TabbedPanel&#xff09;&#xff0c;但其页面可以自由调整大小…

【Python_PySide2学习笔记(二十二)】进度对话框QProgressDialog类的基本用法

进度对话框QProgressDialog类的基本用法 进度对话框QProgressDialog类的基本用法前言一、QProgressDialog 的常用方法1、创建进度对话框2、进度对话框设置窗口标题3、进度对话框隐藏"最大化"、"最小化"、"关闭"4、进度对话框设置是否自动关闭5、…

Atlas Hook 导入 Hive 元数据

Atlas 部署之后就可以导入 Hive 元数据&#xff0c;这部分工作由 Atlas 组件 Hook 来完成。初次导入 Hive 元数据需要通过执行 shell 脚本来完成&#xff0c;然后&#xff0c;Atlas 就可以自动同步增量元数据信息了。下面我介绍一下如何完成这些工作。 初次导入 Hive 元数据 …

LLM、AGI、多模态AI 篇一:开源大语言模型简记

文章目录 系列开源大模型LlamaChinese-LLaMA-AlpacaLlama2-ChineseLinlyYaYiChatGLMtransformersGPT-3(未完全开源)BERTT5QwenBELLEMossBaichuan

使用Py2neo进行Neo4j图数据库的增删改查操作

使用Py2neo进行Neo4j图数据库的增删改查操作 Neo4j 是一个高效的图形数据库管理系统&#xff0c;它将数据结构存储为图形而非表格。Py2neo 是一个客户端库&#xff0c;用于使用 Python 语言与 Neo4j 交互。它提供了一系列简单易用的 API&#xff0c;使得在 Python 中进行图形数…

Linux常用命令大全总结及讲解(超详细版)

前言&#xff1a; Linux 是一个基于Linux 内核的开源类Unix 操作系统&#xff0c;Linus Torvalds于 1991 年 9 月 17 日首次发布的操作系统内核。Linux 通常打包为Linux 发行版。 Linux 最初是为基于Intel x86架构的个人计算机开发的&#xff0c;但此后被移植到的平台比任何其…

K8S 中对 Windows 节点的利用

目录 漏洞概述 漏洞详情 ​编辑 漏洞验证 补丁分析 在集群中探索 参考资料 在许多组织中&#xff0c;所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式&#xff0c;从而简化了 DevOps 实践&#xff0c;令 Windows 应用程序…

【xdma】 pcie.bar设置

FPGA优质开源项目– PCIE通信 xdma 两者保持一致 FPGA开源项目 – PCIE I/O控制卡 xdma PCIe的XDMA应用 读写部分分为两种&#xff0c;一种是数据的读写&#xff0c;另一种是配置数据的读写&#xff0c;在数据读写部分&#xff0c;DMA通过MIG控制DDR完成数据读写。配置数据…

2023年终总结及计划

2023年在今晚就要过去&#xff0c;唯一的感受就一个字&#xff1a;快&#xff01;还没什么感觉就过去了。今年总体感觉自己在忙忙碌碌&#xff0c;为了某个节点冲刺熬夜加班&#xff0c;但是最终收获甚微。夜深人静&#xff0c;又该到了静下来想想的时候了。 一、收获 1、生活…

使用 Tkinter 制作一个进制转换工具,好用!

在平时工作学习当中&#xff0c;我们经常会编写一些简单的 Python GUI 工具&#xff0c;以此来完成各种各样的自动化任务&#xff0c;比如批量处理文件&#xff0c;批量处理图片等等。当我们进行这些工具的编写之时&#xff0c;往往只关注了功能的实现&#xff0c;而忽略了页面…

加速写代码的板子

加速写代码的板子 计算中位数整合字符串 计算中位数 先说结论&#xff0c;无论数组总个数n为奇数还是偶数&#xff0c;都可以用下式表示 n u m s [ n / 2 ] 和 n u m s [ ( n − 1 ) / 2 ] nums[n/2] 和nums[(n-1)/2] nums[n/2]和nums[(n−1)/2] 当n 4时为nums[2]与nums[1] …

基于Docker的软件环境部署脚本,持续更新~

使用时CtrlF搜索你想要的环境&#xff0c;如果没有你想要的环境&#xff0c;可以评论留言&#xff0c;会尽力补充。 本文提供的部署脚本默认参数仅适合开发测试&#xff0c;请根据实际情况调节参数。 数据库 MySQL version: 3.9 services:mysql:image: mysql:8.0.35container…

Android 软键盘的显示和隐藏

文章目录 Android 软键盘的显示和隐藏核心方法软键盘工具类点击空白区域隐藏软键盘方式一方式二 Android 软键盘的显示和隐藏 核心方法 显示软键盘&#xff1a; InputMethodManager#showSoftInput(View view, int flags)隐藏软键盘&#xff1a; InputMethodManager#hideSof…

【Unity美术】Unity工程师对3D模型需要达到的了解【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

python使用句柄控制windows窗口

方法一&#xff1a;通过类名和标题搜索窗体并返回句柄&#xff0c;以整个windows窗口开始查找 hwnd win32gui.FindWindow(lpClassNameNone, lpWindowNameNone) hwnd win32gui.FindWindow(None,命令提示符) 方法二&#xff1a;从给定的子窗口之后开始&#xff0c;比如给定…

一元函数微分学——刷题(8

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 先看A&#xff0c;既然存在&#xff0c;那么f(x)和x属于同阶无穷小&#xff0c;所以f(0)0&#xff0c;没问题 再看C&#xff0c;结…

UntiyShader(七)Debug

目录 前言 一、利用假彩色图像 二、利用Visual Studio 三、帧调试器 前言 Debug&#xff08;调试&#xff09;&#xff0c;是程序员检查问题的一种方法&#xff0c;对于一个Shader调试更是一种噩梦&#xff0c;这也是Shader难写的原因之一——如果效果不对&#xff0c;我们…

Linux用户登出或者终端关闭后继续运行的方法

nohup 是一个 POSIX 命令&#xff0c;它的名称来源于“no hang up”的缩写。这个命令的基本用途是运行一个命令&#xff0c;使得该命令在用户登出或者终端关闭后继续运行。nohup 命令通常与后台运行的命令&#xff08;使用 & 符号&#xff09;结合使用&#xff0c;以便在终…

ubuntu22.04安装anacoda遇到的坑

这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置&#xff0c;本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包&#xff0c;但是没有图形界面&#xff0c;需要以命令行的方式安装和运行配置 1.1 安装&#xff1a;官网下载后&#xff0c;…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…