redis特性

pipleline 流水线

  • 将多个命令进行打包,一起发送给redis服务器执行。redis服务器将这批命令执行完成后会将结一并返回给客户端,减少了多次请求带来的网络消耗。
  • 使用pipeline打包的命令并不能保证其原子性,这些子命令并不能保证按序依次执行。可能在执行队列中会穿插执行其他客户端发送的命令。
    在这里插入图片描述
    pipleline 的子命令在执行队列中不连续,被C1命令切断了。
<?php
//使用php,进行测试
$cli = new Redis();
$cli->connect('127.0.0.1',6379);

#$cli->multi(Redis::PIPELINE);
$start = microtime(true);
$i = 100000;
while ($i--){
    $cli->set('ok:'.$i,$i);
}
#$cli->exec();
$end = microtime(true);
echo $end-$start,"\n";    

不使用pipeline消耗7秒,使用pipeline消耗0.7秒

发布订阅

角色
  • publisher 发布者,发布消息到频道
  • subscriber订阅者,订阅频道
  • channel 频道,将发布者的消息流转到订阅者
发布订阅模型

在这里插入图片描述

  • 发布者通过redis客户端发布消息到某个频道
  • 一个频道能被多个订阅者订阅。频道能将消息,流转到订阅他的所有订阅者。频道不能保存消息,所以新的订阅者无法获取历史消息。
  • 订阅者能够同时订阅多个频道。
命令
命令解释
publish channel msg将消息发送到某个频道中,返回订阅者数
subscribe channel1 channel2 …订阅频道
unsubscribe channel1 channel2取消订阅频道
psubscirbe pattern模式匹配频道进行订阅
punsubscribe pattern模式匹配频道取消订阅

bitmap 位图

应用
  • 用于做数据统计
    比如需要统计一个具有10000W注册用户,一天用户登陆数量。如果使用set集合,需要将用户的id号加入集合后进行统计。如果使用位图,需要将位图上编号为id的位,设置为1,能节约大量内存。
命令
命令解释
setbit key offset [0|1]将位图key上的offset位,设置为0或者1,返回值是当前ofset位的数值
getbit key offset获取offset位上的数值
bitcount key start end统计在start和end 位上,被设置为1的位的个数
bitop [and or not xor] map1 map2 …将多个位图进行与、或、非、异或操作
bitos map [0|1] start end查找指定范围中,map第一次出现 1或0 的位置

HyperLogLog

应用
  • 用途与位图一样主要用于数据统计
    注意,使用hyperloglog统计的结果是一个大概的结构,官方给出0.8%的误差。
    无法从hyperloglog中获取某个元素的具体信息,只能获取全部元素的统计信息。
命令
命令解释
pfadd hyper m1 m2 m3向hyperloglog 中添加元素
pfcount统计hyperloglog中元素个数
pfmerge newHyper hyper1 hyper2 …将多个hyerloglog 合并
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值