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

Redis访问工具

使用Redis存储缓存数据,如何通过Java去访问Redis?

防止后面看晕,先来张图。

1. Redis的客户端库

Redis的客户端库是Redis官方提供的,用于让Java等编程语言与Redis服务器进行通信的工具包。常见的Redis客户端库有多个,主要包括以下两种:

1.1 Jedis

1.1.1 特点

  • Jedis是最早的Java Redis客户端之一,API简单直观。
  • 它是阻塞式的客户端,也就是说每个命令的执行会阻塞当前线程,直到获得响应为止。
  • 支持Redis的所有基本功能,如字符串、列表、集合、哈希等基本数据结构的操作。
  • 提供了连接池功能,用于管理多个Redis连接。

1.1.2 适用场景

  • 小规模项目或对性能要求不高的应用。
  • 单线程操作足够的场景。

1.1.3 缺点

  • 阻塞式设计在高并发场景下性能不如Lettuce。
  • 不支持异步或反应式编程模型

1.2 Lettuce

1.2.1 特点

  • Lettuce是一个基于Netty的高性能、非阻塞的Redis客户端库。
  • 支持同步异步响应式(Reactive)操作。
  • 在多线程环境下更高效,连接可以共享在多个线程之间使用。
  • 内建的可扩展性使得Lettuce非常适合高并发场景。
  • 提供自动重连和连接管理功能。

1.2.2 适用场景

  • 高并发、大规模系统。
  • 对性能、非阻塞操作有要求的场景。
  • 需要支持异步和反应式编程的应用。

1.2.3 优点

  • 性能优越,支持异步和响应式操作。
  • 在多线程环境中效率更高。

2. 集成框架

2.1 Spring data redis

RedisTemplate 是 Spring Data Redis 提供的用于与 Redis 进行交互的模板类,它封装了与 Redis 服务器的连接,并为 Redis 的操作提供了简便的 API。通过 RedisTemplate,开发者可以轻松地在项目中执行各种 Redis 操作,如键值存储、列表操作、哈希操作、集合操作等。

2.1.1 RedisTemplate 的核心功能

RedisTemplate 提供了以下几种主要功能,适用于对 Redis 进行各种数据类型的操作:

  • String 类型操作:可以用于常见的 key-value 存储,如缓存数据等。
  • Hash 类型操作:适合存储复杂对象的数据结构,类似于数据库中的表结构。
  • List 类型操作:适合存储有序的数据集合,常用于队列、消息队列等。
  • Set 类型操作:适合存储无序的不重复的数据集合。
  • ZSet(有序集合)类型操作:适合存储有序的带分数的集合。

2.1.2 如何使用 RedisTemplate

在项目中,RedisTemplate 一般是通过 Spring Data Redis 框架自动配置的,默认情况下会提供一个 StringRedisTemplate,可以直接使用。

2.1.3 RedisTemplate 的主要方法

  • opsForValue():用于操作 Redis 中的 String 类型数据。支持常用的 setget 等操作。
  • opsForHash():用于操作 Redis 中的 Hash 类型数据。支持 putgetdelete 等操作。
  • opsForList():用于操作 Redis 中的 List 类型数据。支持 leftPushrightPop 等操作。
  • opsForSet():用于操作 Redis 中的 Set 类型数据。支持 addmembers 等操作。
  • opsForZSet():用于操作 Redis 中的 ZSet(有序集合)类型数据。支持 addrangeremove 等操作。

2.2 Spring Cache框架

Spring Cache 是 Spring 框架中的缓存抽象机制,它通过统一的 API 来处理缓存操作,并且可以与各种缓存中间件进行集成,包括 EhCache、Caffeine 和 Redis。Spring Cache 提供了一套注解,开发者只需通过这些注解就能轻松地完成缓存的增删改查操作。

在集成 Redis 的情况下,Spring Cache 通过 Redis 客户端(如 Lettuce)与 Redis 服务器进行通信,并通过 RedisCacheManager 来管理缓存的操作。

2.2.1 Spring Cache 相关的核心注解

Spring Cache 通过以下几个核心注解来管理缓存:

  • @Cacheable:将方法的返回值缓存起来,下次调用时如果缓存中存在,则直接返回缓存中的数据。
  • @CachePut:在执行方法的同时,将方法的返回值放入缓存中。
  • @CacheEvict:清理缓存中的数据。
  • @Caching:组合多个缓存操作。

2.2.2 Spring Cache 集成 Redis的工作原理

