收藏列表放入MySQL还是redis_mysql导入redis

程序遍历MySQL然后插入Redis,效率极低。利用redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。可以把Mysql查询的内容格式化成redis-cli可用数据格式。

1, 根据表创建一个sql,将数据转换为redis可用的格式

(1) 表结构

96698916bf987141e416d28fb62e0bfd.png

(2) Redis的数据格式

*3\r\n 命令起始,定义共3个输入参数

$3\r\n 下一个参数字节长度

SET\r\n 命令参数

$3\r\n 下一个参数字节长度

key\r\n 变量参数

$5\r\n 下一个参数字节长度

value\r\n 值参数

注意:此处的\r\n为换行符,不是输入的字符。linux下导出文件分隔符是\r\n,而windows下是\n。

e20ce0016f9dd16c35bd5eb8bfc2a759.png

(3) 创建sql文件,sql语句是将数据转为redis可接收的语句

SELECT CONCAT(

"*4\r\n",

'$', LENGTH(redis_cmd), '\r\n',

redis_cmd, '\r\n',

'$', LENGTH(redis_key), '\r\n',

redis_key, '\r\n',

'$', LENGTH(hkey), '\r\n',

hkey, '\r\n',

'$', LENGTH(hval), '\r\n',

hval, '\r'

)

FROM (

SELECT

'HSET' as redis_cmd,

CONCAT('pid:' ,PID) AS redis_key,

ID AS hkey,

AREANAME AS hval

FROM td_area

) AS t

2,在有mysql客户端的机器执行命令

mysql -uroot -p123456 -h 127.0.0.1 database --skip-column-names --raw < /home/redis.sql | /usr/local/redis/bin/redis-cli -p 6380 --pipe

重要的mysql参数说明:

--raw: 使mysql不转换字段值中的换行符。

--skip-column-names: 使mysql输出的每行中不包含列名。

3fda6d5f88dc68c1ab6bfadb8f680762.png

然而在我的使用过程中发现了一个问题,由于业务关系,我的基础业务数据库中会存在空列,而这个又是关键数据,需要迁移到Redis中的。单纯利用上述的SQL语句,进行操作的时候,Redis-cli会抛出“Unknown Command NULL on Redis.”

我们知道,Redis是可以存储二进制数据的(而实际上Redis存储的Value都是二进制格式存储的),所以空数据理论上是可以存入的。然而根据观察,Redis的空数据,表现为空字符串形式,即“”。所以,我们需要将我们数据库中为NULL的数据,转换成为“”进行输出

SELECT CONCAT(

"*4\r\n",

\'$\', LENGTH(redis_cmd), \'\r\n\',

redis_cmd, \'\r\n\',

\'$\', LENGTH(redis_key), \'\r\n\',

redis_key, \'\r\n\',

\'$\', LENGTH(hkey), \'\r\n\',

hkey, \'\r\n\',

\'$\', LENGTH(hval), \'\r\n\',

hval, \'\r\'

)

FROM (

SELECT

\'HSET\' AS redis_cmd,

\'david\' AS redis_key,

myname AS hkey,

if(mymoney is not null, mymoney, '') AS hval

FROM david_lin

) AS t;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java markdown转word_一键将 Word 转换为 Markdown

