Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo

  1. 慢查询

  • redis命令执行的生命周期

  • 慢查询发生在生命周期的第三个阶段,执行命令期间。

  • 客户端超时不一定是慢查询导致(有可能是网络因素),但是慢查询是客户端超时的一个可能。

Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo_第1张图片
  • 慢查询的关键配置

  • 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,清空慢查询队列。

  1. pipeline

  • 一次网络命令的通信模型

Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo_第2张图片
  • 多条命令的执行模型

Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo_第3张图片
  • pipeline执行模型

Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo_第4张图片
  • 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 res = pipeline.syncAndReturnAll();
        System.out.println(res);
    }
}
// 控制台打印
[value1, value2]

Process finished with exit code 0 
   
  1. 位图(bitmap)

可以通过命令直接去操作字符串的位。

Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo_第5张图片
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位的值来记录用户是否活跃。

  1. 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
  1. 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

Redis系列3-Redis慢查询、pipeline、bitmap、hyperloglog、geo_第6张图片

参考:https://coding.imooc.com/learn/list/151.html

你可能感兴趣的:(redis,缓存,java)