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

來源:互聯網
上載者:User

現在資料庫中有3千多條這樣的記錄,每條記錄中有地區中文名和地區英文名(如)

我現在想用redis的隊列lpush和rpop實現批次更新,sql語句我已經寫好了(如)

代碼我是這樣寫的(如),我把3千多條sql語句存進list中(lpush),準備每次取出來一條執行(rpop),逐條執行,接下來不知道怎麼寫了,請教大家接下來怎麼寫,現在已經把sql語句放到了list中;還有我cli下查看list的值,中文好像有亂碼(如),我啟動cli時加了 --raw,請大家解答一下

謝謝大家~

回複內容:

現在資料庫中有3千多條這樣的記錄,每條記錄中有地區中文名和地區英文名(如)

我現在想用redis的隊列lpush和rpop實現批次更新,sql語句我已經寫好了(如)

代碼我是這樣寫的(如),我把3千多條sql語句存進list中(lpush),準備每次取出來一條執行(rpop),逐條執行,接下來不知道怎麼寫了,請教大家接下來怎麼寫,現在已經把sql語句放到了list中;還有我cli下查看list的值,中文好像有亂碼(如),我啟動cli時加了 --raw,請大家解答一下

謝謝大家~

謝邀
其實不用redis就可以, 你把所有的SQL放在一個檔案中, 讀一條執行一條, 不就行了?

function getSql(){    $fp = fopen('sql.txt', 'r');    while (!feof($fp)) {        yield fgets($fp);    }}foreach (getSql() as $sql) {    executeSql($sql);}function executeSql(){    //執行語句}

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

一句開銷極小的sql就搞定(一個資料庫連接,效能跟批量insert into資料差不多)。

需要注意兩點:

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

  2. region_name 必須是唯一索引,你可以臨時先對這個欄位添加一個唯一索引,然後這個sql執行結束後,drop掉

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.