Heim  >  Artikel  >  Backend-Entwicklung  >  用redis的list数据结构来批量执行sql语句

用redis的list数据结构来批量执行sql语句

WBOY
WBOYOriginal
2016-09-01 00:20:162145Durchsuche

现在数据库中有3千多条这样的记录,每条记录中有地区中文名和地区英文名(如下图)

用redis的list数据结构来批量执行sql语句

我现在想用redis的队列lpush和rpop实现批量更新,sql语句我已经写好了(如下图)

用redis的list数据结构来批量执行sql语句

代码我是这样写的(如下图),我把3千多条sql语句存进list中(lpush),准备每次取出来一条执行(rpop),逐条执行,接下来不知道怎么写了,请教大家接下来怎么写,现在已经把sql语句放到了list中;还有我cli下查看list的值,中文好像有乱码(如下图),我启动cli时加了 --raw,请大家解答一下

用redis的list数据结构来批量执行sql语句

用redis的list数据结构来批量执行sql语句

谢谢大家~

回复内容:

现在数据库中有3千多条这样的记录,每条记录中有地区中文名和地区英文名(如下图)

用redis的list数据结构来批量执行sql语句

我现在想用redis的队列lpush和rpop实现批量更新,sql语句我已经写好了(如下图)

用redis的list数据结构来批量执行sql语句

代码我是这样写的(如下图),我把3千多条sql语句存进list中(lpush),准备每次取出来一条执行(rpop),逐条执行,接下来不知道怎么写了,请教大家接下来怎么写,现在已经把sql语句放到了list中;还有我cli下查看list的值,中文好像有乱码(如下图),我启动cli时加了 --raw,请大家解答一下

用redis的list数据结构来批量执行sql语句

用redis的list数据结构来批量执行sql语句

谢谢大家~

谢邀
其实不用redis就可以, 你把所有的SQL放在一个文件中, 读一条执行一条, 不就行了?

<code class="php">function getSql()
{
    $fp = fopen('sql.txt', 'r');
    while (!feof($fp)) {
        yield fgets($fp);
    }
}

foreach (getSql() as $sql) {
    executeSql($sql);
}

function executeSql()
{
    //执行语句
}</code>

<code>insert into base_region(region_name, en_name) values('中国','Zhongguo'), ('北京', 'Beijing'),...,('上海', 'Shanghai') on duplicate key update en_name = values(en_name);</code>

一句开销极小的sql就搞定(一个数据库连接,性能跟批量insert into数据差不多)。

需要注意两点:

  1. values(),(),(),() 中()的值需要你用for循环拼接好

  2. region_name 必须是唯一索引,你可以临时先对这个字段添加一个唯一索引,然后这个sql执行结束后,drop掉

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn