## 一、慢查询
* 客户端请求redis的生命周期
![](https://box.kancloud.cn/38a7625b4afc0d21c8c69ddc31b0acfc_976x380.png)
* 配置参数
* slowlog-max-len
* 慢查询日志是一个先进先出队列;
* 队列长度是固定的,超出长度是消失;
* 保存在内存中,重启会消失。
* 默认值:128
* 推荐值:1000
* slowlog-log-slower-than
* 慢查询阈值(单位:微妙),当命令大于多少的时候,将它记录在慢查询的范围内。
* slowlog-log-slower-than = 0 ,记录所有命令
* slowlog-log-slower-than < 0 ,不记录任何命令
* 默认值:10000
* 推荐: 1ms
* 理解命令生命周期
* 定期持久化慢查询
* 慢查询命令
* slowlog get [n] : 获取慢查询队列
* slowlog len : 获取慢查询队列长度
* slowlog reset:清空慢查询队列
## 二、pipeline
![](https://box.kancloud.cn/46f442383ba26cc96edd77a4c93d28d3_716x480.png =400x260)
![](https://box.kancloud.cn/4ff76f76ae7f4f9b67e55ea10c122c7a_728x488.png =400x260)
![](https://box.kancloud.cn/b0ac5ebdd0b476a6b7540a2f17dae3aa_747x526.png =400x260)
* 流水线的作用
| 命令 | N个命令操作 | 1次pipeline(N个命令) |
| --- | --- | --- |
| 时间 | N次网络 + N次命令 | 1次网络 + N次命令 |
| 数据量 | 1条命令 | N条命令 |
* 注意
* Redis的命令时间是微妙级别。
* pipeline每次条数要控制(网络)。
* 注意每次pipeline携带数据量
* pipeline每次只能作用在一个redis节点上
* M操作玉pipline的区别
* php-redis-pipeline 命令 multi (事务)
~~~php
$ret = $redis->multi()
->set('key1', 'val1')
->get('key1')
->set('key2', 'val2')
->get('key2')
->exec();
//$ret == array (
// 0 => TRUE,
// 1 => 'val1',
// 2 => TRUE,
// 3 => 'val2');
~~~
## 三、发布订阅
* 角色
* 发布者(publisher) 是redis-cli
* 订阅者(subscriber) 是redis-cli
* 频道(channel) 在Redis Server内
![](https://box.kancloud.cn/cff7f8f6b7e70e74513437633331c097_966x440.png =480x210)
`当发布者往频道中发送消息,订阅此频道的订阅者,可以接收到信息。类似于群聊`
`消息队列是抢,只有一个用户接收信息。发布订阅是所有人接收到`
* 命令
| 名称 | 范例 | 说明 |
| --- | --- | --- |
| publish | publish( $channel, $message ) | 发布,channel频道,message消息 |
| subscribe | subscribe( $channels, $callback ) | 订阅,接收频道信息,案例如下。|
| unsubcribe | | 取消订阅 |
~~~
function f($redis, $chan, $msg) {
switch($chan) {
case 'chan-1':
...
break;
case 'chan-2':
...
break;
case 'chan-2':
...
break;
}
}
$redis->subscribe(array('chan-1', 'chan-2', 'chan-3'), 'f'); // subscribe to 3 chans
~~~
## 四、位图bitmap
## 五、HyperLogLog
* 数据结构
* 基于HyperLogLog算法:极小空间完成独立数量统计
* 本质还是字符串
* 命令
| 名称 | 范例 | 说明 |
| --- | --- | --- |
| pfadd | | 添加元素 |
| pfcount | | 计算hyperloglog的独立总数 |
| pfmerge | | 合并多个hyperloglog |
## 六、GEO
* redis 3.2 新增
* 地理信息定位:存储经纬度,计算两地距离,范围计算等;
* 应用场景
* 微信摇一摇
* 附近酒店餐馆
* 命令
| 名称 | 范例 | 说明 |
| --- | --- | --- |
| geopos | | 获取地理位置信息 |
| geodist | | 获取两个地理位置的距离 |
| georadius | | 获取指定位置范围内的地理位置信息集合 |
|