数据结构论坛

注册

 

发新话题 回复该主题

在微服务SpringBoot应用程序中实 [复制链接]

1#
北京看白癜风哪里治疗最好 https://disease.39.net/yldt/bjzkbdfyy/

学习在SpringBoot微服务应用程序中实现Redis以进行缓存管理,以减少客户端工作负载并加速应用程序。

什么是Redis?

Redis是一个开源(BSD许可的)内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集,带范围查询的排序集,位图,超日志和带半径查询的地理空间索引。

Redis是用ANSIC编写的,适用于大多数POSIX系统,如Linux,BSD和OSX,没有外部依赖性。Linux和OSX是Redis开发和测试的两个操作系统。Redis可以在Solaris衍生系统(如SmartOS)中运行。Windows版本没有官方支持,但Microsoft开发并维护了Redis的Win-64端口。

为何选择Redis?

Redis主要用于缓存管理。它减少了客户端工作负载并加速了应用程序。

让我们讨论一下Redis可能有用的场景。

1)调用外部应用程序API

您的微服务正在调用其他应用程序的API以获取一些数据。调用是经常进行的,响应中的数据很大,而且您知道响应数据在其他应用程序中不会经常更改。在我们的例子中,我们调用一个API,并在到毫秒内得到响应。任何应用程序等待这么长时间才能获得响应并不好。在这种情况下,Redis很有帮助。

我们可以使用到期时间在Redis中缓存响应,因此您将从Redis缓存中获得响应而不是实际调用。在我们的例子中,我们将数据的到期时间设置为1天。当数据到期时,调用将转到实际的Web服务并刷新缓存中的数据。下次,数据将从缓存中返回。

在这里,我们将数据的加载时间减少了90%,并且我们在到毫秒之间获得了相同的数据。

2)经常查询数据库中的参考表或主表

另一种情况是,当您在数据库中有一个表时,该表包含不会经常更改的引用数据。您经常查询该表以获取数据并填充UI。在这种情况下,您还可以使用Redis。您可以使用过期时间在Redis中缓存表,而不是每次从磁盘查询数据库,这样UI的加载时间就会更快。

还有其他缓存机制,但我们使用的是Redis,因为它提供了更多的数据结构和算法来存储和检索数据。它还提供了一种群集机制。您可以在Redis中将内存设置为最大2GB。

Redis配置

在您要与Redis建立连接的微服务中实现Redis配置类。

RedisStandaloneConfiguration:此类用于设置单节点Redis安装的连接。

JedisClientConfiguration:此类为特定于Jedis客户端功能的SSLSocketFactory和JedisPoolConfig提供可选功能。

JedisConnectionFactory:这是Jedis基本连接的连接工厂。它使用JedisClientConfiguration和RedisStandaloneConfiguration。

RedisTemplateK,V:此帮助程序简化了Redis的数据访问。它对Redis存储中的给定对象和基础二进制数据使用自动序列化和反序列化。

这个类是线程安全的:

属性文件中的详细信息:

现在建立了连接,我们必须使用Redis数据库执行操作,因此我们创建了一个泛型util类,它将在Redis数据库上为不同的数据结构执行操作。

RedisUtil

此类是通用的,因为您可能需要缓存表或API响应。由于它是一个泛型类,您必须使用要缓存的所需类型创建此类的实例。优良作法是只有一个类在DB上执行操作,正如我们在微服务中所遵循的那样。

在该类中,我们已经实现了多个数据结构,根据需求,可以使用方法来存储和检索缓存中的数据。

RedisTemplate提供了许多方法来执行多个数据结构的操作。

我们在下面的类中使用了一些:

opsForHash():返回HashOperationsK,HK,HV类。此类用于Redis上的哈希操作。

opsForList():返回用于列表操作的ListOperationsK,V。

opsForValue():返回ValueOperationsK,V执行简单的键值操作;每个密钥在Redis中都有一个条目用于其相关值

缓存管理器

我们已经实现了这一点,我们的代码应该从微服务的服务层松散耦合。为此,我们创建了一个Manager接口及其实现类,因此所有与Redis相关的代码都将独立于您的微服务的服务层。

我们将使用服务层中Manager接口的实现来缓存数据。Manager将充当您的服务层和Redis代码之间的桥梁。如果Redis中的某些内容发生变化,它不应影响我们的服务层或任何要求或进行升级,以便可以轻松适应。

服务层

您可以在微服务的任何服务层中使用缓存管理器类。

我们已经为RedisKey使用了指南,因为它提供了多种数据结构,但所有数据结构都与Redis数据库中的密钥相关联。如果要缓存50个表并从缓存中检索数据,则应该知道用于检索缓存数据的密钥。

假设您要将数据库表的记录存储在Redis中的键值(Map)对中。关键是这样的:

RedisKey=表+“_”表名

Mapkey=表名+“_”+要存储的值

您可以参考缓存管理器类的实现以获取指南。

总之,这篇文章将帮助您在微服务中使用缓存的抽象层实现缓存。这将有助于您的微服务避免与缓存实现的紧密耦合。

喜欢我请

分享 转发
TOP
发新话题 回复该主题