python redis客户端使用lua脚本

有一个需求,为一个key设置一个field存储时间戳,每当有新数据,判断新数据时间戳是否>之前的时间戳,如果是,更新时间戳,由于依赖中间执行结果,所以使用lua减少客户端和服务端通信次数
#!/usr/bin/python
# -*- coding: utf-8 -*-
import redis

r = redis.Redis("127.0.0.1")

lua = """
local key = KEYS[1]
local field = ARGV[1]
local timestamp_new = ARGV[2]
-- get timestamp of the key in redis
local timestamp_old = redis.call(‘hget‘, key, field)
-- if timestamp_old == nil, it means the key is not exist
if timestamp_old == nil or timestamp_new > timestamp_old then
    redis.call(‘hset‘, key, field, timestamp_new)
end
"""

cmd = r.register_script(lua)
res = cmd(keys=[‘meterdata_36118_plab_current‘], args=[‘time‘, 1533299183])  # 关键字参数client可以设置执行lua脚本的client instance, 也可以指定其为pipeline
print res

使用pipeline的watch也可以获取pipeline执行期间的结果,但是在获取结果期间还是和服务端进行了通信,增加了网络消耗。

lua脚本也可以放在pipe执行,只需指定client=pipeline

原文地址:https://www.cnblogs.com/buxizhizhoum/p/9295981.html

时间: 2024-11-09 04:04:50

python redis客户端使用lua脚本的相关文章

在redis中使用lua脚本

在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能. 不过lua也会有很多限制,在使用的时候要注意. 在Redis中执行Lua脚本有两种方法:eval和evalsha eval EVAL script numkeys key [key ...] arg [arg ...] 其中: <1> script:你的lua脚本 <2> numkeys:  key的个数 <3> key:redis中各种数据

Php+Redis 实现Redis提供的lua脚本功能

<?php require_once "predis-0.8/autoload.php"; $config['schema'] = 'tcp'; $config['host']= "192.168.1.7"; $config['port'] = 6379; $redis = new Predis\Client($config); class wode extends Predis\Command\ScriptedCommand { public functio

redis翻译_redis lua脚本

Available since 2.6.0.  加入版本2.6 Time complexity: Depends on the script that is executed. 时间复杂度: 取决于脚本的执行 出处:http://blog.csdn.net/column/details/redisbanli.html Introduction to EVAL  介绍EVAL EVAL and EVALSHA are used to evaluate scripts using the Lua i

StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改

前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey", "*key*"),然后再使用相关的方法进行相关的批量操作,但是如果缓存数据量比较大,效率低下,那么可以使用Lua脚本进行模糊查询的批量操作:ScriptEvaluate(LuaScript.Prepare(...)). 通过keys进行模糊查询后的批量操作 批量删除 1 var

在PHP中使用redis来操作lua脚本,使用$redis-&gt;eval()命令时出错,参数传递无效

使用$redis->eval命令时传递三个参数,第一个为lua脚本文件,第二个为key,第三个参数为key的个数向lua中传递参数时,在key中定义好,即可,示例正确代码 用lua脚本循环 eval "local rst={}; for i,v in pairs(KEYS) do rst[i]=redis.call('hgetall', v) end; return rst" 2 user:1 user:2 $z=$redis->EVAL('local rst={}; fo

Redis Lua 脚本使用

Lua语言提供了如下几种数据类型:booleans(布尔).numbers(数值).strings(字符串).tables(表格). 下面是一些 Lua 的示例,里面注释部分会讲解相关的作用: -- -- -- 拿客 -- 网站:www.coderknock.com -- QQ群:213732117 -- 三产 创建于 2017年06月15日 12:04:54. -- 描述: -- -- local strings website = "coderknock.com" print(we

《Redis设计与实现》学习笔记-Lua脚本

Redis从2.6开始支持Lua脚本,和事务的功能类似,可以通过Lua脚本原子的执行多个Redis命令.Redis提供了EVAL和EVALSHA命令执行lua脚本. 创建并修改Lua坏境 Redis在服务器内嵌了一个Lua坏境,并进行了一系列的修改,从而确保这个Lua坏境可以满足Redis服务器的需要,通过下列步骤创建并修改Lua坏境: 创建一个基础Lua坏境,通过调用Lua的C API函数lua_open. 载入多个函数库到Lua坏境中,让Lua脚本可以使用这些函数来进行数据操作.包括Lua核

Redis集成Lua脚本实现

作者:zhanhailiang 日期:2014-12-02 相关依赖 1. 环境部署 Redis安装配置教程及phpredis扩展安装测试 Redis安装以及php扩展 Windows下安装phpredis模块(当前Window环境下的php_redis.dll基本还是2.1.3,而Linux下的redis.so版本已经到了2.2.5,这可能导致部分指令集的支持程度不同) 2. Redis指令手册 php-redis中文帮助手册.chm(这份手册相对较旧,请参照Redis Commands) R

Redis(六)Lua脚本的支持

Redis为什么需要Lua脚本的支持 当应用需要Redis完成一些Redis命令不支持的特性时,要么扩展Redis client或者更甚至编写c扩展Redis server.这都大大造成了应用的实现的难度.在此基础上,Redis通过内置Lua解释器,Redis client可以发起执行Lua脚本,完成特殊的功能需求. Redis中使用Lua脚本 在Redis中可以通过使用eval和evalsha命令提供对执行Lua的支持. eval语法: EVAL script numkeys key [key