写后缓存

Redis 和其他数据库(SQL 或 NoSQL)之间的写后和写通缓存。

写后是一种缓存策略,其中缓存层本身连接到后端数据库。这意味着您的应用程序只需要连接到您的缓存层,缓存层会在需要时从后端数据库读取或更新数据。Redis 目前支持 Redis 企业版软件 中的写后缓存。

这些缓存模式的工作原理如下

  1. 您的应用程序使用缓存进行读写操作。
  2. 缓存会异步将任何更改的数据同步到后端数据库。

安装写后食谱

写后食谱附带两种类型的依赖项

  • 连接到后端数据库的驱动程序
  • 用于 RedisGears 函数的 Python 库

在大多数情况下,所有这些可以在上传函数之前预配到 RedisGears。但是,在某些情况下,例如使用 Oracle 驱动程序,主机上驱动程序的根访问权限是必需的。

安装 Oracle 驱动程序(可选)

如果您想使用 Oracle 数据库进行写后操作

  1. 下载 Oracle 驱动程序.
  2. 在集群中的每个 RS 节点上,按照 Oracle 驱动程序下载页面上的安装说明进行操作。

导入需求

  1. 安装 Python 3

  2. 要安装 gears-cli,请运行

    pip install gears-cli
    
  3. 下载 rgsync 离线包

  4. 导入需求

    # gears-cli import-requirements \
        --host HOST [ --port PORT ] --password PASSWORD \
        --requirements-path rgsync-99.99.99.linux-bionic-x64.zip
    
    注意

    您可以更有效率,只导入所需的依赖项,但 rgsync 始终是必需的,并且可以根据您的后端数据库与以下一个或多个包结合使用

    • redisgears-requirement-v1-snowflake-sqlalchemy-linux-<os>-x64.zip
    • redisgears-requirement-v1-PyMySQL-linux-<os>-x64.zip
    • redisgears-requirement-v1-cx-Oracle-linux-<os>-x64.zip
    • redisgears-requirement-v1-cassandra-driver-linux-<os>-x64.zip

    此列表在更新的版本中可能有所不同或更广泛。模块包中的 module.json 文件列出了模块的依赖项。

  5. 从连接到数据库的节点或客户端的 CLI 中,使用以下命令检查需求是否已成功导入

    redis-cli RG.PYDUMPREQS
    

    要从客户端连接到数据库,请运行

    redis-cli -h <FQDN_of_node> -p <host> [-a <password>]
    

    此命令返回所有可用需求的列表。

注册函数

以下是 RedisGears 食谱,它展示了如何使用写后模式将 Redis 哈希中的数据映射到 MySQL 表。

该食谱将所有具有以下前缀的 Redis 哈希person:<id>映射到 MySQL 表 persons,其中 <id> 是主键,并映射到 person_id 列。类似地,它将所有具有以下前缀的哈希car:<id>映射到 cars 表。

from rgsync import RGWriteBehind
from rgsync.Connectors import MySqlConnector, MySqlConnection

'''
Create MySQL connection object
'''
connection = MySqlConnection('demouser', 'Password123!', 'localhost:3306/test')

'''
Create MySQL persons connector
persons - MySQL table to put the data
person_id - primary key
'''
personConnector = MySqlConnector(connection, 'persons', 'person_id')

personsMappings = {
	'first_name':'first',
	'last_name':'last',
	'age':'age'
}

RGWriteBehind(GB, keysPrefix='person', mappings=personsMappings, connector=personConnector, name='PersonsWriteBehind', version='99.99.99')

'''
Create MySQL car connector
cars - MySQL table to put the data
car_id - primary key
'''
carConnector = MySqlConnector(connection, 'cars', 'car_id')

carsMappings = {
	'id':'id',
	'color':'color'
}

RGWriteBehind(GB, keysPrefix='cars', mappings=carsMappings, connector=carConnector, name='CarsWriteBehind', version='99.99.99')

