🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、慢查询 * 客户端请求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 | | 获取指定位置范围内的地理位置信息集合 | |