慢查询日志分析
redis提供了慢查询日志功能,会计算每条命令的执行时间,超过阈值后记录下来,注意计算的是命令的执行时间,不包含网络传输和排队时间。
config get slowlog-log-slower-than
获取操作超时的阈值,我的版本默认是10 000微秒,即10毫秒
config get slowlog-max-len
获取慢查询日志最多存储条数,默认128条,超过会循环覆盖
通过slowlog get n
来获取慢查询日志,返回日志id,时间戳,命令耗时,命令详情,可以定时存储到持久化数据库制作可视化界面,cachecloud已经提供这样的功能。
slowlog len
获取列表长度,slowlog reset
重置清理
redis shell命令
redis-cli命令
redis-cli -r 3 -i 1 ping
执行三次命令,每隔1秒执行一次
redis-cli -r 100 -i 1 info | grep used_memory_human
每隔一秒输出内存的使用量,一共输出100次
-a 输入密码
–slave将当前客户端模拟成当前redis节点的从节点,可以用来获取当前redis节点的所有操作
–bigkeys 利用scan命令对key进行采样,找出内存占用比较大的键值
–latency --latency-history --latency-dist来检测网络延迟,对于运维挺有用
–stat和info一样返回redis的统计信息
–raw和–no-row不同,会返回格式化后的信息,如中文
redis-benchmark
用来做基准性能测试
redis-benchmark -c 100 -n 20000
-c代表客户端的并发数量,-n代表客户端请求总量
-r会在key,counter键后加一个12位的后缀, -r 10000 不代表随机数的个数,而表示只对后四位做随机处理,
-t可以对指定命令做基准测试 --csv导出
事务和lua脚本
- 服务端在事务的执行过程中,不会被其他客户端发送来的命令请求所打断
- multi开启事务,之后的命令会放到一个队列里,直到执行exec命令。discard清空事务队列, 并放弃执行事务。
- 如果事务中的某些命令出现错误,事务中的其他命令仍然会继续执行,整个事务不会回滚;但如果是语法错误,在入队列时就会被发现。
- redis乐观锁。被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回nil-reply来表示事务已经失败。
lua脚本在redis中是原子执行的,不会插入其他命令,并且可以利用lua定制自己的命令实现复用,打包多条命令也减少了多次命令的网络开销。
数据结构
Bitmaps
redis提供了Bitmaps的数据结构,实际上就是一列由0和1组成的二进制字符串,可以按位进行操作。最大的好处就是可以节省内存。
比如可以把用户是否访问过网站记录到列表中,访问过就记为1,偏移量就是用户id,setbit unique:users:2016-04-05 5 1
;也支持并集交集如求两天都访问过网站的用户等
HyperLogLog
基于基数算法,利用极小的内存空间来完成独立总数的统计,
如pfadd 2016-03-06:unique:ips "ip1" "ip2" "ip3"
会自动去重,比使用set节省很多内存
pfcount 2016-03-06:unique:ips
获得独立的ip数总数,也可以 pfmerge进行合并。注意虽然占用内存小,但是存在一定的错误率
GEO
redis提供了GEO地理信息定位功能,支持存储经纬度地理信息,可以实现附近人,某位置一定半径内地理位置的集合,两个地理位置的距离等功能