Redis 其它相关功能
Redis客户端
- java客服端 Jedis
- python客户端 redis-py
Client地址: https://redis.io/clients#python
GitHub地址:https://github.com/andymccurdy/redis-py
慢查询
- 请求过程: 发送命令 -> 排队 -> 执行命令 ->返回结果
- 慢查询发生在第三阶段,执行命令
- 慢查询是客服端超时的一个可能
慢查询其实是一个先进先出的队列,固定长度,保存在内存内
慢查询两个配置
# 慢查询最大长度,默认为128
slowlog-max-len = 128
# 慢查询阈值(微妙),默认 10000;意思时在多长时间内,规定为慢查询 等于0记录所有的命令;少于0不急了任何命令。
slowlog-log-slower-than = 10000
慢查询两个队列
# 获取慢查询队列
slowlog get [n]
# 获取慢查询队列长度
slowlog len
运维经验
- slowlog-max-len 不要设置过大,默认10ms,通常设置1ms
- slowlog-log-slower-than不要设置过小,通常设置1000左右
- 理解命令生命周期
- 定期持久化慢查询
pipeline(流水线)
将多个命令进行打包的操作,发送给服务器端执行,将执行的结果打包通过网路返回给客服端,相比单个命令,节省了网络的传输时间
- Reis的命令时间是微秒级别的
- pipeline每次条数要控制(网路)
使用建议
- 注意每次pipeline携带的数据量
- pipeline每次只能作用在一个Redis节点上
- M操作与pipeline的区别,M操作时原子的,pipline把命令拆分进行执行的操作。
发布订阅
发布者发布消息,订阅者订阅了之后,就可以收到该消息了,多个订阅者可以订阅多个栏目
# 发布消息,返回的时订阅者数量
publish channel message
publish rao:tv "hello world"
# 订阅者,一个或多个
subscribe [channel]
subscribe rao:tv
# 取消订阅,一个多多个
unsubscrible [channel]
unsubscrible rao:tv
# 订阅模式
psubscrible [pattern..]
# 退订指定的模式
punsubscribe [pattern]
# 列出至少有一个订阅者的频道
pubsub channels
# 列出给定频道的订阅者数量
pubsub numsub [channel ..]
Bitmap
获取数据二进制形式的数据
# 给位图指定的索引设置值
setbit key offset value
# 获取位图指定索引的值
getbit key offset
# 获取位图指定范围(start 到 end,单位为字节,如果不指定就获取全部)位值为1的个数
bitcount key [start end]
# 做多个 bitmap的 and, or , not ,xor(异或)操作并将结果保存在 destkey中
# 计算位图指定范围(start 到 end,单位为字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置
使用经验
- string类型,最大为512M
- 注意setbit的偏移量,可能较大耗时
- 位图不是绝对的好
示例,独立用户统计,用户量千万级使用位图较好,省内存;但是用户量较少不一定。
HyperLogLog
-
基于HyperLogLog算法,极小空间完成独立数量的统计
-
本质还是字符串
向hyperloglog添加元素
pfadd key element [element ...]
计算hyperloglog的独立总数
pfcount key [key ...]
合并多个hyperloglog
pfmerge destkey sourcekey [sourcekey ...]
使用经验
- 是否容忍错误率(错误率: 0.81%)
- 是否需要取出单条数据(不能取出单条数据)
GEO
从版本3.2开始的,地理信息定位,存储经纬度,计算两地的距离
# 增加地理位置信息
geo 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 radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
withcoord :返回结果中包含经纬度.
withdist :返回结果中包含距离中心节点位置
withhash :返回结果中包含 geohash
COUNT count: 指定返回结果的数量
asc|desc :返回结果按照距离中心节点的距离做升序或者降序
store key: 将返回的结果的地址位置信息保存到指定键
storedist key :将返回结果距离中心节点的距离保存到指定键
geo 实质是用zset实现的,可以type查看说明没有删除的api,如果要删除使用zset相关的api。