慢查询(slowlog)
#配置项
#慢查询时间阈值:默认1000000微秒(1秒);
#设置值应该根据设计的并发来计算得出,例如:
slowlog-log-slower-than = 10000
#慢查询队列长度默认值128;通常设置为1000;
slowlog-max-len = 128
#查询慢查询队列
slowlog get [n]
#获取慢查询队列长度
slowlog length
#清空慢查询列表
slowlog reset
流水线(pipeline)
一次网络时间 + N次命令执行时间
@Test
public void testPipeline(){
Jedis jedis = new Jedis("126.217.63.103");
jedis.auth("cc");
long t1 = System.currentTimeMillis();
for(int i = 0;i<10000;i++){
jedis.hset("hashkey:"+i,"field:"+i, "value:"+i);
}
long t2 = System.currentTimeMillis();
System.out.println((t2-t1)/1000);
jedis.close();
}
//实测消耗时长:331秒
使用Pipeline后:
@Test
public void testPipeline_(){
Jedis jedis = new Jedis("126.217.63.103");
jedis.auth("cc");
long t1 = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Pipeline pipeline = jedis.pipelined();
for (int j = i*100; j < (i+1)*100; j++) {
pipeline.hset("hashkey:"+j,"field:"+j, "value:"+j);
}
pipeline.syncAndReturnAll();
}
long t2 = System.currentTimeMillis();
System.out.println("消耗时间(秒):"+(t2-t1)/1000);
jedis.close();
}
//实测 2秒;提升真是巨大。
发布订阅
发布订阅模式
生产者生产一条消息;所有订阅者均会收到消息;相关命令不在详述。用jedis和命令行同时做实验来测试redis-cli 1 发布消息;jedis和redis-cli 2 接收消息。
消息队列模式
Redis本身没有提供这种功能。
Bitmap(位图)
getbit key offset 可以获取位图对应位数的二进制值;
setbit key offset value 可以设置位图对应的下标位数的二进制值;
bitcount key [start end] 获取位图指定范围位置为1的个数,不指定范围则为全部
bitop op destKey key [key...]对多个位图进行交集、并集、非、异或操作
HyperLogLog
pfadd key element 向heyperLogLog添加元素;
pfcount key [key...] 计算hyperloglog的独立总数;
pfmerge destkey sourcekey [sourcekey...] 合并多个hyperloglog
缺点:1、有一定的错误率;2、不能取出单条记录;
GEO
用户和经纬度相关的操作;计算距离、计算范围等等
说明:
- 、redis 3.2+
- 、本质上是使用zset实现的;
- 、没有删除API:zrem key member 来删除;
Redis持久化
RDB
将Redis内存中的数据;持久化到硬盘。
触发机制:
- save(同步):阻塞!不会额外消耗内存。
- bgsave(异步): 异步非阻塞。使用fork() 非常快,本质是阻塞redis。会启动额外的进程,消耗内存。会有临时文件产生。
- 自动 (自动,本质异步调用bgsave): 根本一定的时间和改变记录数规则,自动备份。 不容忽视的方式:
- 全量复制;
- debug reload;
- shutdown 当redis被关闭时;会持久化数据到硬盘。
AOF
RDB 相对于AOF的缺点:
- 耗时、耗xin性能;
- 容易丢失数据; AOF基于日志持久化方式。
三种策略:
- always :不会丢失数据、IO开销较大
- everysec:每秒一次fsync丢一秒数据;
- no:不可控;基本不用!
AOF重写:合并同类操作、清除过期数据不放入日志文件中;从而减少日志文件的大小及命令大小;加快持久化速度。
#命令
bgrewriteaof
#配置项
appendonly yes
appendfilename "appendonly-${port}.aof"
appendfsync everysec
dir /data
no-appendfsync-on-rewrite yes
auto-aof-rewrite-min-size #AOF文件重写需要的尺寸
auto-aof-rewrite-percentage # AOF文件增长率
#统计项
aof_current_size #AOF当前尺寸(单位:字节)
aof_base_size #AOF上次启动和重写尺寸(单位:字节)
两者比较:
命令 | RDB | AOF |
---|---|---|
启动优先级 | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全性 | 丢数据 | 根据策略决定 |
轻重 | 重 | 轻 |
选择标准: 需要根据实际场景及机器配置综合考虑!
本文由 huzd 创作,采用 知识共享署名4.0 国际许可协议进行许可本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名最后编辑时间
为:
2018/05/14 16:00