Redis 使用 Eval 多個鍵值自增操作示例

2022-09-05 19:09:12 字數 1392 閱讀 9654

在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], ar**[1], ar**[2]);';

$script .= 'local ip = redis.call("hincrby", keys[1], ar**[3], ar**[4]);';

$script .= 'local uv = redis.call("hincrby", keys[1], ar**[5], ar**[6]);';

$script .= 'local pv = redis.call("hincrby", keys[1], ar**[7], ar**[8]);';

$script .= 'local val = money ..",".. ip ..",".. uv ..",".. pv;';

$script .= 'redis.call("hset", keys[1], ar**[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鍵值

測試過程中我們有一部分常量值放入redis,共大部分應用呼叫。但在測試過程中經常有人會清空redis,回歸測試。so,為了穩定不去重啟應用。編寫個小指令碼,監控redis的鍵值,被人刪除了,會自動插入。usr bin env python coding utf 8 import redis,time...

c map需要使用多個鍵值如何編寫

最近完成專案遇到乙個問題 map需要設計多個鍵值,也就是key value的key希望是乙個結構體,裡面有好幾個元素 網上查閱了資料 主要參考 解決方案如下 主要就是需要設定一下 比較符的定義,因為只有乙個鍵值的時候是很好比較的,但使用結構體後,我們就需要考慮比較關係 我們使用bool operat...

c 中map使用,儲存多個鍵值對

定義 mapmanalyticeinfomap 使用 map iterator infomap iter manalyticeinfomap.begin for infomap iter manalyticeinfomap.end infomap iter manalyticeinfomap.cle...