Redis EVALSHA命令

Redis的EVALSHA命令是一个用来执行Lua脚本的命令。相比于EVAL命令,EVALSHA命令的执行速度更快,且可以避免在脚本较长时因为传输脚本内容而导致的网络延迟。

使用方法

EVALSHA命令的语法如下:

EVALSHA script_sha1 numkeys key [key ...] arg [arg ...]

其中,script_sha1是指已经在Redis缓存中保存的Lua脚本的sha1值,numkeys代表脚本中使用到的key的个数,key是被Lua脚本使用到的键名,arg是传入到Lua脚本中使用的值。

实例说明

实例1:

假设我们有一个Lua脚本,在Redis的缓存中的sha1值为"926f32424d69b205b297296e4f7f3361d011d185",脚本内容如下:

local name = KEYS[1] 
local age = ARGV[1] 
redis.call('SET', name, age) 
return redis.call('GET', name)

接下来快速运行一下上述脚本,将值写入缓存中:

> EVAL "local name = 'Tom' local age = 20 redis.call('SET', name, age) return redis.call('GET', name)" 0

接下来我们可以使用EVALSHA命令来实现同样的逻辑:

> EVALSHA "926f32424d69b205b297296e4f7f3361d011d185" 1 Tom 20

经过测试,两个命令都可以正确地将值写入缓存中。

实例2:

继续考虑另一个Lua脚本,脚本内容如下:

if tonumber(redis.call('GET', KEYS[1])) > tonumber(ARGV[1])
then
    redis.call('SET', KEYS[1], ARGV[1]) 
    return 1
else
    return 0 
end

基于以上脚本内容,我们可以使用EVALSHA命令来实现原来的脚本内容,而不用再次传输完整的脚本内容:

> EVALSHA "3618e63f85c0421efb015067f99b1d528ec7be50" 1 test 10
(integer) 1
> EVALSHA "3618e63f85c0421efb015067f99b1d528ec7be50" 1 test 11
(integer) 0

以上命令分别比较test的值,如果值为10,则将其更新为11,并返回1;否则返回0。这在Redis缓存中的使用场景比较多见。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Redis EVALSHA命令 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • 如何使用 Python Redis 库的事务功能?

    如何使用 Python Redis库的事务功能? Redis 是一种高性能的键值存储数据库,支持多种数据结构和高级功能。其中,事务是 Redis 的一个重要功能可以保证个 Redis 命的原子性执行。在 Python 中,我们可以使用 Redis-py 库来连接 Redis 数据库,并使用 Redis-py 库的事功能来多个 Redis 命令。在本文中,我们…

    python 2023年5月12日
    00
  • 磁盘满时,redis客户端频抛出ConnectionException异常

    1. 原因      当磁盘满时,程序在调用Pool.getResource(),从jedis实例池pool里借用实例时,出现连接异常,没有可用的jedis实例,异常log如下: 2013-11-17 21:59:37,155 ERROR [TransportFrameEncoderService:97] main – <redis.clients.j…

    Redis 2023年4月12日
    00
  • Redis常见的几种使用方式及其优缺点

      本文主要针对Redis常见的几种使用方式及其优缺点展开分析。   一、常见使用方式   Redis的几种常见使用方式包括: Redis单副本; Redis多副本(主从); Redis Sentinel(哨兵); Redis Cluster; Redis自研。   二、各种使用方式的优缺点   1、Redis单副本   Redis单副本,采用单个Redis…

    Redis 2023年4月13日
    00
  • Redis SDIFFSTORE命令

    Redis SDIFFSTORE 命令详解 Redis SDIFFSTORE 命令用于对多个集合进行差集计算,并将结果保存到新的集合中。它的语法如下: SDIFFSTORE destination key [key …] 其中,destination 表示差集运算的结果集合;key 表示原始集合的名称,可以指定多个。 SDIFFSTORE 命令的使用方法比较…

    Redis 2023年3月27日
    00
  • 如何在 Redis 中实现时间序列数据存储?

    以下是详细讲解如何在 Redis 中实现时间序列数据存储的完整使用攻略。 Redis 时间序列数据存储简介 Redis 时间序列数据存储是一常用的数据存储技术,可以用于储序列数据,如股票价格、气象数据、传感器数据等。Redis 时间序列存储的特点如下: Redis 时间序列数据储是基于 Redis 的数据结构实现。 Redis 时间序列数据存储可以通过过期时…

    python 2023年5月12日
    00
  • 大数据相关技术原理资料整理(hdfs, spark, hbase, kafka, zookeeper, redis, hive, flink, k8s, OpenTSDB, InfluxDB, yarn)

    hdfs: hdfs官方文档 深入理解HDFS的架构和原理 https://blog.csdn.net/kezhong_wxl/article/details/76573901 HDFS原理解析(总体架构,读写操作流程) http://www.cnblogs.com/duanxz/p/3874009.html 经典漫画讲解HDFS原理 https://blo…

    Redis 2023年4月11日
    00
  • Redis 向集群添加新节点

      1. 启动集群服务(向集群添加新节点,则说明,集群是已知的)。   2. 搭建将要添加到集群的节点     (1)以集群的方式对新添加的节点进行配置:redis.conf.     (2)启动节点实例服务.    3.集群管理 可参考  Redis cluster tutorial 官网指导文档,往往是最新的。 一、启动集群服务:【命令在集群服务器执行】…

    Redis 2023年4月11日
    00
  • docker安装redis并连接

    1.拉取 docker pull redis 2.运行容器 docker run -itd –name redis-test -p 6389:6379 redis –name redis :将运行的容器命名为redis -p 6379:6379 :将本地的6389端口映射到容器的6379端口 3.运行redis服务  进入容器 docker exec -…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部