第3章 小功能大用处
3.1 慢查询分析
两个参数
- slowlog-log-slower-than:单位是微秒,默认是10000
- slowlog-max-lan:列表最大长度
3.2 Redis Shell
3.2.1 redis-cli
- redis-cli -r(repeat):执行多次。
- redis-cli -i(interval):每隔几秒执行一次命令。
- redis-cli -x:从标准输入读取数据作为 redis-cli 最后一个参数。
- redis-cli -c(cluster):连接 Redis Cluster 时使用。
- redis-cli -a(auth):配置了密码时使用。
- redis-cli --scan,–pattern:用于扫描指定模式的键,相当于使用 scan 命令。
- redis-cli --slave:把当前客户端拟做当前 Redis 节点的从节点。
- redis-cli --rdb:生成 RDB 持久化文件,保存在本地。
- redis-cli --pipe:用于将命令封装成 Redis 通信协议定义的数据格式。
- redis-cli --bigkeys:使用 scan 命令对 Redis 的键进行采样,从中找到内存占用比较大的键。
- redis-cli -eval:用于执行指定脚本。
- redis-cli -latency:检测网络延迟
- redis-cli -stat:实时获取 Redis 重要的统计信息。
- redis-cli --raw,–no-row:要求命令返回的结果必须是(不是)原始格式。
3.2.2 redis-server
3.2.3 redis-benchmark
3.3 Pipeline
原生批量命令与Pipeline对比:
原生批量命令 | Pipeline |
---|---|
原子性 | 非原子的 |
一个命令对应多个key | 支持多个命令 |
Redis 服务端实现 | Redis 服务端,客户端共同实现 |
不能滥用Pipeline
3.4 事务与Lua
3.4.1 事务
multi
~
~
~
exec #执行事务
discard #取消事务
watch #监听
Redis 不支持回滚功能
3.4.2 Lua 语法
3.4.3 Redis 与 Lua
eval
evalsha
Lua 脚本功能的三个好处:
- 原子执行
- 定制命令
- 减少网络开销
脚本管理操作:
- script load script
- script exists shal
- script flush
- scropt kill
3.5 Bitmaps
- Bitmaps 本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。
- 可以把 Bitmaps 想象成以位为单位的数组,数组的下标在 Bitmaps 称为偏移量。
命令:
- 设置值
setbit key offset value
- 获取值
getbit key offset
- 获取 Bitmaps 指定范围为1的个数
bitcount key [start end]
- Bitmaps 之间的运算
bitop op destkey key [key...]
- 计算 Bitmaps 中第一个值的偏移量
bitpos key targetBit [start] [end]
3.6 HyperLogLog
不是一种数据结构,而是一种基数算法。
集合操作。
三个命令:
pfadd
pfcount
pfmerge
HyperLogLog 内存占用很少,但是存在一定的误差,官方说法是0.81%。
3.7 发布订阅
命令:
- 发布消息
publish channel message
- 订阅消息
subscribe channel [channel...]
-
客户端在执行订阅命令后进入订阅状态,只能接收 subscribe,psubscribe,unsubscribe,punsubscribe。的四个命令
-
Redis 不会对发布的消息进行持久化。
- 取消订阅
unsubscribe [channel [channel...]]
- 按照模式订阅和取消订阅
psubscribe pattern [pattern...]
punsubscribe pattern [pattern [pattern...]]
- 查询订阅
pubsub channels [pattern]
3.8 GEO
地理信息定位
命令:
- 添加地理位置信息
geoadd key longitude latitude member [longitude latitude member...]
- 获取地理位置信息
geopos key member [member...]
- 计算两个位置之间的距离
geodist key member1 member2 [unit]
unit 代表返回加过的单位
- m:米
- km:千米
- mi:英里
- ft:尺
- 获取指定位置范围内的地理位置信息集合
georadius key longitude latitude
georadiusbymember key member radiusm [unit]
- 获取 geohash
geohash key member [member...]
- 删除地理位置信息
zrem key member
GEO 没有提供删除成员的命令,因为 GEO 底层实现是zset,所以可以借用 zrem 命令实现地理位置信息的删除操作。