redis-管道

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值