Redis访问工具

news2024/11/13 12:14:19

使用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的方法可以在项目中都使用。

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

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

相关文章

828华为云征文|Flexus X实例C#/.Net Core 结合(git代码管理、docker自定义镜像)快速发布部署-让你的项目飞起来~

目录 前言 环境准备 购买服务器配置 项目部署 项目准备(Dockerfile文件) Git部署并拉取代码 安装Git 配置Git用户信息 SSH密钥 安装docker 添加Docker GPG密钥 添加Docker官方软件源 再次更新软件包列表 安装docker 项目运行 构建镜像 …

MySQL 的基础 一 (连接池, SQL接口, 查询解析器, 查询优化器, 存储引擎接口, 执行器)

目录 1 MySQL数据库的连接池 2 网络连接必须让线程来处理 3 SQL接口:负责处理接收到的SQL语句 4 查询解析器:让MySQL能看懂SQL语句 5 查询优化器:选择最优的查询路径 6 调用存储引擎接口,真正执行SQL语句 7 执行器&…

UE4_后期处理_后期处理材质及后期处理体积三—遮挡物体描边显示

一、效果: 在很多游戏中为了玩家能看到墙面背后是否有敌人,会给被遮挡的敌人增加描边显示,效果如下: 参考: https://zhuanlan.zhihu.com/p/81310476 https://zhuanlan.zhihu.com/p/358140547 二、所需知识 知识点…

数据结构与算法学习day20-二叉树的最大深度、最小深度、完全二叉树的节点个数、平衡二叉树、二叉树所有路径

一、二叉树的最大深度 1.题目 104. 二叉树的最大深度 - 力扣(LeetCode) 2.思路 2.1递归法 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度…

安卓玩机工具------vivo机型线刷救砖固件 下载工具操作步骤预览

vivo机型玩机 vivo机型虽然对于玩家来说相对可玩性较低。官方封闭bl锁。对于普通玩家来说只能 中规中矩使用机型。但目前有很多vivo机型通过第三方渠道已经可以解bl锁和root操作。但有时候玩机会遇到误操作或者其他系统性问题导致系统瘫痪不开机。 那么我们就需要具备一些救砖…

Linux网络——Socket编程函数

一.网络命令 1.ping ping命令用来检测网络是否连通,具体用法为: ping 任意网址 结果如下: 当出现上述字段时,证明网络是连通的,这里值得注意的是,ping命令执行之后会不断进行网络检测,不会停…

Linux——网络基础Socket编程

目录 一计算机网络背景 二协议 1初始协议 1.1协议分层 1.2OSI七层模型 1.3TCP/IP五层模型 2再始协议 2.1为什么要有TCP/IP协议 2.2TCP/IP与OS的关系 2.3所以什么是协议 三网络传输基本流程 1局域网(以太网)通信原理 1.1认识mac地址 2同…

【软件设计师真题】下午题第一大题---数据流图设计

解答数据流图的题目关键在于细心。 考试时一定要仔细阅读题目说明和给出的流程图。另外,解题时要懂得将说明和流程图进行对照,将父图和子图进行对照,切忌按照常识来猜测。同时应按照一定顺序考虑问题,以防遗漏,比如可以…

综合案例-数据可视化-地图

一、pyecharts—地图快速入门 假设我们要将6个地区的某种数量在地图上标注出来,首先导入pyecharts包内地图相关模块,然后准备地图数据(数据类型是列表,列表的元素类型为元组),然后把准备好的数据添加进地图…

Java笔试面试题AI答之单元测试JUnit(1)

文章目录 1. 什么是JUnit?2. JUnit的重要特征是什么?3. 什么是单元测试案例?单元测试的特点:单元测试的好处:编写单元测试案例的步骤: 4. 何时在开发周期中编写单元测试?5. 为什么不直接使用Sys…

【鸿蒙开发从0到1 day07】

ArkTS-基础语法 一.开发环境1.下载Dev Eco Stdio2.下载chinese插件3.基础入门4.输出语句5.注释 二.3种常见的数据类型1.数据类型2.储存数据(1)变量:专门用来存储数据的容器(可变)(2)常量(3)命名规则 三.数组四.函数1.无参函数2.有参函数3.返回值4.箭头函数 五.对象六.总结 一.开…

HBuilderx中vue页面引用scss样式

scss为css样式的预编译器,引入了变量、嵌入、混合、集成、引入等功能,相对于css样式,实现了样式的编程,具有更灵活的样式编写模式。 那么在HBuilderx中,“.vue”格式页面如何调用scss样式呢?详细如下&#…

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1&#xff08;错误经验&#xff09; #include <iostream> #include <string> using namespace std;int main() {string s;string ret;int count 0;while(cin >> s)for(auto a : s){if(count 0){if( a <…

字符串操作的高效工具—正则表达式

字符串操作的高效工具—正则表达式 一 . 概述1.1 认识正则表达式1.2 正则表达式体验案例 二 . 使用2.1 字符类2.2 逻辑运算符2.3 预定义字符2.4 数量词2.5 分组括号2.6 字符串中常用含有正则表达式的方法 正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 r…

xcode打包报错之 zip fail / copy fail

在xcode中archive打包中&#xff0c;遇到提示zip fail或者copy fail&#xff0c;此时请清理你电脑的缓存文件了&#xff0c;但凡遇到这两种报错&#xff0c;是编译时运行内存不够导致的&#xff0c;请及时查看并清理你的电脑。 如下&#xff1a; 将对应的缓存或者垃圾清理&am…

春日美食汇:基于SpringBoot的订餐平台

2 系统关键技术 2.1JSP技术 JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件()。htm,。Html) [1]。 JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行&#xff0c;正因为JSP参照了许多编程语言的特性&#xf…

C++——类与对象(二)

目录 引言 类的默认成员函数 构造函数 1.构造函数的概念 2.注意事项 初始化列表 1.初始化列表的概念 2.注意事项 析构函数 1.析构函数的概念 2.注意事项 拷贝构造函数 1.拷贝构造函数的概念 2.注意事项 运算符重载 1.运算符重载的概念 2.注意事项 赋值运算符…

食家巷桃酥:一口酥脆,回味悠长

在众多的传统糕点中&#xff0c;食家巷桃酥以其独特的魅力脱颖而出&#xff0c;成为了许多人心中的美味记忆。初见食家巷桃酥&#xff0c;那金黄的色泽便让人食欲大增。每一块桃酥都像是一件小小的艺术品&#xff0c;散发着诱人的香气。它的外形饱满&#xff0c;边缘微微隆起&a…

JVM 调优篇1 类的加载器与加载过程

一 基本知识 1.1 JIT&AOT JIT: Just Time compilation 即时编译器 在程序运行时将字节码或中间表示转换为机器代码。 AOT: Ahead of Tmie Compilation &#xff1a; 预编译 在程序运行之前将高级语言代码完全编译成机器代码。 1.2 字面量和符号引用* 字面量&am…

安卓下载工具箱_3.8.1/去浏览器跳转登录就是会员

下载工具箱app是一款支持56种下载协议的安卓万能下载工具,下载工具箱最新版主要提供网络视频解析下载,资源嗅探下载,以及本地视频扫描提取功能,同时提供不常见的视频编辑功能,例如:智能清洗,高帧率/码率等 链接: https://pan.baidu.com/s/1pW0CgmGv9bmzGkBA4rV2oQ?pwdxdby …