前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php中使用redis HyperLogLogs

php中使用redis HyperLogLogs

作者头像
跑马溜溜的球
发布2020-12-07 15:33:37
6310
发布2020-12-07 15:33:37
举报
文章被收录于专栏:日积月累1024日积月累1024

问题

前些日子学习了reids的HyperLogLogs(不熟悉此功能的同学可参看这里),想用php试试。我在php中用的redis扩展是phpredis,查了一下api,居然没有HyperLogLogs相关的api(pfadd, pfcount等) -_-|||

曙光

总不至于自己按reids协议用原生socket写吧…详细查了下文档,发现了这个api–rawCommand,可以让你直接使用原生redis命令。比如:

代码语言:javascript
复制
/* Returns: true */
$redis->rawCommand("set", "foo", "bar"); 

/* Returns: "bar" */
$redis->rawCommand("get", "foo");

看来可以考虑尝试用此api直接执行pfadd, pfcount。

又一个问题

写了下面的代码(hyper.php),模拟统计ip个数的case, 预期输出是3。

代码语言:javascript
复制
$redis = new Redis();
$res = $redis->connect('127.0.0.1', '6379');

$ipList = array(
    '10.1.1.1',
    '10.1.1.2',
    '10.1.1.2',
    '10.1.1.3',
);

foreach ($ipList as $ip){
    $redis->rawCommand('pfadd', 'ips', $ip);
}

$result = $redis->rawCommand('pfcount', 'ips');

echo $result, "\n";

执行代码,居然告诉我无此方法,又一道黑线划过!

代码语言:javascript
复制
PHP Fatal error:  Call to undefined method Redis::rawCommand()

解决

查了下,原来phpredis是在2.2.7及以上版本才支持rawCommand, 详见Release notes

那么我目前使用的phpredis版本是多少呢?

代码语言:javascript
复制
$ext = new ReflectionExtension('redis');
echo $ext->getVersion();

结果是2.2.4,难怪不支持。

下载了phpreis 2.2.7(点我下载),编译安装。 再次执行hyper.php,顺利得到结果3!

总结

php中使用HyperLogLogs需要 1. redis(server端) 2.8.9及以上版本 2. phpredis版本2.2.7及以上 3. 使用rawCommand执行HyperLogLogs相关api

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-09-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 曙光
  • 又一个问题
  • 解决
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档