redis-管道
你客户端对着redis那台服务器里面的redis进程,如果想发很多的命令,然后其实每发一个命令都要走一次数据的传输,然后执行完返回;在计算机编程的时候,我们更多的会使用buff机制?就是为了减少这种没必要的调动来、调动去的一个过程,减少系统调用,减少网络IO
netcat(nc)是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接。
yum install nc.x86_64
可以用nc命令,开启一个socket连接,把批量命令用换行符来连接,一次执行多个命令;
[root@iZuf6ir4og87e245nh5ltuZ ~]# nc localhost 6379
set k1 qqq
+OK
^C
redis-cli
127.0.0.1:6379> get k1
"qqq"
Linux系统中有一个管道,然后直接连接nc可以连接到我们localhost 6379,这是之前讲的,这是一个连接,一个socket连接,socket打通之后,你可以一口气把所有的命令发过去,但是这时候注意了,命令与命令之间是要加上换行的;
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo -e "set k2 12 \n incr k2 \n get k2" | nc localhost 6379
+OK set成功
:13 加一操作返回13
$2 定义变量
13 get到13
| 是管道符,左右两边是新开的进程执行
管道
1.衔接两个命令,前一个的输出作为后一个的输入;
2.管道会触发创建子进程;
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $$ 输出当前进程PID
10335
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $BASHPID 输出当前进程PID
10335
//$$ $BASHPID 都输出当前进程PID
开辟子进程
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $$ | more
10335 //但是显示的还是当前进程PID,说明没有开启新的子进程,说明$$优先级高于|管道符,
先%%赋值为当前进程PID,在运算管道符
[root@iZuf6ir4og87e245nh5ltuZ ~]# echo $BASHPID | more
10357 //开启新的子进程PID, $BASHPID 优先级低于管道
[root@iZuf6ir4og87e245nh5ltuZ ~]#
Linux有父子进程,常规下,父子进程数据隔离,export命令可以让变量从父进程导入到子进程,子进程可以看到父进程变量,子进程只可以看到,父子进程修改互不影响
# tail -f test.sh
#!/bin/bash
echo $$
echo $num1
num1=999
echo num1:$num1
sleep 20
echo afterNUM1: $num1
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
1
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ((num1++))
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
2 //父进程为2
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ./test.sh &
[1] 10449
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# 10449
num1:999
afterNUM1: 999
^C
[1]+ Done ./test.sh
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# export num1 //子进程也可看到
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ./test.sh &
[1] 10451
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# 10451
2 //子进程读到2
num1:999 子进程修改成999
^C
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
2 父进程还是2 说明子进程修改不影响父进程
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# afterNUM1: 999
export $num1^C
[1]+ Done ./test.sh
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ./test.sh &
[1] 10459
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# 10459
2
num1:999
^C
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ((num1++))
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# ((num1++)) 父进程修改
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# echo $num1
4
[root@iZuf6ir4og87e245nh5ltuZ redis_test]# afterNUM1: 999 //父进程修改不影响子进程
^C
[1]+ Done ./test.sh