Redis小功能特性

·慢查询分析:通过慢查询分析,找到有问题的命令进行优化。

·Redis Shell:功能强大的Redis Shell会有意想不到的实用功能。

·Pipeline:通过Pipeline(管道或者流水线)机制有效提高客户端性能。

·事务与Lua:制作自己的专属原子命令。

·Bitmaps:通过在字符串数据结构上使用位操作,有效节省内存,为开

发提供新的思路。

·HyperLogLog:一种基于概率的新算法,难以想象地节省内存空间。

·发布订阅:基于发布订阅模式的消息通信机制。

·GEO:Redis3.2提供了基于地理位置信息的功能。

3.1 慢查询分析

Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决这两个问题。从字面意思就可以看出,slowlog-log-slower-than就是那个预设阀值,它的单位是微秒(1秒=1000毫秒=1000000微秒),默认值是10000,假如执行了一条“很慢”的命令(例如keys*),如果它的执行时间超过了10000微秒,那么它将被记录在慢查询日志中。

如果slowlog-log-slower-than=0会记录所有的命令,slowlog-log-slower-than<0对于任何命令都不会进行记录。从字面意思看,slowlog-max-len只是说明了慢查询日志最多存储多少条,并没有说明存放在哪里?实际上Redis使用了一个列表来存储慢查询日志,slowlog-max-len就是列表的最大长度。一个新的命令满足慢查询条件时被插入到这个列表中,当慢查询日志列表已处于其最大长度时,最早插入的一个命令将从列表中移出,例如slowlog-max-len设置为5,当有第6条慢查询插入的话,那么队头的第一条数据就出列,第6条慢查询就会入列。

在Redis中有两种修改配置的方法,一种是修改配置文件,另一种是使用config set命令动态修改。例如下面使用config set命令将slowlog-log-slower-than设置为20000微秒,slowlog-max-len设置为1000:

config set slowlog-log-slower-than 20000

config set slowlog-max-len 1000

config rewrite

slowlog get

slowlog len

slowlog reset

3.2 Redis Shell

redis-cli详解:

redis-cli --help查看帮助

-r(repeat)选项代表将命令执行多次

-i(interval)选项代表每隔几秒执行一次命令

-a(auth)选项,有了这个选项就不需要手动输入auth命令

--scan选项和--pattern选项用于扫描指定模式的键,相当于使用scan命令

-slave选项是把当前客户端模拟成当前Redis节点的从节点,可以用来获取当前Redis节点的更新操作

--rdb选项会请求Redis实例生成并发送RDB持久化文件,保存在本地。可使用它做持久化文件的定期备份

--pipe选项用于将命令封装成Redis通信协议定义的数据格式,批量发送给Redis执行

--bigkeys选项使用scan命令对Redis的键进行采样,从中找到内存占用比较大的键值,这些键可能是系统的瓶颈

--eval选项用于执行指定Lua脚本

--latency、--latency-history、--latency-dist。它们都可以检测网络延迟,对于Redis的开发和运维非常有帮助

--stat选项可以实时获取Redis的重要统计信息,虽然info命令中的统计信息更全,但是能实时看到一些增量的数据(例如requests)对于Redis的运维还是有一定帮助的

--no-raw选项是要求命令的返回结果必须是原始的格式,--raw恰恰相反,返回格式化后的结果。如果使用了--raw选项,将会返回中文,原始格式。

redis-server详解:

redis-server --test-memory可以用来检测当前操作系统能否稳定地分配指定容量的内存给Redis。

redis-benchmark详解:

-c(clients)选项代表客户端的并发数量(默认是50)

-n(num)选项代表客户端请求总量(默认是100000)

例如redis-benchmark-c100-n20000代表100各个客户端同时请求Redis,一共执行20000次。redis-benchmark会对各类数据结构的命令进行测试,并给出性能指标。

-q选项仅仅显示redis-benchmark的requests per second信息

使用-r(random)选项,可以向Redis插入更多随机的键

-P选项代表每个请求pipeline的数据量(默认为1)

-k选项代表客户端是否使用keepalive,1为使用,0为不使用,默认值1

-t选项可以对指定命令进行基准测试

--csv选项会将结果按照csv格式输出,便于后续处理,如导出到Excel等

3.3 Pipeline

Pipeline(流水线)机制能改善上面这类问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端。

原生批量命令与Pipeline对比:

·原生批量命令是原子的,Pipeline是非原子的。

·原生批量命令是一个命令对应多个key,Pipeline支持多个命令。

·原生批量命令是Redis服务端支持实现的,而Pipeline需要服务端和客户端的共同实现。

3.4 事务与Lua

Redis提供了简单的事务功能,将一组需要一起执行的命令放到multi和exec两个命令之间。multi命令代表事务开始,exec命令代表事务结束,它们之间的命令是原子顺序执行的。Redis提供了简单的事务,之所以说它简单,主要是因为它不支持事务中的回滚特性,同时无法实现命令之间的逻辑关系计算。

Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,Redis将Lua作为脚本语言可帮助开发者定制自己的Redis命令。

在Redis中执行Lua脚本有两种方法:eval和evalsha。

3.5 Bitmaps

·Bitmaps本身不是一种数据结构,实际上它就是字符串(如图3-10所示),但是它可以对字符串的位进行操作。

·Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。

3.6 HyperLogLog

HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。HyperLogLog提供了3个命令:pfadd、pfcount、pfmerge。

3.7 发布订阅

publish channel message

subscribe channel [channel ...]

·客户端在执行订阅命令之后进入了订阅状态,只能接收subscribe、psubscribe、unsubscribe、punsubscribe的四个命令。

·新开启的订阅客户端,无法收到该频道之前的消息,因为Redis不会对发布的消息进行持久化。

和很多专业的消息队列系统(例如Kafka、RocketMQ)相比,Redis的发布订阅略显粗糙,例如无法实现消息堆积和回溯。但胜在足够简单,如果当前场景可以容忍的这些缺点,也不失为一个不错的选择。

3.8 GEO

Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需要实现这些功能的开发者来说是一大福音。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容