Redis访问工具

devtools/2024/9/25 5:48:43/

使用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 redisSpring 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、redisSpring Cache最终也是通过Lettuce 去访问redis 。使用Spring Cache的方法很简单,只需要在方法上添加注解即可实现将方法返回数据存入缓存,以及清理缓存等注解的使用。

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

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


http://www.ppmy.cn/devtools/111369.html

相关文章

【Linux 从基础到进阶】使用 Crontab 进行任务调度

使用 Crontab 进行任务调度 Crontab 是 Linux 和 Unix 系统中用于定时执行任务的一个重要工具,适用于自动化脚本执行、系统维护、备份等定时任务。通过 Crontab,可以让系统在指定的时间自动执行设定的命令或脚本,大大提高了系统管理和运维的效率。 本文将详细介绍如何使用…

【SOP】使用MMDeploy将MMAction2的模型转换为TensorRT

配置环境 MMAction2 1.2.0 配置MMAction2环境CUDA 11.8 安装CUDA,cuDNN,NCCLcuDNN 8.4.1 安装CUDA,cuDNN,NCCLTensorRT GA 8.6 配置TensorRT环境MMDeploy pip install mmdeploypytorch 2.0.1, torchvision 0.15.2 conda install …

三维坐标变换

(一些困惑梳理记录) “坐标转换”的区分 1、坐标系基底变换 2、目标描述向量变换 总的来说, A属于1、坐标系基底变换, B中所述方法,可用于1、坐标系基底变换,也可用于2、目标描述向量变换&#xff0c…

计算机网络(网络层)

网络层的主要任务是实现网络互联,进而实现数据包在个网络中间的传输。 网络层主要解决的问题 (1)网络层向运输层提供怎样的服务 (2)网络层寻址问题 (3)路由选择问题 网路层提供的两种服务 …

OpenCV结构分析与形状描述符(13)拟合椭圆函数fitEllipseDirect()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆拟合一组2D点。它返回一个内切于该椭圆的旋转矩形。使用了由[91]提出的直接…

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境 cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下 docker-compose up -d # docker-compose启动靶场 docker ps -a # 查看开启的靶场信息2.访问192.168.146.136:8080网页 3.构造payload http://192.168.146.136:80…

【idea-安装】

JetBrains官⽹ : https://www.jetbrains.com/ 1.下载idea安装包,下载旧一些的版本,避免新版本的不稳定。 下载下来的安装包是exe格式的,直接点击运行。 点击Next 2.选择要下载的位置,点击下一步。 3.选择⽣成快捷⽅式和建⽴⽂件…

零日攻击如何防御

引言 随着网络技术的飞速发展,网络安全问题日益严峻。零日攻击(Zero-day attack)作为网络安全领域的一种高级威胁,对组织和个人的网络安全构成了巨大挑战。本文将深入探讨零日攻击的原理、危害以及有效的防范措施。 零日攻击的原…