瑞士军刀 Redis

慢查询

1.生存周期

1.发送命令
2.排队
3.执行命令

该阶段发生慢查询,客户端超时不一定是慢查询,慢查询是客户端超时一个因素。
4.返回结果

2.两个配置

1.慢查询是一个先进先出队列 且固定长度,保存在内存内
2.慢查询阀值 slowlog-log-slower-than =0,记录任何命令(所有命令进入慢查询队列)
3.两个配置默认值
config get slowlog-max-len =128 //通常1000左右,也可以定期持久化慢查询
config get slowlog-log-slower-than =10ms //通常1ms
4.修改配置文件重启
5.动态配置

3.慢查询命令

slowlog get[n] :获取固定数量的慢查询队列
slowlog len:查询慢查询队列长度

pipeline

1次时间=1次网络时间(传输命令+放回结果)+1次命令时间

1.什么是流水线

将一批命令进行一次批量打包,1次pipeline(n条命令)=1次网络时间+n次命令时间

2.客户端实现

maven 依赖

Jedis jedis = new Jedis(”127.0.01“,6379);
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();

3.与原生操作对比

pipeline命令并不是一个原子操作,在内部也是一个个命令执行

使用建议

1.pipeLine 携带数据量
2.每次只能作用于一个结点

发布订阅

1.角色

发布者
频道
订阅者

2.模型

发布者publisher[redis-cli ]—>发布消息 Redis Server 频道
订阅者subcribe[redic -cli ]—->订阅 Redis Server 频道
无法做消息的堆积,不能获取历史的消息

3.API

1.public (发布命令) publish channel message (返回订阅者数量)
2.subcribe(订阅频道) subscribe channel
3.unsubscribe(取消订阅)

4.消息队列

订阅者使用抢的功能,智能一个订阅者收到消息(类似抢红包)

bitmap

1.位图是什么

每个字符都有对应的二进制(ASCII),redis可以直接操作位

set hello big
getbit hello 0 //获取第一个字母ASCII第一个元素

2.相关指令

setbit key offset value # 给位图指定索引设置值 (返回之前的值),尽量避免在一个很短的位图上做一个偏移量很大的操作(中间会补0)

getbit key offset #获取位图上指定索引的值

getCount key [start end] #获取指定范围内值为1 的个数

bitop op destkey key #做多个bitmap 的and(交集) or (并集)

bitpos key targetBIt[start end] #计算位图指定范围(字节单位),第一个偏移量对应的值等于targetBit 的位置

3.独立用户统计

1亿用户,每天5千万独立访问

数据类型 每个用户 userid 占用空间 需要存储用户量 全部内存
set 32 位 50 000 000 32*50 000 000=200MB
bitmap 1 位 100 1000 1000 1*100 000 000=12.5MB

HyperLogLog

1.新的数据结构?

极小的空间完成独立用户统计的数量统计
本质还是一个字符串

2.三个指令

pfadd key element[element…] #向hyperloglog 添加元素【1代表添加正常】相同元素不增加数量
pfcount key [key…] #计算hyperloglog 的独立总数
pfmerge destkey sourkey[socurcekey…] #合并多个

3.内存消耗

错误率 0.81%
是否需要单个数据

GEO(3.2 以后) (zset低层)

1.CEO 是什么

地理信息定位 ,计算两地距离,范围计算

2.五个城市经纬度

geoadd key longitude laitude member #添加地理位子信息,member 标识
geopos key member #获取经纬度
geodist key member1 member2 [unit] #获取距离 unit单位
geodist key longitude latitude rediusm m|km|ft #根据一定条件得到范围内数据

猜你喜欢

转载自blog.csdn.net/jcsyl_mshot/article/details/80274187