李缘 | | Stata 连享会 (知乎 | 简书 | 码云方法一&#xff1a;Writage Pandoc -- 双剑合璧&#xff01;打开 Writage网页&#xff0c;点击Download&#xff0c;再点击Download Now完成下载网页下载运行安装程序&#xff0c;一般按照默认选项安装就好啦安装重启电脑&#xff0…

deepin安装java_Deepin安装Eclipse

Deepin安装Eclipse系统环境:Deepin 15.5软件环境:Eclipse 4.7官网下载最新版elipse(4.7)安装板或压缩版均启动失败(弹框报错)&#xff0c;原因是deepin默认安装的openjdk1.9的版本,而eclipse支持的最低版本为jdk1.8版本,本机又需要jdk1.7版本的,因此需要修改eclipse启动vm参数才…

简述java在安卓开发中的应用_Java 自定义注解在安卓开发中的简单运用

定义&#xff1a;注解(Annotation)&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、接口、枚举、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元素进行说…

java正则表达式 分词_[Java]使用正则表达式实现分词

手工分词稍嫌麻烦&#xff0c;不好维护&#xff0c;而利用正则表达式就利索多了。Java提供了java.util.regex.Matcher&#xff0c;java.util.regex.Pattern类来帮助我们实现此功能。例一&#xff1a;以下程序将把"This is a farm that that raises dairy cattle."中的…

as和java什么关系_深入理解happens-before和as-if-serial语义

概述本文大部分整理自《Java并发编程的艺术》&#xff0c;温故而知新&#xff0c;加深对基础的理解程度。指令序列的重排序我们在编写代码的时候&#xff0c;通常自上而下编写&#xff0c;那么希望执行的顺序&#xff0c;理论上也是逐步串行执行&#xff0c;但是为了提高性能&a…

java atomiclong 使用_Java并发AtomicLongArray类

全屏java.util.concurrent.atomic.AtomicLongArray类提供了可以原子读取和写入的底层long类型数组的操作&#xff0c;并且还包含高级原子操作。 AtomicLongArray支持对基础long类型数组变量的原子操作。 它具有获取和设置方法&#xff0c;如在变量上的读取和写入。 也就是说&am…

我的世界java版刷雪球机,我的世界手机版怎么刷雪球 无限刷雪球机

随着全球变暖&#xff0c;厄尔尼诺现象加剧&#xff0c;一些生活在亚热带的孩子越来越感受不到下雪的喜悦&#xff0c;雪场的票子也是难求&#xff01;不过不要着急&#xff0c;Minecraft给你模拟了一个生存的环境&#xff0c;在这里&#xff0c;你可以和好友联机打雪仗&#x…

php如何随机显示图片,php中随机显示图片的函数代码_php

/*********************************************** Filename : img.php* Author : freemousehttp://www.gaodaima.com/?p49284php中随机显示图片的函数代码_php* web : www.cnphp.info* email :freemouse1981gmail.com* Date : 2010/12/27* Usage:* * **********************…

oracle 8i漏洞渗透,一次通过Oracle8i入侵系统之旅(组图)

最近看了些有关Oracle的安全资料,看后随手做了一个渗透测试,把过程记录下来方便日后查阅.先用SuperScan4.0扫描下要测试的主机,速度很快,结果如图1所示:图 1端口 1521 是 Oracle 的 TNS Listener 默认监听的端口,通过扫描报告还可以看到Oracle的版本为8i.现在还不知道对方的操作…

linux系统安装serv u,建立第一个可用的FTP服务器

二、建立第一个可用的FTP服务器1、比如本机IP地址为“192.168.0.48”&#xff0c;已建立好域名“ftp.bbc.com”的相关DNS记录。2、打开Serv-U管理器。选上图的“Serv-U Administrator”&#xff0c;即出现“Setup Wizard”(设置向导)。此向导可以帮你轻松地完成基本设置&#x…

Linux配置scheme环境,用 Xcode Configuration 和 Scheme 配置项目环境

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;想象一个场景&#xff0c;我们正在开发一款支付系统&#xff0c;这个支付系统同时支持有Web版和原生的iOS APP版本。这个支付系统有三个环境&#xff1a;dev: 调用…

linux进入字符界面编程,MPlayer字符界面操作方法

一、启动播放时参数&#xff1a;在终端下敲入&#xff1a;./mplayer 提示各种使用帮助信息-vo 选择视频输出模式和设备(用-vo help查看列表)-ao 选择音频输出模式和设备(用-ao help查看列表)-ss 寻找指定的(多少秒或hh:mm:ss)位置-nosound 不播放声音-fs -vm -zoom …

linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...

Ubuntu 20.04将删除Amazon Web应用程序&#xff0c;原因就是这款应用很少有用户使用&#xff0c;但需要的用户也可另行安装。在过去的8年中&#xff0c;Amazon Web应用程序已成为Ubuntu桌面的一部分&#xff0c;现在&#xff0c;Ubuntu 20.04已决定退出。亚马逊网络启动器是在U…

linux下sqlmap安装教程,(转)Sqlmap官网下载与安装教程[windows/linux版本]

转自&#xff1a;http://www.vuln.cn/2000sqlmap的功能与强大性不必多言&#xff0c;方便大家下载&#xff0c;给大家整理了下sqlmap最新版的官网与github下载地址。官网下载地址github下载环境与安装windows系统环境安装windows下安装sqlmap需要python环境支持安装好后&#x…

linux gcc本地链接lib文件(c静态,动态),GCC中静态连接和动态连接的区别(LINUX下)...

最近正在学习库的用法&#xff0c;写了最基础的libmystring.a的库(里面只有一个add函数)&#xff0c;然后编写test程序测试add函数&#xff0c;用ar命令创建好libmystring.a库后&#xff0c;用以下命令编译静态连接的a.outgcc –static test.c –L ./ –lmystring –o a.out得到…

c语言 样例测试覆盖,白盒测试实例之十一——逻辑覆盖测试

逻辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖。从覆盖源代码的不同程度可以分为以下六个标准&#xff1a;语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。先看一下具体例子的源代码(C语言)&#xff1a…

ev3的c语言编程软件,乐高EV3编程软件教育版下载

乐高EV3编程软件教育版官方版是一款用于机器人编程的应用工具&#xff0c;乐高EV3编程软件教育版最新版可以通过可视化图标形式编程&#xff0c;用以控制机器人的各种动作指令&#xff0c;乐高EV3编程软件教育版操作起来比较简单&#xff0c;发挥你的想象&#xff0c;创造无限的…

android 4.0系统,全新Android 4.0系统_手机Android频道-中关村在线

与搭载Android 2.3系统的OPPO R807不同&#xff0c;OPPO R817搭载了Android 4.0系统。不过这款手机仍旧舍弃了Android系统的原生界面&#xff0c;因此两款手机在界面上的变化其实并不非常大。升级Android 4.0后界面变化不大内置多款主题与解锁样式可更改字体及SIM卡信息OPPO R8…

android清除图案锁 位置,安卓手机清除锁屏密码、锁屏图案的教程

来源&#xff1a;安卓网2014-01-21/12:15本文分享一个安卓手机清除锁屏密码以及锁屏图案的几种方法和详细教程。如果锁屏密码、或者图形锁屏密码忘记了怎么办&#xff0c;怎么清除呢?下面小编整理了3种安卓手机清除锁屏图案密码的方法。↓↓↓准备工作&#xff1a;1.确保已经安…

html5程序自动登录,Jtro的技术分享:网页调起unity的exe程序并自动登录

思路是这样&#xff1a;通过一个额外的exe文件来实现登录&#xff0c;并保存一个token文件&#xff0c;然后在unity的项目提交数据的时候读取这个token向服务器发送数据。下面是具体的方法&#xff1a;s这个需要用到WPF来编写&#xff0c;首先打开VS2017&#xff0c;选择创建WP…