redis常用高级功能小记(上篇)

redis拥有五种数据类型,不同类型的数据有不同的特性,恰当的使用可以实现很多特别的功能,除此之外,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
2
3
echo "test"

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
2
3
4
5
#!/bin/sh

read name

echo "$name is me"

执行上述shell脚本,就会先让输入一个内容,赋值给变量name,之后会在下一行输出。

chmod文件权限

在上边实例中,要模拟echo使用变量并输出,又使用到了简单的shell脚本,而脚本文件在初始创建的时候是只有读写权限的,不能执行,因此就需要chmod命令为文件修改权限,刚好也再补充一下这个命令相关的一些知识。

文件权限一般使用八进制数字或者英文字符表示:

4代表可读,字符r;
2代表可写,字符w;
1代表可执行,字符x;
0代表无权限,字符-;

例如要给文件test.sh赋予所有用户可读可写可执行的权限,如下三个命令都可以,作用 一样,不过看起来数字方式最方便:

1
2
3
4
5
chmod 777 test.sh;

chmod u=rwx,g=rwx,o=rwx test.sh

chmod ugo=rwx 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参数和用法内容可参考如下链接中的内容:

https://www.cnblogs.com/guge-94/p/10719016.html

推荐文章