Redis系统梳理——Redis的高级功能
1、慢查询
Slowlog 命令
用来记录查询执行时间的日志系统。 查询执行时间指的是不包括像客户端响应、发送回复等IO操作,而单单是执行一个查询命令所深消耗的时间。
solw log 保存在内存里面,读写速度非常快,因此你可以放心的使用它,不必担心因为开启 slow log 损害 Redis的速度
SLOWLOG subcommand [argument]
// 查看日志信息
redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 14 // 日志的唯一标识符(uid)
2) (integer) 1309448221 // 命令执行时的 UNIX时间戳
3) (integer) 15 // 命令执行的时长
4) 1) "ping" // 命令以及命令参数
2) 1) (integer) 13
2) (integer) 1309448128
3) (integer) 30
4) 1) "slowlog"
2) "get"
3) "100"
// 查看当前日志数量
redis 127.0.0.1:6379> SLOWLOG LEN
(integer) 14
// 清空 slow log
redis 127.0.0.1:6379> SLOWLOG LEN
(integer) 14
redis 127.0.0.1:6379> SLOWLOG RESET
OK
redis 127.0.0.1:6379> SLOWLOG LEN
(integer) 0
与慢查询有关的配置
slowlog-log-slower-than 单位毫秒,指Redis命令执行的最大时间,如果超过该时间,这条命令将进入慢查询日志。不接受负值,如果设置为0,则每条命令都会被记录到慢查询日志。
slowlog-max-len 单位毫秒,指慢查询日志的数量的最大值,当达到最大值以后,如果有新的新的慢查询日志记录进来,则最老的那条会被删除。
2、PipeLine流水线
简单讲,就是一次网络请求,N条命令执行。
Redis客户端与Redis服务器之间使用TCP协议进行连接。当客户端通过一个socket连接发起多个请求命令,每个命令需要等待上一个命令结束有结果返回后,才会去执行。网络通讯是有开销的。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
这里给出菜鸟教程里面的例子,直观的展示下(http://www.runoob.com/redis/redis-pipelining.html)
require 'rubygems'
require 'redis'
def bench(descr)
start = Time.now
yield
puts "#{descr} #{Time.now-start} seconds"
end
def without_pipelining
r = Redis.new
10000.times {
r.ping
}
end
def with_pipelining
r = Redis.new
r.pipelined {
10000.times {
r.ping
}
}
end
bench("without pipelining") {
without_pipelining
}
bench("with pipelining") {
with_pipelining
}
3 HyperLogLog
HyperLogLog是用来做基数统计的,它是优点是当输入元素数量非常大非常大的时候,计算基数所需要的空间是固定的,并且是很小(简单说就是占用内存很小)。它统计值会有一定的误差(1%以内),只是统计数量,并不知道具体内容是什么。
PFADD key element [element ...] // 添加指定元素到HyperLogLog中
PFCOUNT key [key ...] // 返回给定HyperLogLog的基数估算值
PFMERGE destkey sourcekey [sourcekey ...] // 将多个HyperLogLog合并为一个
4 GEO 地理位置存储
Redis 3.2以后出现了GEO功能。比如查看附近的商家,再比如摇一摇等都可以用它来实现
GEOADD key longitude latitude member // 将指定的地理空间位置(经度 纬度 名称)添加到指定的key中
GEOPOS key member // 从key中返回所有给定位置元素的位置(经度和纬度)
GEODIST key member1 member2 [unit] //返回两个给定位置之间的距离,其中参数unit指单位,如m km等待
GEORADIUS key longtitude latitude radium m|km|mi|ft // 返回指定位置范围内所有坐标(中心是经纬度)
GEORADIUS key member radium m|km|mi|ft // 返回指定位置范围内所有的坐标(中心是地点名称)
上一篇: c/c++学习理论部分1