当前位置: 首页 > 编程笔记 >

Redis使用Eval多个键值自增的操作实例

傅啸
2023-03-14
本文向大家介绍Redis使用Eval多个键值自增的操作实例,包括了Redis使用Eval多个键值自增的操作实例的使用技巧和注意事项,需要的朋友参考一下

在PHP上使用Redis 给多个键值进行自增,示例如下:

$set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', $data['money']);
$set['ip'] = $this->redis->hIncrBy($key, $hour .'_ip', $data['ip']);
$set['uv'] = $this->redis->hIncrBy($key, $hour .'_uv', $data['uv']);
$set['pv'] = $this->redis->hIncrBy($key, $hour .'_pv', $data['pv']);
$this->redis->hSet($key, $hour, array($data['money'], $data['ip'], $data['uv'], $data['pv']));

如果这样写可能需要请求五次,可以通过 Eval 方法来一次完成,大大提高效率

$script = 'local money = redis.call("hIncrByFloat", KEYS[1], ARGV[1], ARGV[2]);';
$script .= 'local ip = redis.call("hIncrBy", KEYS[1], ARGV[3], ARGV[4]);';
$script .= 'local uv = redis.call("hIncrBy", KEYS[1], ARGV[5], ARGV[6]);';
$script .= 'local pv = redis.call("hIncrBy", KEYS[1], ARGV[7], ARGV[8]);';
$script .= 'local val = money ..",".. ip ..",".. uv ..",".. pv;';
$script .= 'redis.call("hSet", KEYS[1], ARGV[2], val);';
$script .= 'return val;';
$result = $this->redis->evaluate($script, [$key, $hour, $hour .'_money', $data['money'], $hour .'_ip', $data['ip'], $hour .'_uv', $data['uv'], $hour .'_pv', $data['pv']], 2);
var_dump($result);

Redis 用的 Lua 语法,我也不熟悉,这个字符串拼接方式也很特别的是两个点号 “..”

money ..",".. ip ..",".. uv ..",".. pv
拼接后
0.01,1,2,3

以上这篇Redis使用Eval多个键值自增的操作实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 如何使用排序集从Redis获取多个键的值? 这将有两个用户。 如何在一个查询中检索具有键“ David”和“ Linda”的用户? 问题答案: 无需在Redis中引入新命令的方法有多种。 例如,您可以使用感兴趣的名称填充临时集,然后计算该临时集与zset之间的交集: 使用流水线操作,只会产生一次往返,并且您可以在tmp中填充任意数量的输入参数。 使用Redis 2.6,您还可以将这些行

  • 问题内容: 我目前正在与Redis一起玩,我有几个问题。是否可以从键数组中获取值? 例: 当我返回时。我可以遍历此列表并获得用户:1,获得用户:2。但这感觉不对,有没有办法让所有与会者的信息一目了然? 在rails中,我会做这样的事情: 但是在redis中我不能,因为它返回键,而不是存储在该键上的实际对象。 谢谢 :) 问题答案: 在项目上循环并同步访问每个元素不是很有效。使用Redis 2.4,

  • IncrementResult increment(IncrementRequest request) 功能 对某个表的某行记录的整型属性做原子性的自增操作 需要消耗读写配额各一个单位 方法参数 request : IncrementRequest : required IncrementRequest包括以下部分 1.tableName : String : required 指定操作的表 2.

  • 本文向大家介绍C#使用listView增删操作实例,包括了C#使用listView增删操作实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用listView增删操作的方法。分享给大家供大家参考。具体分析如下: 应用场景: C#中使用listView控件,实现动态添加,选中删除等操作. 实例代码: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍Python+MongoDB自增键值的简单实现,包括了Python+MongoDB自增键值的简单实现的使用技巧和注意事项,需要的朋友参考一下 背景 最近在写一个测试工具箱,里面有一个bug记录系统,因为后台我是用Django和MongoDB来实现的,就遇到了一个问题,要如何实现一个自增的字段。 传统的关系型数据库要实现起来是非常容易,只要直接设置一个自增字段就行了,插入数据时不用管这

  • 问题内容: 我想使用camel-redis设置键/值对。我尝试: 但没有喜悦。我得到错误: 尽管有很多有关如何订阅的示例,但我找不到有关如何设置键/值对的单个示例。我该怎么做? 问题答案: 和 (请注意,它们区分大小写)是消息头而不是URI参数