美文网首页我爱编程
Redis的「zMScore」操作

Redis的「zMScore」操作

作者: 聪了个颖 | 来源:发表于2018-04-10 00:36 被阅读0次

背景

最近在做公司项目时遇到这样一个场景:
需要从Redis有序集合中取出20个元素,并且附带对应的score。
因为有mGethMGet等方便的指令,我下意识地在键盘上输入zMScore,可奈何phpredis扩展中不带有这儿方法,查阅资料之后,发现Redis本生就不带有这个方法。

问题

背景所述的Redis操作时放在接口中的,采用for循环用zScore操作必然会加大程序和Redis的数据交互次数,导致接口速度变慢。

思考

1、类似于MySQL,Redis也是支持事务的,利用multiexec操作将20个zScore包起来;
2、编写Lua脚本,利用eval方法进行操作;

实践

代码

  • for循环方式
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1', '6379');
$result = array();
$timeBegin = microtime(true);
for($i = 0; $i < 20; $i++) {
    $key = 'test' . $i;
    $result[$key] = (int)$redis->zScore('testSSet', $key);
}
$timeEnd = microtime(true);
var_dump($timeEnd - $timeBegin);
  • 事务方式
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1', '6379');
$result = array();
$timeBegin = microtime(true);
$redis->multi();
for($i = 0; $i < 20; $i++) {
    $key = 'test' . $i;
    $redis->zScore('testSSet', $key);
}
$result = $redis->exec();
$timeEnd = microtime(true);
var_dump($timeEnd - $timeBegin);
  • eval方式
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1', '6379');
$script = "return {%s}";
$keys = array();
$strs = array();
$timeBegin = microtime(true);
for($i = 0; $i < 20; $i++) {
    $index = $i + 1;
    $key = 'test' . $i;
    $keys[] = $key;
    $strs[] = "KEYS[{$index}]";
    $strs[] = "redis.call('zScore', 'testSSet', KEYS[{$index}])";
}
$script = sprintf($script, implode(',', $strs));
$result = $redis->eval($script, $keys, 20);
$timeEnd = microtime(true);
var_dump($timeEnd - $timeBegin);

结果

  • for循环方式:关键部分的耗时平均在0.6ms;
  • 事务方式:关键部分的耗时平均在0.6ms;
  • eval方式:关键部分的耗时平均在0.2ms;

相关文章

  • Redis的「zMScore」操作

    背景 最近在做公司项目时遇到这样一个场景:需要从Redis有序集合中取出20个元素,并且附带对应的score。因为...

  • php操作redis大全

    php连接redis测试 php操作redis函数封装 php操作redis大全,基本上php操作redis常用的...

  • Redis 简要使用

    Redis 设置认证 Python操作 Redis Node.js 操作Redis

  • redis基础

    redis概念下载安装命令操作数据结构持久化操作使用Java客户端操作redis Redis 概念: redis是...

  • Python操作Redis

    Python操作Redis 连接 Redis **import **redis r = redis.StrictR...

  • python学习笔记(python操作redis和memcach

    python 操作redis 1,链接redis 2,字符串操作 3,list操作 4,set操作 ··· 并集 ...

  • redis汇总

    redis优化 redis 操作相关 安装Redis redis常用命令

  • 03-Redis 操作之Hash操作

    Redis 操作之Hash操作 Hash操作,redis中Hash在内存中的存储格式如下: hset(name, ...

  • redis

    今日内容 redis 概念 下载安装 命令操作 数据结构 持久化操作 使用Java客户端操作redis Redis...

  • php操作redis大全

    php连接redis测试 php操作redis大全,基本上php操作redis常用的函数都在下面了

网友评论

    本文标题:Redis的「zMScore」操作

    本文链接:https://www.haomeiwen.com/subject/biowhftx.html