首頁  >  文章  >  後端開發  >  用redis的list資料結構來批次執行sql語句

用redis的list資料結構來批次執行sql語句

WBOY
WBOY原創
2016-09-01 00:20:162144瀏覽

現在資料庫中有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掉

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn