在我配置并尝试使用MySQL的memcache插件后,我一直试图从具有复合主键的表中添加名称空间一直未成功。有一个例子:
CREATE TABLE test(
`key` VARCHAR(3),
`key2` VARCHAR(3),
`value1` varchar(1024),
`value2` varchar(1024),
PRIMARY KEY (`key`,`key2`)) ENGINE = INNODB;
和innodb_memcache.containers中的行:
INSERT INTO innodb_memcache.containers (name, db_schema, db_table, key_columns, value_columns, flags, cas_column, expire_time_column, unique_idx_name_on_key) VALUES('test', 'kv_data', 'test', 'key|key2', 'value1|value2', '0', '0', '0', 'PRIMARY');
之后,如果我在memcache界面中进行设置:
set @@test.hello|world 0 0 11
hello|world
memcache的响应是:
NOT_FOUND
此外,如果我在表中手动插入并获取:
get @@test.val1|val2
答案是END,就好像该项目在数据库中不存在。单列主键不会发生此现象。
有人能针对此用例成功配置内存缓存吗?我在文档中找不到与复合主键相关的任何内容,而且我也不认为容器表中的名称“ key_columns”是转录错误。
非常感谢您!
答案 0 :(得分:0)
答案迟了,但是 Innodb Memcached 没有很好的文档记录。所以,我希望这会对某人有所帮助。
为了 SET 或 GET 你使用 @@ + 表名(来自 innodb_memcache.containers.name) + 。 (DOT) + 键(来自 innodb_memcache.containers.key_columns)。
就您而言,对于 SET:
router.get(`/api/verification/load`, auth, async (req, res) => {
try {
const user = await User.findOne({ GETS A USER })
let urlArray = []
const keyArray = [user.idKey, user.selfieKey]
for (const key in keyArray) {
s3VerificationBucket.getSignedUrl(
"getObject",
{
Bucket: "app-verification",
Key: key,
Expires: 30,
},
(err, url) => urlArray.push(url)
)
}
if (urlArray.length === 0) {
console.log("URL ARRAY EMPTY") -> RETURNS "URL ARRAY EMPTY"
}
const idUrl = urlArray[0]
const selfieUrl = urlArray[1]
res.send({ user, idUrl, selfieUrl })
} catch (err) {
res.status(500).send()
}
})
对于 GET:
set @@test.EXAMPLE 0 0 11
hello|world