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
类型数据。支持常用的set
、get
等操作。opsForHash()
:用于操作 Redis 中的Hash
类型数据。支持put
、get
、delete
等操作。opsForList()
:用于操作 Redis 中的List
类型数据。支持leftPush
、rightPop
等操作。opsForSet()
:用于操作 Redis 中的Set
类型数据。支持add
、members
等操作。opsForZSet()
:用于操作 Redis 中的ZSet
(有序集合)类型数据。支持add
、range
、remove
等操作。
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 的集成主要通过 RedisCacheManager
和 RedisTemplate
完成。当 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客户端库有多个,…...

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//允许在下拉框中添加搜索框…...

软件可维护性因素例题
答案:C 知识点: 系统可维护性因素决定 可理解性 可测试性 可修改性 选项C可移植性错误...

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

opencv实战项目二十三:基于BEBLID描述符的特征点匹配实现表盘校正
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、特征点匹配介绍二、特征点检测三、特征描述符计算四,描述符的匹配筛选五,根据匹配结果映射图片六,整体代码:…...

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

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

2024年我的利基出版转型——新战略与重点解析
这篇文章酝酿已久。这是我在网络出版策略上投入数百小时后得出的成果。 像我们这个行业的许多人一样,即网络出版行业,我一直忙于彻底改造整个出版业务。 这是一段漫长的旅程,这是肯定的。 我预感在此过程中还会有更多调整,但我…...

【数据结构】双向链表专题
目录 1.双向链表的结构 2.双向链表的实现 2.1初始化 以参数的形式初始化链表: 以返回值的形式初始化链表: 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开发往期必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 介绍 本示例将原图手指划过的区域分割成若干个大小一致的小方格…...

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

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

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

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

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

手写排班日历
手写排班日历: 效果图: vue代码如下: <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、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步&…...

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

【编程底层思考】性能监控和优化:JVM参数调优,诊断工具的使用等。JVM 调优和线上问题排查实战经验总结
JVM性能监控和优化是确保Java应用程序高效运行的关键环节。以下是一些JVM性能监控和优化的方法,以及使用诊断工具和实战经验的总结: 一、JVM参数调优: 堆大小设置 : - Xms:设置JVM启动时的初始堆大小。 - -Xmx:设置J…...

数据库的实施过程分析
在完成了数据库的逻辑结构设计和物理结构设计后,下一步就是将设计成果转化为现实,这一步骤被称为数据库的实施。数据库实施是数据库开发过程中至关重要的一环,它标志着从设计阶段向实际应用的过渡。本文将为你详细讲解数据库实施的各个关键步…...

【Kubernetes】常见面试题汇总(十二)
目录 36.简述 Kubernetes 的负载均衡器? 37.简述 Kubernetes 各模块如何与 APl Server 通信? 38.简述 Kubernetes Scheduler 作用及实现原理? 36.简述 Kubernetes 的负载均衡器? (1)负载均衡器是暴露服务…...

基于SpringBoot+Vue+MySQL的美术馆管理系统
系统展示 用户前台界面 管理员后台界面 系统背景 随着文化艺术产业的蓬勃发展,美术馆作为展示与传播艺术的重要场所,其管理工作变得日益复杂。为了提升美术馆的运营效率、优化参观体验并加强艺术品管理,我们开发了基于SpringBootVueMySQL的美…...

golang面试
算法: 1.提取二进制位最右边的 r i & (~i 1) 2.树上两个节点最远距离,先考虑头结点参与不参与。 3.暴力递归改dp。 1.确定暴力递归方式。 2.改记忆化搜索 3.严格表方式: 分析可变参数变化范围,参数数量决定表维度、 …...

基于"WT2605C的智能血压计:AI对话引领个性化健康管理新时代,健康守护随时在线
在当今快节奏的生活中,健康管理已成为我们日常不可或缺的一部分。随着科技的进步,智能设备正逐步融入我们的日常生活,为健康管理带来前所未有的便捷与智能化。今天,让我们共同探索WT2605C AI在线方案如何在血压计中发挥革命性作用…...

redis高级教程
一 关系型数据库和 NoSQL 数据库 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 D…...

prfm命令初探
1. 前言 在查看一段neon代码时,发现有如下片段,为使用汇编进行数据预取操作。这是一个新的知识点,记录一下学习过程。 __asm__ volatile("prfm pldl2keep,[%0, #8192] \n""prfm pldl1keep,[%0, #1024] \n":"r"…...

AI大模型需要学什么?怎么学?从零基础入门大模型(保姆级),从这开始出发!
一.初聊大模型 1.为什么要学习大模型? 在学习大模型之前,你不必担心自己缺乏相关知识或认为这太难。我坚信,只要你有学习的意愿并付出努力,你就能够掌握大模型,并能够用它们完成许多有意义的事情。在这个快速变化的时代…...

python自述3
Python 条件控制 if语句的一般形式如下所示: if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。 注意: 1、每个条件后面要使用冒号 :,表…...