慢查询
redis命令执行的生命周期
慢查询发生在生命周期的第三个阶段,执行命令期间。
客户端超时不一定是慢查询导致(有可能是网络因素),但是慢查询是客户端超时的一个可能。
慢查询的关键配置
slowlog-max-len,存储慢查询的一个先进先出的队列长度,默认长度是128,建议配置1024。
slowlog-log-slower-than,慢查询阀值,超过多少微妙后会加入到慢查询队列中,建议配置1000微秒=1毫秒。slowlog-log-slower-than=0时所有命令都记录到慢查询中,当需要知道某一个命令的真正执行时间是,可以使用,建议不要在生产环境使用。
修改上述参数的方式
启动时的配置文件。
动态修改
相关命令
config set slowlog-max-len = 1024,设置慢查询队列长度。
config set slowlog-log-slower-than = 1000(单位:微秒,1000微秒=1毫秒),设置记录慢查询的阀值。
slowlog get n,获取慢查询队列中的n条记录。
slowlog len,获取慢查询队列长度。
slowlog reset,清空慢查询队列。
pipeline
一次网络命令的通信模型
多条命令的执行模型
pipeline执行模型
pipeline在Jedis上的使用
注意pipeline命令非原子性,到达服务器端时有可能会被拆分。
package com.test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import java.util.List;
public class JedisPipelineTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1",6379,2000,100);
jedis.set("key1","value1");
jedis.set("key2","value2");
Pipeline pipeline = jedis.pipelined();
pipeline.get("key1");
pipeline.get("key2");
List<Object> res = pipeline.syncAndReturnAll();
System.out.println(res);
}
}
// 控制台打印
[value1, value2]
Process finished with exit code 0
位图(bitmap)
可以通过命令直接去操作字符串的位。
127.0.0.1:6379> set key big
OK
127.0.0.1:6379> getbit key 0
(integer) 0
127.0.0.1:6379> getbit key 1
(integer) 1
setbit
setbit key offset value(只能是0或1),可通过该命令设置你需要指定长度的位图,offset前所有的位都会补0。
getbit
getbit key offset,获取指定offset偏移量位的值。
应用场景
用户量较大时,用来记录活跃用户,假设所有用户的userId都是int类型,通过标记offset=userId位的值来记录用户是否活跃。
hyperloglog
HyperLogLog常用于大数据量的统计,活跃用户数统计。用极小的内存来实现该功能,允许有一定的误差,官方给出的错误率是0.81%。
其数据类型在redis中本质上还是字符串。
常用命令
pfadd key element ...,向hyperloglog添加元素。
pfcount key,计算hyperloglog中的独立总数。
pfmerge newkey key1 key2 ,合并hyperloglog key1和key2,存储为newkey。
127.0.0.1:6379> pfadd key1 b c d e
(integer) 1
127.0.0.1:6379> pfadd key2 c d e f
(integer) 1
127.0.0.1:6379> pfcount key1
(integer) 4
127.0.0.1:6379> pfcount key2
(integer) 4
127.0.0.1:6379> pfmerge key key1 key2
OK
127.0.0.1:6379> pfcount key
(integer) 5
GEO
地理位置信息。
应用场景
可以实现类似微信摇一摇。
多少公里范围内的商铺、酒店等O2O场景。
geo
geo key longitude latitude member,longitude经度,latitude纬度。
geopos key member,获取指定member的经纬度。
geodist key member1 member2 [unit],计算两个member间的距离,通过unit指定单位,m米,km千米,mi英里,ft尺。
georadius