访问 rgsync 网站 获取复制选项以及数据库和映射的配置选项。

  1. 根据您的特定需求创建一个包含配置映射的 Python 文件。

  2. 使用自定义文件运行 gears-cli

    gears-cli run --host <host> --port <post> --password <password> <yourfile>.py
    

使用 RedisGears 进行写后缓存

RGSync 是一个 RedisGears 食谱,它使用写后模式将 Redis 数据结构同步到后端数据存储(目前支持 Oracle、MySQL、Cassandra 和 Snowflake)。

以下是如何使用针对 MySQL 的 RGSync 食谱创建写后函数。此函数将同步 Redis 哈希中的一组字段到 MySQL 行中的列。Redis 哈希的键名必须采用以下形式 {name}:{id},其中 id 是我们要与之保持同步的行的主键。因此,例如,假设我们的哈希如下所示

redis.cloud:6379> HSET person:5 first_name Marek last_name Michalski age 27
(integer) 2

此哈希中的数据将对应于 ID 为 5 的行。但我们需要定义从哈希字段到列的映射。在我们的函数中,我们使用 Python 字典进行此操作

personsMappings = {
	'first_name':'first',
	'last_name':'last',
	'age':'age'
}

这意味着哈希中的 last_name 字段应与行中的 'last' 字段同步。因此,我们现在可以编写我们的 RedisGears 函数。

首先,加载必要的库并连接到 MySQL

from rgsync import RGWriteBehind
from rgsync.Connectors import MySqlConnector, MySqlConnection

connection = MySqlConnection('myapplication', 'Password123!', 'localhost:3306/test')

接下来,创建一个连接器对象,指定表名和存储主键的列名

personConnector = MySqlConnector(mySqlConnection, 'persons', 'id')

之后,定义您的字段-列映射

personsMappings = {
	'first_name':'first',
	'last_name':'last',
	'age':'age'
}

最后,使用这些初始化对象创建一个 RGWRiteBehind 对象

RGWriteBehind(GB,
              name='PersonsWriteBehind',
              version='1',
              connector=personsConnector,
              keysPrefix='person',
              mappings=personsMappings)

请注意,您可以使用 version 参数对函数注册进行版本控制,因为具有相同 name 的新版本将替换旧版本。

如果您已将所有这些代码放入一个文件(example.py)中,那么可以使用 gears-cli 工具将其加载到您的 Redis 部署中

gears-cli --host <host>
          --port <post>
          --password <password>
          example.py
          REQUIREMENTS rgsync

秘密管理

您可能不希望将数据库凭据存储在 RedisGears 函数中。为了避免这种情况,您可以将这些凭据作为模块参数传递,然后从您的函数中引用它们。

以下代码展示了如何在创建后端数据库连接时引用这些凭据。

def User():
	return configGet('MySqlUser')
def Password():
	return configGet('MySqlPassword')
def DB():
	return configGet('MySqlDB')

connection = MySqlConnection(User, Password, DB)

请注意,对于每个凭据,我们都定义了一个 Python 函数,该函数返回指定的模块参数。然后,我们在实例化 MySqlConnection 时提供每个函数引用。

此代码引用了三个参数:MySqlUserMySqlPasswordMySqlDB。在 Redis Enterprise 中,您可以使用 rladmin 工具设置这些参数。设置这些参数的命令采用以下形式

rladmin tune db [DB-NAME] module_name rg module_config_params "[PARAM-NAME] [PARAM-VALUE]"

要将名为“user-api”的数据库上的 MySqlPassword 参数设置为“Password123!”,您将运行此 rladmin 命令

rladmin tune db user-api module_name rg module_config_params "MySqlPassword Password123!"

成功建立连接后,RedisGears 不会尝试重新连接,直到断开连接。这意味着存储秘密的参数的更新不会立即生效,但它们将用于所有后续的连接尝试。

RATE THIS PAGE
Back to top ↑