首先需要构造数据的基本格式,如命令
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(); }
执行该脚本:
查看结果: