004 redis高级功能

慢查询

对于较慢的操作(超过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'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值