redis拥有五种数据类型,不同类型的数据有不同的特性,恰当的使用可以实现很多特别的功能,除此之外,redis自身也封装了或者支持一些特殊的操作,可以称为redis的高级功能。
redis基本数据结构和应用场景介绍可以参考之前的博客
redis高级功能很多,这里只准备记录如下几种:
管道
事务
发布/订阅
过期
布隆过滤器
管道
个人理解,管道操作应该不算redis独有的特性,只是它也支持而已。
redis是基于客户端-服务端的TCP服务,通常一个客户端向服务端发起请求并监听socket返回,这个过程是阻塞模式,会等待服务端响应了才能进行下一个操作。
这种模式在同一个客户端多次操作的情景下,交互次数也非常多,redis管道实际就是把多个客户端操作请求一次发送给服务端,然后服务端再一次返回,有点像打包传送的过程。
少了交互次数,从某种意义上来讲,是能提升性能的。
redis管道操作基本命令如下,使用到了linux的echo和nc命令:
1 | echo -e "set k1 123456\nget k1" | nc loalhost 6379 |
上边示例中就是给redis的k1设值为123456,然后再get出k1的值,两个操作一次发送个服务端,使用nc建立tcp连接交互。
操作本身比较简单,但是需要知道echo和nc的一些用法,我也刚好借此机会多了解一点。
一开始我对echo的了解其实就是写文件,因为本身用的也不多,但是仔细了解了一下,发现echo能做的事其实蛮多的
echo输出到命令行
1 | echo "test" |
以上两个命令实际效果是一样的,都会在命令行界面输出echo后边的字符串内容,这应该也是echo最简单的用法了。
echo写入到文件
1 | echo test> test.txt |
echo追加到文件
1 | echo test>> test.txt |
echo转义
1 | echo -e "set k1 2\nget k1" |
这里-e参数用来处理转义,上边示例其实就是一开始redis管道操作示例内容,引号中间的\n
是换行符的意思,加了-e参数就会解析成换行。
echo使用变量输出
这个地方其实是要写linux脚本的,以下是简单shell脚本示例,例如有一个文件叫test.sh,内容如下:
1 | #!/bin/sh |
执行上述shell脚本,就会先让输入一个内容,赋值给变量name,之后会在下一行输出。
chmod文件权限
在上边实例中,要模拟echo使用变量并输出,又使用到了简单的shell脚本,而脚本文件在初始创建的时候是只有读写权限的,不能执行,因此就需要chmod命令为文件修改权限,刚好也再补充一下这个命令相关的一些知识。
文件权限一般使用八进制数字或者英文字符表示:
4代表可读,字符r;
2代表可写,字符w;
1代表可执行,字符x;
0代表无权限,字符-;
例如要给文件test.sh赋予所有用户可读可写可执行的权限,如下三个命令都可以,作用 一样,不过看起来数字方式最方便:
1 | chmod 777 test.sh; |
u代表文件所属用户
g代表文件所属用户组
o代表其他用户
nc
上述管道操作还用到了nc命令,nc是netcat的命令,和echo一样也有很多参数和用法,不加参数默认建立一个tcp连接,例如:
1 | nc 127.0.0.1 6379 |
上述操作会以tcp方式连接到本地的redis服务,之后我们可以进行像redis-cli进入redis客户端之后的操作一样的操作。
nc除了建立普通连接,还有一个很方便的功能就是传输文件,一方建立tcp连接接收,一方建立tcp连接传送,接收方使用-l参数监听,实例如下:
1 | nc -l 9999 > t.txt |
服务端发送示例如下:
1 | nc localhost 999 <a.txt |
nc参数较多,非专业运维可能用到的就不会太多,如果想更详细的了解,更多nc参数和用法内容可参考如下链接中的内容: