如果新闻数据量不大,在系统启动前直接灌入,如手工一次性批量插入缓存数据。
- 写个 PHP 脚本(其他语言均可实现)、写个 shell 脚本来完成。
- redis 批量插入数据(pipe mode),可以根据redis协议的格式生成出一个文件,然后批量导入。
set news101 newscontent EX 200 拆分成redis格式就是(注意换行是\r\n): *5 // 按空格拆分有几段 $3 // “set”的字符串长度 set $7 // “news101”的字符串长度 news101 $11 // “newscontent”的字符串长度 newscontent $2 EX $3 200
本地(127.0.0.1)myql redis库 news表,结构内容如下:
news.sql文件内容如下:
select concat('*5','\r\n','$3','\r\n','set','\r\n','$',LENGTH(news_id)+4,'\r\n','news',news_id,'\r\n','$',LENGTH(news_title),'\r\n',news_title,'\r\n','$2','\r\n','EX','\r\n','$3','\r\n','200','\r') from news order by news_id
直接在 navicat 里执行可看到如下结果:
-
在命令行执行以下命令:
mysql -h 127.0.0.1 -uroot -proot -D redis --skip-column-names --raw < news.sql | redis-cli --pipe
--skip-column-names 不显示列名 --raw 原生输出,不做任何转义
查看redis(--raw 输出中文):
redis-cli --raw 127.0.0.1:6379> keys * news102 news104 news9012 news101 news103 127.0.0.1:6379> get news9012 我很长 127.0.0.1:6379>