• Redis lua_client 伪客户端生命周期


    在《Redis 设计与实现》一书中,第13章关于伪客户端的描述:

    Lua脚本的伪客户端:服务器会在初始化时创建负责执行Lua脚本中包含的Redis命令的伪客户端,并将这个伪客户端关联在服务器状态结构的lua_client属性中。lua_client伪客户端在服务器运行的整个生命期中会一直存在,只有服务器被关闭时,这个客户端才会被关闭。

    AOF文件的伪客户端:服务器在载入aof文件时,会创建用于执行AOF文件包含的redis命令的伪客户端,并在载入完成之后,关闭这个伪客户端。

    问题:为什么lua_client伪客户端在服务器运行的整个生命期中会一直存在?

    在查了些资料后,个人关于 lua_client 的生命周期的理解是这样的:

    版本:自2.6.0起可用。

    时间复杂度:取决于执行的脚本。

    使用Lua脚本的好处:

    • 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。
    • 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
    • 复用。客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。

    (以上参考来源:Redis如何使用lua脚本实例教程-面圈网

    因为Redis使用串行化的方式来执行Redis命令,所以在任何特定时间里,最多都只会有一个脚本能够被放进Lua环境里面运行,因此,整个Redis服务器只需要创建一个Lua环境即可。(第20章 Lua脚本)

    lua_client伪客户端作为Lua环境的协作组件之一,主要功能就是处理Lua脚本中包含的所有Redis命令。因为脚本执行可能是个频繁的操作,当需要的时候不必每次执行都重新创建客户端,所以就会一直保留,直到服务器关闭。

  • 相关阅读:
    OpenCV C++案例实战三十三《缺陷检测》
    ERC-721 隐私泄露问题凸显 三种方案或能缓解
    〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介
    linux0.11-虚拟内存
    使用 snappyjs 压缩数据并解压
    2 Redis的高级数据结构
    如何查看项目中使用的Qt版本
    ElasticSearch搭建集群
    达梦数据库的锁排查方法
    Go学习之路:并发(DAY 3)
  • 原文地址:https://blog.csdn.net/sunqing0316/article/details/128015671