Spring Cache 与 Redis 的集成主要通过 RedisCacheManagerRedisTemplate 完成。当 Spring Cache 执行缓存操作时,它实际上会通过 RedisCacheManager 来管理缓存,并通过 RedisTemplate 与 Redis 服务器通信,RedisTemplate 调用 Redis 的相关命令,Lettuce 客户端则负责将这些命令传递到 Redis 服务器,并接收响应。

工作原理:

  • 当调用带有 @Cacheable 注解的方法时,Spring Cache 会先检查 Redis 缓存中是否存在该方法对应的缓存数据。如果存在,则直接返回缓存中的数据;如果不存在,则执行方法,并将方法的返回值存储在 Redis 中。
  • @CacheEvict 用于清理缓存中的数据。当调用该注解标记的方法时,Spring Cache 会通过 RedisCacheManager 删除 Redis 中的相应缓存。
  • @CachePut 则是强制将方法的返回值更新到缓存中,即使缓存中已经存在数据。

2.3 Spring data redis 和 Spring Cache的关系

对于使用 Redis 作为缓存的场景,Spring Data Redis 提供了具体的实现,通常你会配置一个 RedisCacheManager 作为 CacheManager 的实现。RedisCacheManager 内部使用 RedisTemplate 来与 Redis 进行交互,但这种细节是被 Spring Cache 抽象层所隐藏的。

在 Spring 项目中,Spring data redis框架中的RedisTemplate 提供了底层的 Redis 操作 API,而 Spring Cache 则通过注解的方式简化了缓存操作。在使用 Spring Cache 时,缓存的存储方式可以是 Redis,这时底层仍然是通过 RedisTemplate 进行 Redis 操作。

3. 总结

        常用的有Jedis和Lettuce两个访问redis的客户端库,其中Lettuce的性能和并发性要好一些,Spring Boot 默认使用的是 Lettuce 作为 Redis 的客户端。

        使用Spring data redis框架,在项目中可以通过RedisTemplate访问Redis,RedisTemplate提供了方便访问redis的模板方法。RedisTemplate 进行 Redis 操作时,实际上是通过 Lettuce 客户端与 Redis 服务器进行通信。

        使用Spring Cache框架,Spring Cache是spring的缓存框架,可以集成各种缓存中间件,比如:EhCache、Caffeine、redis。Spring Cache最终也是通过Lettuce 去访问redis 。使用Spring Cache的方法很简单,只需要在方法上添加注解即可实现将方法返回数据存入缓存,以及清理缓存等注解的使用。

        RedisTemplate适用于灵活操作redis的场景,通过RedisTemplate的API灵活访问Redis。

        这两种访问 redis的方法可以在项目中都使用。

相关文章:

Redis访问工具

使用Redis存储缓存数据,如何通过Java去访问Redis? 防止后面看晕,先来张图。 1. Redis的客户端库 Redis的客户端库是Redis官方提供的,用于让Java等编程语言与Redis服务器进行通信的工具包。常见的Redis客户端库有多个&#xff0c…...

vue3+ant design vue动态实现级联菜单~

1、这里使用的是ant design vue 的TreeSelect 树选择来实现的。 <a-form-item name"staffDept" label"责任部门" labelAlign"left"><a-tree-selectv-model:value"formState.staffDept"show-search//允许在下拉框中添加搜索框…...

软件可维护性因素例题

答案&#xff1a;C 知识点&#xff1a; 系统可维护性因素决定 可理解性 可测试性 可修改性 选项C可移植性错误...

git的一些操作

参考视频: git分支详解&#xff08;约10分钟掌握分支80%操作&#xff09;&#xff0c;git-branch&#xff0c;git分支管理&#xff0c;git分支操作&#xff0c;git分支基础和操作&#xff0c;2023年git基础使用教程 不同的分支相当于不同的平行世界 合并分支 两个分支是我们项…...

opencv实战项目二十三:基于BEBLID描述符的特征点匹配实现表盘校正

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、特征点匹配介绍二、特征点检测三、特征描述符计算四&#xff0c;描述符的匹配筛选五&#xff0c;根据匹配结果映射图片六&#xff0c;整体代码&#xff1a;…...

数据库是全表扫描是怎么扫描法?

全表扫描是数据库服务器用来搜寻表的每一条记录的过程&#xff0c;直到所有符合给定条件的记录返回为止。‌ 在执行全表扫描时&#xff0c;数据库会逐行扫描表中的所有记录&#xff0c;以找到符合查询条件的记录。这种扫描方式适用于没有为查询条件中的字段建立索引的情况。全…...

