redis慢查询、事务、发布订阅,字符串位操作
2018-06-17 本文已影响25人
打伞的Fish
通过这这篇文章你会知道如下内容:
-
慢查询是什么?如何配置?
-
如何多次间隔的执行命令?如何测试redis客户端到网络端延时?如何寻找占内存较大的键?
-
如何查看redis实时增量的统计信息
-
如何利用lua脚本制造批量的原子命令组合,如何执行lua脚本(这个需要度娘)
-
如何对字符串进行位操作?
-
了解HyperLogLog如何使用以及如何节省内存(这个也需要度娘)
-
简单的发布和订阅消息如何实现?
慢查询
redis的慢查询是分析命令执行这个步骤的执行情况
1.慢查询的配置
-
slowlog-log-slower-than 默认10000 单位微妙
如果它的执行时间超过了10000微秒, 那么它将被记录在慢查询日志中。
如果slowlog-log-slower-than=0会记录所有的命令, slowlog-log-slowerthan<0对于任何命令都不会进行记录。
-
slowlog-max-len 列表最大长度
redis是使用一个列表来存储慢查询的日志,超过列表长度,最早插入的会被移除
-
修改慢查询配置
1、修改配置文件
2、动态设置
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite 持久到本地配置文件
-
查询慢日志
slowlog get [n]
日志的长度 slowlog len,,,清除日志 slowlog reset
redis-cli参数说明
-
-r (repeat) 命令执行多次 redis-cli -r 3 ping
-
-i (interval)每隔几秒执行一次,单位秒,与-r搭配使用 redis-cli -r 5 -i 1 ping
-
-x从标准输入(stdin) 读取数据作为redis-cli的最后一个参数
echo "world" | redis-cli -x set hello
-
-c 连接Redis Cluster节点时需要使用的, -c选项可以防止moved和ask异常
-
-a 如果Redis配置了密码, 可以用-a(auth) 选项, 有了这个选项就不需要手动输入auth命令。
-
--bigkeys选项使用scan命令对Redis的键进行采样, 从中找到内存占用比较大的键值
-
--latency 网络延迟测试
latency有三个选项, 分别是--latency、 --latency-history、 --latency-dist
dist是图表的方式 ,history是分时输出, latency 只有一条结果
-
--stat 输出一些增量的实时统计信息
-
--no-raw选项是要求命令的返回结果必须是原始的格式, --raw恰恰相反, 返回格式化后的结果
事务
-
将一组命令放到multi与exec之间,这之间的命令才是院子顺序执行的
-
语法错误会造成事务无法执行,但是运行错误不会,出错之前的命令会正常执行,所以不会造成事务回滚,,redis是不支持事务回滚的
-
在开始事务之前,如果某个值在事务执行中没有被修改,则执行事务,否则不执行,这种应用场景就可以通过watch key进行使用
Bitmaps
对字符串的位进行操作,可以看似为一种以位为单位的数组,只能存储0和1,数组的下标在Bigmaps叫做偏移量offset
-
设置值 / 获取值
setbit key offset value 返回的是原先的位置的值---------------------- gitbit key offset
-
统计字节数直接的结果
bitcount key [start][end]
start是代表字节数开始,setbit是操作位。1byte = 8 bit 所以统计的时候,要算好统计多少个字节,而不是位数
-
两个bitmaps的逻辑操作
bitop op destkey key[key....]
op可以是and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中
-
计算Bitmaps中第一个值为targetBit的偏移量
bitpos key targetBit [start] [end]
[start]和[end], 分别代表起始字节和结束字节
发布和订阅
-
发布消息与订阅消息
publish channel message subscribe channel [channel ...]
客户端在执行订阅命令之后进入了订阅状态, 只能接收subscribe、psubscribe、 unsubscribe、 punsubscribe的四个命令。
新开启的订阅客户端, 无法收到该频道之前的消息, 因为Redis不会对发布的消息进行持久化。这种订阅和发布方式简单,如果可以接受这些缺点,可以考虑使用
-
查询活跃的频道
pubsub channels [pattern]
-
查看频道的订阅数
pubsub numsub [channel ...]
-
按照模式订阅和取消订阅