写后缓存
Redis 和其他数据库(SQL 或 NoSQL)之间的写后和写通缓存。
写后是一种缓存策略,其中缓存层本身连接到后端数据库。这意味着您的应用程序只需要连接到您的缓存层,缓存层会在需要时从后端数据库读取或更新数据。Redis 目前支持 Redis 企业版软件 中的写后缓存。
这些缓存模式的工作原理如下
- 您的应用程序使用缓存进行读写操作。
- 缓存会异步将任何更改的数据同步到后端数据库。
安装写后食谱
写后食谱附带两种类型的依赖项
- 连接到后端数据库的驱动程序
- 用于 RedisGears 函数的 Python 库
在大多数情况下,所有这些可以在上传函数之前预配到 RedisGears。但是,在某些情况下,例如使用 Oracle 驱动程序,主机上驱动程序的根访问权限是必需的。
安装 Oracle 驱动程序(可选)
如果您想使用 Oracle 数据库进行写后操作
- 下载 Oracle 驱动程序.
- 在集群中的每个 RS 节点上,按照 Oracle 驱动程序下载页面上的安装说明进行操作。
导入需求
-
安装 Python 3。
-
要安装 gears-cli,请运行
pip install gears-cli
-
下载 rgsync 离线包。
-
导入需求
# 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
文件列出了模块的依赖项。 -
从连接到数据库的节点或客户端的 CLI 中,使用以下命令检查需求是否已成功导入
redis-cli RG.PYDUMPREQS
要从客户端连接到数据库,请运行
redis-cli -h <FQDN_of_node> -p <host> [-a <password>]
此命令返回所有可用需求的列表。
注册函数
以下是 RedisGears 食谱,它展示了如何使用写后模式将 Redis 哈希中的数据映射到 MySQL 表。
该食谱将所有具有以下前缀的 Redis 哈希person:<id>
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 网站 获取复制选项以及数据库和映射的配置选项。
-
根据您的特定需求创建一个包含配置映射的 Python 文件。
-
使用自定义文件运行
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
时提供每个函数引用。
此代码引用了三个参数:MySqlUser
、MySqlPassword
和 MySqlDB
。在 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 不会尝试重新连接,直到断开连接。这意味着存储秘密的参数的更新不会立即生效,但它们将用于所有后续的连接尝试。