zoukankan      html  css  js  c++  java
  • Redis利用管道批量插入数据

    首先需要构造数据的基本格式,如命令  

    hmset news105 news_title title105 news_content content105 news_views 28 

    拆分成以下格式:

    *8   // 按空格拆分有几段 
    $5   // 代表 hmset 的字符长度
    hmset
    $7   // 代表 news105 的字符长度,以此类推·
    news105
    $10
    news_title
    $8
    title105
    $12
    news_content
    $10
    content105
    $10
    news_views
    $2
    28

    利用 MySQL 构造数据

    数据表(news)结构:

    利用 sql 拼接数据(news.sql):

    select concat('*8','
    ','$5','
    ','hmset','
    ','$',LENGTH(news_id)+4,'
    ','news',news_id,'
    '
    ,'$10','
    ','news_title','
    ','$',LENGTH(news_title),'
    ',news_title,'
    ','$12','
    ','news_content','
    '
    ,'$',LENGTH(news_content),'
    ',news_content,'
    ','$10','
    ','news_views','
    ','$',LENGTH(news_views),'
    ',news_views
    ,'
    ')
    from news order by news_views desc limit 0,5

    导出 sql 执行结果(news):

    mysql -uroot -p123456 -D 数据库名 --skip-column-names --raw < news
    • --skip-column-names:不显示列名
    • --raw:原生输出,不做任何转义

    至此,数据构造完毕。批量插入 redis:

    cat news | redis-cli --pipe

    查看结果:

    利用 PHP 脚本构造数据

    preheat.php:

    <?php
    
    $redis = new Redis();
    $redis->connect('Redis服务端IP',6379);
    
    $redis->multi(Redis::PIPELINE);
    $newsPreData = getDataBySQL("select news_id,news_title,news_views from news order by news_views desc limit 0,5");
    
    foreach($newsPreData as $row)
    {
        $key="news".$row["news_id"]; // 拼接key
        // 批量插入
        $redis->hMset($key, [
            "news_id"=>$row["news_id"],
            "news_title"=>$row["news_title"],
            "news_views"=>$row["news_views"]
        ]);
        $redis->expire($key, 200);
    }
    
    $redis->exec();
    echo "done...".PHP_EOL;
    
    // 从数据库读取
    function getDataBySQL(String $sql) {
        $dsn = 'mysql:host=MySQL服务端IP;dbname=redis';
        $pdo=new PDO($dsn, "root", "123456");
        $sth = $pdo->prepare($sql);
        $sth->execute();
        $sth->setFetchMode(PDO::FETCH_ASSOC);
        return $sth->fetchAll();
    }

    执行该脚本:

    查看结果:

  • 相关阅读:
    bzoj2555-SubString
    离散对数
    xsy1436-括号游戏
    bzoj1143-祭祀
    连通分量
    bzoj3864-hdu4899-Hero meet devil
    bzoj3238-差异
    poj1065-Wooden Sticks
    多项式除法
    JavaScript 对象
  • 原文地址:https://www.cnblogs.com/tangxuliang/p/10120369.html
Copyright © 2011-2022 走看看