小编vas*_*ino的帖子

当副本是不同的唯一列时,如何在使用ON DUPLICATE KEY UPDATE时阻止MySQL自动递增主键?

请考虑下表:

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| vendor_id   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| vendor_name | varchar(100)     | NO   | UNI | NULL    |                |
| count       | int(10) unsigned | NO   |     | 1       |                |
+-------------+------------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

我有以下MySQL查询:

INSERT INTO `table` 
   (`vendor_name`) 
VALUES 
   ('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1
Run Code Online (Sandbox Code Playgroud)

此查询的目的是向表中插入新的供应商名称,如果供应商名称已存在,则列计数应增加1.但是当前列的主键也将自动递增.在这些情况下,如何防止MySQL自动递增主键?有没有办法用一个查询来做到这一点?

谢谢.

mysql key unique duplicates

5
推荐指数
1
解决办法
319
查看次数

使用 Redis 缓存 Eloquent 模型实例

所以在 Laravel 5.1 中,我有两个 Eloquent 模型:

\App\Model\Product
\App\Model\Brand
Run Code Online (Sandbox Code Playgroud)

品牌和产品之间存在一对多的关系(即一个品牌可能有多个产品)。在我们的系统中,每次我们想要检索产品的雄辩模型时,我们都急切地加载品牌,如下所示:

$product = \App\Model\Product::whereId({integer})->with('brand')->first();
Run Code Online (Sandbox Code Playgroud)

我们不希望产品经常变化,所以为了减少数据库查询,提高性能,我们想用Redis缓存这些Product模型,以便在执行数据库查询之前,我们会检查Product实例是否已经存储在缓存中。所以我的问题是,能够从 Redis 存储和检索这些产品实例的最佳方法是什么?

我知道我们可以通过执行以下操作将 eloquent 模型转换为 JSON:

$json = $product->toJson();
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这将允许我将“字符串化”模型存储在 Redis 中。但是,我将如何进行相反的操作 - 将存储的 JSON 转换回 Product 实例(同时具有预先加载的 Brand 关系),我可以在代码中将其用作普通模型实例?

此外,为了减少 Redis 操作,这必须与 MGET 一起使用,允许我一次检索多个实例。流水线获取操作也是可以接受的。

这是可行的,还是有更好的方法来实现这一目标?

先感谢您。

php caching redis laravel eloquent

3
推荐指数
1
解决办法
4442
查看次数

标签 统计

caching ×1

duplicates ×1

eloquent ×1

key ×1

laravel ×1

mysql ×1

php ×1

redis ×1

unique ×1