Redis 从入门到入土⑦:高级特性

一、慢查询

1. Redis 请求过程

慢查询发生在 执行命令阶段
image.png

2. 结构

保存在内存中的长度固定的 先进先出队列
image.png

3. 配置

slowlog-max-len: 最大长度,默认为 128
slowlog-log-slower-than=1000: 超过 1s 则加入慢查队列中,默认为 10000

1
2
3
// 动态配置
config set slowlog-max-len 1000
config set slowlog-log-slower-than=10000

4. 命令

slowlog get [n]: 获取慢查询队列,n 为条数
slowlog len: 获取慢查询队列长度
slowlog reset: 清空慢查询队列

二、流水线(pipeline)

作用: 解决批量执行 hset、hget 等操作的问题
非原子命令
只能作用在一个 Redis 节点上
例:

1
2
3
4
5
6
7
8
Jedis jedis = new Jedis("127.0.0.1", 6379);
for (int i = 0; i < 100; i++) {
Pipeline pipeline = jedis.pipelined();
for (int j = i * 100; j < (i + 1) * 100; j++) {
pipeline.hset("hashkey:" + j, "field" + j, "value" + j);
}
pipeline.syncAndReturnAll();
}

三、位图(Bitmap)

setbit key offset value: 给位图指定索引设置值,返回之前位的值
例:
image.png
image.png
get key offset: 返回位图指定索引的值
bitcount key [start] [end]: 获取位图指定范围值为 1 的个数
bitops key targetBit [start] [end]: 计算位图指定范围内第一个值等于 targetBit 的位置
bitop op destkey key [key…]: 把多个 Bitmap 的 与、或、非、异或 操作的结果保存在 destkey 中

  • op: and(与)、or(或)、not(非)、xor(异或)

四、HyperLogLog

概述: 以极小的空间统计独立数量,本质还是 string 类型

1. 命令

pfadd key element [element…]: 添加元素
pfcount key [key…]: 计算总数
pfmerge destkey key [key…]: 合并多个 hyperloglog

2. 缺陷

错误率: 0.81%

五、GEO

概述: 地理信息定位。存储经纬度,计算两地距离和范围等,本质是 zset 类型

1. 命令

geo key longitude latitude member [longitude latitude member…]: 添加地理位置信息
geopos key member: 获取地理位置信息
geodist key member1 member2 [unit]: 获取两个地理位置的距离

  • unit: m、km、mi、ft