如何在MySQL Memcache插件中指定多个键列?

时间:2018-08-29 10:42:30

标签: mysql configuration memcached composite-key

在我配置并尝试使用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”是转录错误。

非常感谢您!

1 个答案:

答案 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