mysql redis 管道_redis通信协议及与mysql互通

2ff34e647e2e3cdfd8dca593e17d9b0a.pnghttps://redis.io/topics/protocol

redis-cli命令与redis通信协议

redis-cli命令

redis命令在从提交到返回处理结果的过程中,消耗的时间我们称之为RTT(往返时间)。在需要批量执行redis 命令的场景下,如果命令单条逐个执行,那么总共花费的时间是命令条数 N * RTT。redis 提供了管道技术来提高批量执行效率,即将多个命令打包发送给redis服务端,所有命令执行完后,再将所有结果打包返回。在所有命令执行结束前,redis服务器会缓存已执行结束的结果。

在redis-cli命令行中,使用redis管道技术时,我们通常将待执行的命令放到一个文本里,比如commands.txt,然后使用命令:cat commands.txt | redis-cli --pipe

去读取文本里的命令,然后打包已pipe管道的方式发送给redis服务端。

其他命令见5ddcaf45e2325.png

redis通信协议

Redis服务器与客户端通过RESP(REdis Serialization Protocol)协议通信。协议用 rn 做间隔。对于简单的字符串,以 + 开头,例如 :+OKrn。对于错误消息,以 - 开头 ,例如:-ERR unknown command 'foobar'rn

-WRONGTYPE Operation against a key holding the wrong kind of valuern

对于整数,以:开头,例如::100rn

对于大字符串,以$开头,接着跟上字符串长度的数字。 最长512MB 。 例如:$6rnfoobarrn 代表一个长6的字符串, foobar

$0rnrn 长度为0 的空字符串

$-1rn Null

对于数组, 以 * 开头, 接上数组元素个数。 加数组元素*0rn 一个空的数组

*2rn$3rnfoorn$3rnbarrn 一个有两个元素的数组 foo bar

数组可以有更多复杂的用法,具体的建议去看官方文档。此处就不一一介绍了

go与redis通信(2018年补充)func main() {

tcpAddr, err := net.ResolveTCPAddr("tcp4", "10.2.1.30:6379")

conn, err := net.DialTCP("tcp", nil, tcpAddr)

if err != nil {

fmt.Println(err, conn)

return

}

req := "*3rn" +

"$3rn" +

"setrn" +

"$3rn" +

"foorn" +

"$3rn" +

"barrn"

conn.Write([]byte(req))

req = "*2rn" +

"$3rn" +

"getrn" +

"$3rn" +

"foorn"

buffer := make([]byte, 2048)

conn.Write([]byte(req))

time.Sleep(10 * time.Millisecond)

conn.Read(buffer)

fmt.Println(string(buffer))

}

mysql数据导入redis

mysql数据导入redis

创建表DROP TABLE IF EXISTS `t_area`;

CREATE TABLE `t_area` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`pid` int(11) NOT NULL,

`areaname` varchar(255) NOT NULL,

`arealevel` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of t_area

-- ----------------------------

INSERT INTO `t_area` VALUES ('1', '0', '北京', '0');

INSERT INTO `t_area` VALUES ('2', '0', '上海', '0');

INSERT INTO `t_area` VALUES ('3', '0', '广州', '0');

INSERT INTO `t_area` VALUES ('4', '0', '深圳', '0');

INSERT INTO `t_area` VALUES ('5', '0', '杭州', '0');

编写脚本SELECT CONCAT(

"*4rn",

'$', LENGTH(redis_cmd), 'rn',

redis_cmd, 'rn',

'$', LENGTH(redis_key), 'rn',

redis_key, 'rn',

'$', LENGTH(hkey), 'rn',

hkey, 'rn',

'$', LENGTH(hval), 'rn',

hval, 'r'

)

FROM (

SELECT

'HSET' as redis_cmd,

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

id AS hkey,

areaname AS hval

FROM t_area

) AS t;

测试脚本mysql -uroot -p -h mysql服务器所在ip 数据库名 --skip-column-names --raw < redis.sql

正式执行mysql -uroot -p -h mysql服务器所在ip 数据库名 --skip-column-names --raw < redis.sql |/usr/local/redis-3.2.12/bin/redis-cli -p 6379 --pipe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值