Openresty 自带 redis.lua 介绍|学习笔记

简介: 快速学习 Openresty 自带 redis.lua 介绍

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第一阶段Openresty 自带 redis.lua 介绍】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/669/detail/11609


Openresty 自带 redis.lua 介绍

 

内容介绍:

一、总体思路

二、操作 redis

 

一、总体思路

前面已经把获取 header 和 body,getpost 信息已经处理完了,在向后开始操作redis。

在整个数据处理流程中包括 redis,数据预处理分析,分析以后将纯爬虫数据写入到redis 当中,写入 redis 以后爬虫就准备好了,在下一步是从 redis 当中读取数据,再到前端展示,先实现一个建议版的,在 redis 中先将数据读取出来,再把流程打通如何剔除后面会讲解,实际上剔除的动作不是做数据分析所关心的,把爬虫计算出来识别出来,写到 redis 中去就好。

实际上第七步是由前端工程师需要进行的操作在 redis 中读出来去做剔除。

简易版先读出数据通过 lua 脚本读出来,后续的剔除操作就比较简单了。

图片1.png

二、操作 redis

1.目标:

掌握 Openresty 连接 redis 用法

2.如何通过 Openresty 读取 redis

Openresty 里面是由 nginx 和 lua 进行集成的,而 lua 里面又集成了大量的精良的以及第三方的一些插件包,lua 里面集成了 redis 了吗?

Openresty 里面有一个 lualip 这样一个包,在 Openresty 下面,lualip 里面有 redis 进入到 redis 中有一个 so 这个不是 lua 的脚本除了 redis 以外有 resty,ll 一下有 redis.lua, 这个项目定义一个本地的变量做调用 locaI _M 是变量的名称,说个就是读取数据的 lua 或者 Openresty 集成的 redis 脚本 

Local    sub = string . sub

Local  byte = string . byte

Local   tcP .= ng ×. Socket . tcp

Local   nu11= ng ×.nu1

IocaI    type = type

local    pairs = pairs

Local     unpack = unpack

Local     setmetatab1e= setmetatable

Local  tonumber = tonumber

local    tostring = tostring

Local    rawget = rawget

Local error = error

local ok , new _ tab =pcal1( require ," table . new '')

if not ok or type ( new _ tab )~=" function " then

new _ tab = function ( narr , nrec ) return end end

locaI _M = new _ tab (0,54)

_ M ._ VERSION =· o .26'

Local   common _ Cmds =

“ redis .1ua"439L,9227c

就以这个脚本为例来看怎么和 redis 进行集成。先将 redis 下载到本地,打开 redis查看里面内容,Openresty 集成的 redis 脚本有 local,oknew_tab,locaI _M,common_cmds 是操作 redis 的一些操作:获取数据,设置数据, _ M. new ( self ) 是自己_ M. 是一个 tab 一个新的 tabnew 是实例化一个 redis 在 java 中实例化需要先 new 一个对象。

所以_ M. new 就是实例化 redis 对象,self 就是自己所以可以认为没有参数,set _ timeout ( self , timeout )

设置了一个超时的时间,_ M.connect 是设置一个连接,redis 类似于数据库对里面数据进行增删改查操作需要先连接上,既然都是以_ M. 开头的,对它进行 found找一个 get,set, 获取字符串类型的没有提供方法,不是没有提供,实际上在 Local   common _ Cmds 中,对字符串进行操作的方法都在这里面,get,set,Mget 实现字符串操作,对list进行操作的方法也在其中,也包括对 hashes 的操作,所以后面写脚本就按照 Local   common _ Cmds 进行书写。

以上就是 Openresty 读取 redis 的介绍,redis 在 pwd 路径下 use/local/Openresty

/lualip/resty 里面有一个 redis.lua 的文件,文件里面是 Openresty 读取 redis 已经集成 redis 的一些 API 或者是一些方法都在其中,后续读取 redis 就从其中调用方法。

local ok , new _ tab peal1( reqruire ," table . new ")

if not ok or type ( new _ cab )~= " function " then

new_tab=function(narr,nrec)return()end

end

local_ M = neW _ tab (0,54)

_M_VERSION=0.26!

local  common_cmds={

local sub comumands

" subscribe "," psubscribe ”

local unsub _ eommands ={

" unsubscribe "," punsubscribe "

local  mt{_index=_M_{}

function _ M. new ( sel f)

local sock , err tcpO )

if not sock thenl

return nil ,err

end

return setmetatable (_sock=sock,_ subscribed = false )

end

function _ M.set _ timeout ( self , timeout )

local sock rawget (se1f,"_ sock ”)

if not sock then

return nil ," not initialized

end

return sock : settimeout ( timeout )

end

functionM . connect (self ·)

LocalSockTaWget(self," sock ")

if not sock then

return nil ," not inicialized" end

self_ SubsCribed = false return sock: connect (..) end

function _ M . set _ keepalive ( self ,

local sock rawget ( self ,"_ sock ")

if not sock then

retarn nil ," not initialized ”

end

if rawget (se1f,

retarn nil " subscribed ") then

" subscribed state "

相关文章
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
504 5
|
6月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1797 7
|
NoSQL Redis
Redis 执行 Lua保证原子性原理
Redis 执行 Lua 保证原子性原理
1028 1
|
10月前
|
缓存 NoSQL 搜索推荐
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
本文介绍了如何通过Lua脚本在Redis中实现分布式锁的原子性操作,避免并发问题。首先讲解了Lua脚本的基本概念及其在Redis中的使用方法,包括通过`eval`指令执行Lua脚本和通过`script load`指令缓存脚本。接着详细展示了如何用Lua脚本实现加锁、解锁及可重入锁的功能,确保同一线程可以多次获取锁而不发生死锁。最后,通过代码示例演示了如何在实际业务中调用这些Lua脚本,确保锁操作的原子性和安全性。
560 6
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
|
10月前
|
NoSQL Redis 数据库
Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
通过本文的介绍,我们详细讲解了 Lua 脚本在 Redis 中的作用、`eval` 命令的使用方法以及 `redis.call` 和 `redis.pcall` 的区别和用法。通过合理使用 Lua 脚本,可以实现复杂的业务逻辑,确保操作的原子性,并减少网络开销,从而提高系统的性能和可靠性。
600 13
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
708 0
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
210 0
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
250 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1794 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
存储 Java C++
lua完整学习笔记
Lua学习笔记,涵盖了Lua的注释、数据结构、标识符、保留字、变量、运算符、函数、流程控制语句、循环语句、table的使用、迭代器以及模块化等基础知识点。
239 3
lua完整学习笔记