认准这10款人力资源系统,90%的企业都在用!

本文将为大家推荐十款主流的人力资源系统&#xff0c;为企业选型提供参考&#xff01; 想象一下&#xff0c;企业在不断发展壮大的过程中&#xff0c;员工数量逐渐增多&#xff0c;人事管理变得越来越复杂。如果没有一个高效的人力资源系统&#xff0c;就如同在大海中航行却没有…...

2024年我的利基出版转型——新战略与重点解析

这篇文章酝酿已久。这是我在网络出版策略上投入数百小时后得出的成果。 像我们这个行业的许多人一样&#xff0c;即网络出版行业&#xff0c;我一直忙于彻底改造整个出版业务。 这是一段漫长的旅程&#xff0c;这是肯定的。 我预感在此过程中还会有更多调整&#xff0c;但我…...

【数据结构】双向链表专题

目录 1.双向链表的结构 2.双向链表的实现 2.1初始化 以参数的形式初始化链表&#xff1a; 以返回值的形式初始化链表&#xff1a; 2.2尾插 2.3打印 2.4头插 2.5尾删 2.6头删 2.7查找 2.8在指定位置之后插入数据​编辑 2.9删除pos节点 2.10销毁 3.整理代码 3.1…...

大二上学期计划安排

大二上学期计划安排 学期目标: 加强算法学习,提升算法思维,为以后的算法竞赛做准备学习java知识,学习框架,构建知识体系,深入底层,增强理解增加项目经验,独立完成至少一个项目,并进行交流,优化增强团队凝聚力,营造良好的团队氛围阅读书籍,阅读至少3本以上经典书籍 日常学习安…...

HarmonyOS开发实战( Beta5.0)图片编辑实现马赛克效果详解

鸿蒙HarmonyOS开发往期必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例将原图手指划过的区域分割成若干个大小一致的小方格…...

【新书介绍】《JavaScript前端开发与实例教程(微课视频版)(第2版)》

本书重点 无任何基础的初学者&#xff0c;高校JavaScript课程教材。 配套非常全&#xff0c;提供案例源代码、PPT课件、课后习题答案、微课视频、教案、教学大纲、课程实训、期末考试试卷、章节测试、实验报告、学习通建课资源包。 内容简介 JavaScript是开发Web前端必须掌…...

什么是GWAS全基因组关联分析?

什么是全基因组关联分析&#xff1f;&#xff08;Genome-Wide Association Study&#xff0c;GWAS&#xff09; 全基因组关联分析&#xff08;GWAS&#xff09;是一种在全基因组范围内搜索遗传变异&#xff08;通常是单核苷酸多态性&#xff0c;SNP&#xff09;与复杂性状之间关…...

k8s dashboard token 生成/获取

创建示例用户 在本指南中&#xff0c;我们将了解如何使用 Kubernetes 的服务帐户机制创建新用户、授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板。 对于以下每个和的代码片段ServiceAccount&#xff0c;ClusterRoleBinding您都应该将它们复制到新的清单文件(如)…...

windows@openssh免密登陆配置@基于powershell快速配置脚本

文章目录 abstract免密自动登录配置介绍&#x1f47a;修改Server配置文件一键脚本修改&#x1f47a; 向ssh server端上传或创建支持免密登录的公钥文件预执行命令&#x1f47a;方式1方式2重启服务以生效&#x1f47a; 傻瓜式配置免密自动登录&#x1f47a;&#x1f47a;准备 操…...

【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署

【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署前言Windows平台搭建依赖环境模型转换--pytorch转onnxONN…...

手写排班日历

手写排班日历&#xff1a; 效果图&#xff1a; vue代码如下&#xff1a; <template><div class"YSPB"><div class"title">排班日历</div><div class"banner"><span classiconfont icon-youjiantou click&qu…...

SpringBoot多数据源配置

1、添加依赖 <!-- 数据库驱动 --><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version><scope>runtime</sco…...

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步&#xff1a;在 WXML 中添加 canvas 组件 第二步&…...

MATLAB图像处理

MATLAB图像处理 MATLAB&#xff0c;作为美国MathWorks公司出品的商业数学软件&#xff0c;以其强大的矩阵运算能力和丰富的函数库&#xff0c;在图像处理领域得到了广泛的应用。MATLAB不仅提供了基础的图像处理功能&#xff0c;还通过图像处理工具箱&#xff08;Image Process…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...