慢查询
对于较慢的操作(超过1ms的任务),维护一个先进先出队列进行保存
修改配置文件
slowlog-max-len 慢查询有个队列,这个队列的长度,默认是128,建议设置1000
slowlog-log-slower-than 超过多长时间(微秒),进入慢查询?默认是10000微秒,建议1000微秒
config set slowlog-max-len 1000
config set slowlog-log-slower-than 1000
API
slowlog len
slowlog reset
slowlog get 100
pipeline
一次性传递很多命令,只消耗一次网络网络时间。redis执行是微秒级。网络是毫秒级
注意每次pipeline的数据量
注意M操作和pipeline的区别:M操作是原子操作。pipeline不是,它仅仅打包一堆命令。
发布订阅
publish sohu:tv "something"
subscribe sohu:tv
unsubscribe sohu:tv
bigmap
直接操作二进制
getbit key index
setbit key index value 只设置1就好,其他的自动补0
bitcount key [start end] 获取值为1的个数,可以指定范围,范围单位是字节
bitop op destkey [key……] op[and/or/xor/not]。操作完后存到destkey
bitpos 找出0或者1 第一次出现的位置
hyperloglog
极小的空间完成用户统计,极小极小!但是有0.81%的错误率
pfadd key element[……] 添加元素,如果存在就跳过
pfcount key [……] 统计数量
pfmerge destkey sourcekey[……] 合并多个
GEO
根据经纬度数据,处理地理信息
geoadd key longitude latitude member
geopos key member
geodist key member1 member2 {unit:km/m/mi/ft}
georadiusbymember key member num {unit:km/m/mi/ft}
本质是个zset,所以删除时候用zrem key member 就好
例子:
citygeokey = 'cities'
citysll = [
'116.28--39.56--beijing',
'117.12--39.08--tianjin',
'115.29--38.51--baoding',
'114.29--38.02--shijiazhuang'
]
for city in citysll:
lon, lat, cityname = city.split('--')
r.geoadd(citygeokey, lon, lat, cityname)
# 获得经纬度
print(r.geopos(citygeokey, 'beijing'))
# 根据经纬度计算距离 m km mi(英里) ft(尺)
print(r.geodist(citygeokey, 'beijing', 'tianjin', 'km'))
# 计算下距离北京150km内的城市
print(r.georadiusbymember(citygeokey, 'beijing', '150', 'km'))