node.js进阶
文章平均质量分 79
node.js进阶
viceen
这个作者很懒,什么都没留下…
展开
-
网络爬虫开发(五)02-爬虫高级——Selenium的使用-反爬虫机制简介 & Selenium的API学习 & 实战之自动打开浏览器输入关键字进行搜索、爬取需要的数据、自动翻页 & 相关爬虫知识总结
爬虫神通广大,用途非常广泛,主要的目标是为了实现自动化程序,解放程序员的双手帮助程序员自动获取一些数据,测试一些软件,甚至自动操作浏览器做很多事情也不乏有些不法分子拿爬虫做一些违法的事情,在此老师希望大家学会爬虫使用在正道上,获取一些我们需要的数据来进行分析同时,在爬取目标网站之前,建议大家浏览该网站的robots.txt,来确保自己爬取的数据在对方允许范围之内爬虫简介爬虫的意义各行各业的爬虫使用http模块爬取数据http模块发送请求使用cheerio库进行DOM解析。原创 2023-11-12 22:23:09 · 2549 阅读 · 1 评论 -
网络爬虫开发(五)01-爬虫高级——Selenium简介 & 根据平台选择安装selenium-webdriver包 & Selenium的基本使用
官方原文介绍:百度百科介绍:Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),[Mozilla Firefox](https://baike.baidu.com/item/Mozilla Firefox/3504923),Safari,Google Chrome,Opera等。原创 2023-11-12 22:15:10 · 946 阅读 · 0 评论 -
网络爬虫开发(四)-爬虫基础——环境准备、定义options接口、抽取公共部分代码、定义抽象方法、实现TeacherPhotos类、实现NewsList类及总结
以上代码重复的地方非常多,可以考虑以面向对象的思想进行封装,进一步的提高代码复用率,为了方便开发,保证代码规范,建议使用TypeScript进行封装以下知识点为扩展内容,需要对面向对象和TypeScript有一定了解!执行tsc --init初始化项目,生成ts配置文件},"src/**/*"],Spider抽象类:定义options接口、抽取公共部分代码// 引入http模块// 创建请求对象 (此时未发送http请求)// 异步的响应// 监听data事件,获取传递过来的数据片段。原创 2023-11-12 22:12:37 · 1544 阅读 · 0 评论 -
网络爬虫开发(三)-爬虫基础——爬取前端渲染网站的注意事项 & 分析ajax请求并爬取(伪造header)-模拟真实浏览器的请求头
大部分新闻网站,现在都采取前后端分离的方式,也就是前端页面先写好模板,等网页加载完毕后,发送Ajax再获取数据,将其渲染到模板中。分析得出对应的ajax请求后,找到其URL,向其发送请求即可。注意:请求头的内容,可以先通过真正的浏览器访问一次后获取。原创 2023-11-12 22:10:22 · 807 阅读 · 0 评论 -
网络爬虫开发(二)-爬虫基础——使用cheerio库解析html并提取img的src属性& 使用download库批量下载图片& encodeURI()函数-解决若有中文文件名,需使用base64编码
npm地址——这是一个核心api按照jquery来设计,专门在服务器上使用,一个微小、快速和优雅的实现简而言之,就是可以再服务器上用这个库来解析HTML代码,并且可以直接使用和jQuery一样的api')$.html()同样也可以通过jQuery的api来获取DOM元素中的属性和内容。原创 2023-11-12 22:05:43 · 498 阅读 · 0 评论 -
网络爬虫开发(一)-爬虫基础——基本介绍-爬虫是请求网站并提取数据的自动化程序、爬虫的基本工作流程 & 实例之发送http请求-爬取网址的网页信息
可以把互联网比做成一张“大网”,爬虫就是在这张大网上不断爬取信息的程序爬虫是请求网站并提取数据的自动化程序向指定的URL发送http请求获取响应(HTML、XML、JSON、二进制等数据)处理数据(解析DOM、解析JSON等)将处理好的数据进行存储。原创 2023-11-12 22:02:59 · 720 阅读 · 0 评论 -
Baas接口标准(四)-留言板案例——实现服务端之数据查询、数据变更 & vue-apollovue实现客户端之整合apollo调用接口基本步骤、查询数据并模板填充、添加留言信息、格式化时间
【代码】Baas接口标准(四)-留言板案例——实现服务端之数据查询、数据变更 & vue-apollovue实现客户端之整合apollo调用接口基本步骤、查询数据并模板填充、添加留言信息、格式化时间。原创 2023-11-06 23:23:29 · 123 阅读 · 0 评论 -
Baas接口标准(三)——GraphQL客户端开发之基本查询、添加操作名称、使用查询参数之变量、指令、别名、通过mutation关键字实现变更操作
按需获取需要的数据。原创 2023-11-06 23:22:47 · 138 阅读 · 0 评论 -
Baas接口标准(二)——对象类型定义规则之用法、定义规则、字段参数的用法之标量类型、枚举类型、列表和非空、输入类型 & 服务端开发-resolver函数参数用法之parent参数、context参数
GraphQL提供一套完善的类型系统,可以约束服务端可以提供哪些数据类型供客户端查询使用# 通过type关键字定义类型,type之后是类型名称(自定义名称)注意事项花括号中是对象的字段信息属性名称是自定义的属性名后面的类型为标量类型(内置类型)GraphQL使用#进行注释。原创 2023-11-06 23:20:32 · 95 阅读 · 0 评论 -
Baas接口标准(一)——GraphQL介绍、和RESTful对比 & GraphQL客户端与服务端交互(接口调用) & apollo-server框架开发之基于Node.js的GraphQL的开发
GraphQL 既是一种用于 API 的查询语言,也是一个满足你数据查询的运行时。是一种接口开发标准,支持常见的服务端开发语言。例如:java、php、Python、Node.js…官网:https://graphql.cn/原创 2023-11-06 23:19:17 · 133 阅读 · 0 评论 -
Web应用开发框架-egg进阶与实战(三)——总结之debug、日志、多进程、错误处理、多实例插件、多进程增强、实战-简易博客
debug日志存储路径开发环境默认生产环境可以指定日志分类errorwarninfodebugnonectx.loggerapp.logger切割大小时间日小时性能默认1秒写入一次多进程相比nodejs原生 新增了一个agent的概念agent应用场景长连接特点出错master不会重启,需要时刻关注日志进程通信messenger特点 挂载在 app 和 agent下面broadcast 所有人。原创 2023-11-04 18:59:35 · 206 阅读 · 0 评论 -
Web应用开发框架-egg进阶与实战(二)02——环境配置与数据库初始化、编写schema、service逻辑提取
增删改查只是服务端的冰山一角,希望同学们能持续的学习。原创 2023-11-04 18:58:47 · 110 阅读 · 0 评论 -
Web应用开发框架-egg进阶与实战(二)01——mongoose简介
使用egg + mongoDb实现一个简易博客的增删改查。简介: mongoos对mongoDb的一层封装和抽象,方便在nodejs中操作mongoDb数据库。文档地址: https://mongoosedoc.top/docs/cnhome.html依赖: mongoDb 和 nodejs。原创 2023-11-04 18:57:44 · 82 阅读 · 0 评论 -
Web应用开发框架-egg进阶与实战(一)——debug调试步骤、日志之日志路径、日志分类、日志级别、如何打印日志、文件日志级别、日志切割、日志影响性能
如果我们在处理请求时需要打印日志,这时候使用 Context Logger,用于记录 Web 行为相关的日志。如果我们想做一些应用级别的日志记录,如记录启动阶段的一些数据信息,可以通过 App Logger 来完成。日志对于 Web 开发的重要性毋庸置疑,它对于监控应用的运行状态、问题排查等都有非常重要的意义。在开发框架和插件时有时会需要在 Agent 进程运行代码,这时使用。日志打印到文件中的同时,为了方便开发,也会同时打印到终端中。框架内置了强大的企业级日志支持,由。默认日志切割方式,在每日。原创 2023-11-04 18:56:24 · 475 阅读 · 0 评论 -
Web应用开发框架-egg(四)——egg总结之egg快速入门、内置对象、运行环境、config配置、中间件、路由、控制器、服务service、插件、定时任务、自定义启动
egg是什么?基于koa封装的一个企业应用框架可以写插件可以根据业务去封装自己的framework约定优于配置egg与koa的guanxiegg继承自koaegg可以基于koa去扩展中间件extend 可以在ctx上挂载一些属性或者方法config快速入门安装自动创建模板编写了第一个controllerrouter里面调用的是命名空间静态资源static是内置的目录 app/public。原创 2023-10-30 23:36:45 · 528 阅读 · 0 评论 -
Web应用开发框架-egg(三)06-基础功能——插件之定义插件、编写插件 & 定时任务 & 自定义启动app
插件机制是我们框架的一大特色。它不但可以保证框架核心的足够精简、稳定、高效,还可以促进业务逻辑的复用,生态圈的形成。Koa 已经有了中间件的机制,为啥还要插件呢?中间件、插件、应用它们之间是什么关系,有什么区别?我们常常需要在应用启动期间进行一些初始化工作,等初始化完成后应用才可以启动成功,并开始对外提供服务。框架提供了统一的入口文件(app.js)进行启动过程自定义,这个文件返回一个 Boot 类,我们可以通过定义 Boot 类中的生命周期方法来执行启动应用过程中的初始化工作。框架提供了这些。原创 2023-10-30 23:36:00 · 438 阅读 · 0 评论 -
Web应用开发框架-egg(三)05-基础功能——控制器之controller介绍与设计技巧、csrf防范与重定向 & service服务的使用场景
简单的说 Controller 负责解析用户的输入,处理后返回相应的结果按照类的方式编写 Controller,不仅可以让我们更好的对 Controller 层代码进行抽象(例如将一些统一的处理抽象成一些私有方法),还可以通过自定义 Controller 基类的方式封装应用中常用的方法。原创 2023-10-30 23:34:52 · 290 阅读 · 0 评论 -
Web应用开发框架-egg(三)04-基础功能——路由之定义Router、restful风格的URL定义、获取路由参数
Router 主要用来描述请求 URL 和具体承担执行动作的 Controller 的对应关系, 框架约定了文件用于统一所有路由规则。通过统一的配置,我们可以避免路由规则逻辑散落在多个地方,从而出现未知的冲突,集中在一起我们可以更方便的来查看全局的路由规则。里面定义 URL 路由规则目录下面实现 Controller${const {} }const {} }const {} }const {} }支持 get,post 等所有 HTTP 方法。原创 2023-10-30 23:33:30 · 207 阅读 · 0 评论 -
Web应用开发框架-egg(三)03-基础功能——中间件之编写中间件、中间件的配置、使用中间件、在框架和插件中使用中间件 & 中间件的通用配置项
中有一个 bodyParser 中间件(框架的加载器会将文件名中的各种分隔符都修改成驼峰形式的变量名),我们想要修改 bodyParser 的配置,只需要在。我们将上面的 gzip 中间件做一个简单的优化,让它支持指定只有当 body 大于配置的 threshold 时才进行 gzip 压缩,我们要在。所有的这些自带中间件的配置项都通过在配置中修改中间件同名配置项进行修改,例如。我们介绍了 Egg 是基于 Koa 实现的,所以 Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于。原创 2023-10-30 23:30:54 · 229 阅读 · 0 评论 -
Web应用开发框架-egg(三)02-基础功能——运行环境 & Config配置之多环境配置、配置写法、配置加载顺序、合并规则、配置结果
框架提供了强大且可扩展的配置功能,可以自动合并应用、插件、框架的配置,按顺序覆盖,且可以根据环境维护不同的配置。配置文件返回的是一个 object 对象,可以覆盖框架的一些配置,应用也可以将自己业务的配置放到这里方便管理。为默认的配置文件,所有环境都会加载这个配置文件,一般也会作为开发环境的默认配置文件。比如在 prod 环境加载一个配置的加载顺序如下,后加载的会覆盖前面的同名配置。当指定 env 时会同时加载对应的配置文件,并覆盖默认配置文件的同名配置。),相对于此运行环境的优先级会更高。原创 2023-10-30 23:29:07 · 732 阅读 · 1 评论 -
Web应用开发框架-egg(三)01-基础功能——目录结构的约定之框架规定的目录、内置插件约定的目录 & 内置对象之Application、context、Request & Response等
它的作用在于我们可以将一些常用的动作抽离在 helper.js 里面成为一个独立的函数,这样可以用 JavaScript 来写复杂的逻辑,避免逻辑分散各处,同时可以更好的编写测试用例。Controller 中的获取方式在上面的例子中已经展示过了,在 Service 中获取和 Controller 中获取的方式一样,在 Middleware 中获取 Context 实例则和。基类一样的属性,它也会在每次请求时进行实例化,因此 Helper 上的所有函数也能获取到当前请求相关的上下文信息。都继承于该基类实现。原创 2023-10-30 23:18:55 · 77 阅读 · 0 评论 -
Web应用开发框架-egg(二)——快速入门之模板渲染、编写helper扩展、编写Middleware、渐进式开发 & egg总结
/ 添加 view 配置mapping: {},</</</</</</一般来说,当应用中有可能会复用到的代码时,直接放到lib/plugin目录去,如例子中的egg-ua。当该插件功能稳定后,即可独立出来作为一个。如此以往,应用中相对复用性较强的代码都会逐渐独立为单独的插件。当你的应用逐渐进化到针对某类业务场景的解决方案时,将其抽象为独立的 framework 进行发布。当在新项目中抽象出的插件,下沉集成到框架后,其他项目只需要简单的重新。原创 2023-10-30 23:17:56 · 118 阅读 · 0 评论 -
Web应用开发框架-egg(一)——Egg入门、Egg与Koa的关系 & 快速入门之编写Controller、静态资源
没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开发者认知不一致很容易犯错。但约定不等于扩展性差,相反 Egg 有很高的扩展性,可以按照团队的约定定制框架。进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。Egg 通过框架聚合这些插件,并根据自己的业务场景定制配置,这样应用的开发成本就变得很低。Egg 选择了 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强。插件,线上环境建议部署到 CDN,无需该插件。原创 2023-10-30 23:16:39 · 243 阅读 · 0 评论 -
Web应用开发框架-koa(五)——koa总结之koa特点、koa-route路由 & 中间件之洋葱模型、异步中间件、中间件的合成 & 错误处理之http状态码、koa抛出错误、错误处理中间件
洋葱模型中有一处发生了错误都会被catch到。再try中执行 next函数。catch next发生的错误。解析post中的body。使用try catch。error事件的监听啊。常见的http状态吗。原创 2023-07-26 23:35:29 · 199 阅读 · 0 评论 -
Web应用开发框架-koa(四)——koa错误处理之状态码 & koa抛错两种方式-try和catch、ctx.app.emit() & koa-body模块处理错误 & koa-body处理文件上传
如果代码运行过程中发生错误,我们需要把错误信息返回给用户。参考链接:https://www.runoob.com/nodejs/nodejs-event.html。本质上,表单就是 POST 方法发送到服务器的键值对。太麻烦,我们可以让最外层的中间件,负责所有中间件的错误处理。模块可以用来从 POST 请求的数据体里面提取键值对。运行过程中一旦出错,Koa 会触发一个。监听这个事件,也可以处理错误。事件,才能让监听函数生效。需要注意的是,如果错误被。方法,用来抛出错误,就是抛出500错误。原创 2023-07-26 23:30:28 · 1198 阅读 · 0 评论 -
Web应用开发框架-koa(三)——koa中间件之概念、洋葱模型-执行顺序、异步中间件、koa-compose中间件合成-compsoe函数
compose的参数是函数,返回的也是一个函数因为除了第一个函数的接受参数,其他函数的接受参数都是上一个函数的返回值,所以初始函数的参数是多元的,而其他函数的接受值是一元的compsoe函数可以接受任意的参数,所有的参数都是函数,且执行方向是自右向左的,初始函数一定放到参数的最右面参考链接: https://segmentfault.com/a/1190000008394749。原创 2023-07-26 23:29:03 · 361 阅读 · 0 评论 -
Web应用开发框架-koa(二)——koa原生路由 & koa-route模块 & koa-static模块请求静态资源之图片、字体、样式表、脚本 & koa路由重定向
如果网站提供静态资源(图片、字体、样式表、脚本…),为它们一个个写路由就很麻烦,也没必要。koa-static。有些场合,服务器需要重定向(redirect)访问请求。比如,用户登陆以后,将他重定向到登陆前的页面。原生路由用起来不太方便,我们可以使用封装好的koa-route。方法可以发出一个302跳转,将用户导向另一个路由。可以获取用户请求的路径,由此实现简单的路由。网站一般都有多个页面。模块封装了这部分的请求。原创 2023-07-25 00:27:07 · 587 阅读 · 0 评论 -
Web应用开发框架-koa(一)——koa入门与使用、context对象 & 读取并返回html片段之response把读取的内容返回给客户端
koa入门与使用egg介绍以及实战adonis简介Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。新下一代, 超前新的语法, es7优雅。原创 2023-07-25 00:26:11 · 361 阅读 · 0 评论 -
NoSQL数据库(五)022-Egg+Redis+MongoDb实现登录流程——业务流程梳理 & 安装依赖与页面编写
【代码】NoSQL数据库(五)022-Egg+Redis+MongoDb实现登录流程——业务流程梳理 & 安装依赖与页面编写。原创 2023-07-19 00:20:42 · 142 阅读 · 0 评论 -
NoSQL数据库(五)021-Egg+Redis+MongoDb实现登录流程——项目介绍、项目架构分析、cookie和session维持登录的原理
需要一些前置知识,大家可以去看Egg的视频。如果nodejs基础比较扎实的同学不看也可以,同学们根据自身情况选择。了解cookie和session的关系从前后端角度全面了解登录流程了解redis在登录流程中的作用因为用户数据和浏览器交互非常频繁,而 redis非常的快,如果使用硬盘型数据库(mongo, mysql)频繁读写可能会遇到一些性能问题。理解登录流程对于前端来讲,非常重要!登录流程在面试中出现的频率的非常高,因为题目比较抽象,所以你很难背诵,可以考察很多方面的知识。原创 2023-07-19 00:17:29 · 227 阅读 · 0 评论 -
NoSQL数据库(五)01-mongoDB入门——介绍与应用场景、安装与可视化工具 & 使用node-mongodb-native进行增删改查
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。mongoD是关系型数据库的补充。原创 2023-07-14 00:32:25 · 168 阅读 · 0 评论 -
NoSQL数据库(四)-memcached——介绍-分布式内存对象缓存系统、安装、api之set设置、add新增、replace替换、append追加
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。本质上,它是一个简洁的key-value存储系统。redis已经包含了memcached的功能,而且更丰富,所有只需了解即可。介绍只有key-value一种数据类型,已经被redis超越apiset 赋值,新旧add 只能赋新值replace 只能改旧值。原创 2023-07-14 00:30:28 · 118 阅读 · 0 评论 -
NoSQL数据库(三)05-Redis进阶与实战——总结之事务-错误处理和watch、过期时间、sort排序、by排序 & noedjs操作redis数据库
事务执行多条命令啊,只要出错,全部中断MULTI多种错误处理语法错误: 可以中断全部运行错误: 无法中断watch: 监测一个字段,只要被修改之后,后续的事务无法执行过期时间命令EXPIRE, PEXPIRE 秒,毫秒返回值: OKTTL返回值:剩余多久过期-1: 永久存在-2: 已经过期或者字段不存在UNIX时间EXPIREAT 和 PEXPIREAT新的排序方式 SORT列表,有序集合数字,字符串(编码)DESC进行 降序。原创 2023-07-13 00:32:09 · 88 阅读 · 0 评论 -
NoSQL数据库(三)04-Redis进阶与实战——nodejs操作redis数据库之ioredis更新属于node_redis改良版 & ioredis的可视化工具安装、基本语法、管道与事务
node_redis星星更多但是我们选择ioredis,因为ioredis更新,属于node_redis改良版。不过ioredis与node_redis的作者正在讨论将两者合为一个库。对redis实现的管道,避免出现前面提到的往返时延问题。原创 2023-07-13 00:31:13 · 423 阅读 · 0 评论 -
NoSQL数据库(三)03-Redis进阶与实战——EXPIRE实现服务器缓存数据 & sort实现排序之对列表类型、有序集合和非数字类型进行排序 & Redis的底层通信协议对管道提供支持
实际开发中会发现很难为缓存键设置合理的过期时间,为此可以限制 Redis 能够使用的最大内存,并让Redis按照一定的规则淘汰不需要的缓存键,这种方式在只将Redis用作缓存系统时非常实用。又比如一个存储用户性别的字符串类型键的取值是male和female,我们可以将其修改成m和f来为每条记录节约几个字节的空间,甚至通过二进制的0和1来表示。如果提供了 BY 参数,SORT 命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个“*”并获取其值,然后依据该值对元素排序。原创 2023-07-13 00:29:32 · 133 阅读 · 0 评论 -
NoSQL数据库(三)02-Redis进阶与实战——EXPIRE命令设置过期时间-实现定期检测删除过期数据 & EXPIRE实现和优化访问服务器频率限制
如果一个用户在一分钟的第一秒访问了一次博客,在同一分钟的最后一秒访问了9次,又在下一分钟的第一秒访问了10次,这样的访问是可以通过现在的访问频率限制的,但实际上该用户在2秒内访问了19次博客,这与每个用户每分钟只能访问10次的限制差距较大。这段代码存在一个不太明显的问题:假如程序执行完倒数第二行后突然因为某种原因退出了,没能够为该键设置过期时间,那么该键会永久存在,导致使用对应的IP的用户在管理员手动删除该键前最多只能访问100次博客,这是一个很严重的问题。,使用SET或GETSET命令为键赋值也会。原创 2023-07-13 00:27:20 · 1018 阅读 · 0 评论 -
NoSQL数据库(三)01-Redis进阶与实战——redis事务命令与错误处理、事务中的watch命令
我们已经知道在一个事务中只有当所有命令都依次执行完后才能得到每个结果的返回值,可是有些情况下需要先获得一条命令的返回值,然后再根据这个值执行下一条命令。WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。我们可以利用WATCH来重构之前实现的incr函数来避免竞态// 配置 });if(!} else {} }${// 配置 });if(!} else {原创 2023-07-13 00:26:28 · 95 阅读 · 0 评论 -
NoSQL数据库(二)06——redis总结之发展、特点、安装、操作 & 数据类型之字符串数据类型、散列、列表、集合、有序集合
发展作者 2 人开源: 2009特点数据结构- 字典key支持多种类型持久化功能丰富缓存消息队列api简单安装window安装 自行百度操作redis-server 起服务redis-cli 命令行操作数据库redis.conf端口数据库连接数数据同步的配置字符串数据类型最大存储 512M命令SET GETINCR 原子化文章存取的例子存储 JSON序列化之后的字符串读取 将字符串转为对象扩展命令。原创 2023-07-13 00:25:37 · 62 阅读 · 0 评论 -
NoSQL数据库(二)05-Redis数据类型——有序集合类型之介绍、命令-增加元素、获得元素的分数、获得排名在某个范围的元素列表、获得指定分数范围的元素、增加某个元素的分数
有序集合类型(sorted set)的特点从它的名字中就可以猜到,它与上一节介绍的集合类型的区别就是“有序”二字。在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是它们的分数却可以相同。有序集合类型在某些方面和列表类型有些相似。(1)二者都是有序的。(2)二者都可以获得某一范围的元素。原创 2023-07-11 00:24:46 · 197 阅读 · 0 评论 -
NoSQL数据库(二)04-Redis数据类型——集合类型之介绍、命令-增加和删除元素、获得集合中的所有元素、判断元素是否在集合中、集合间运算
Redis 有一种数据类型很适合存储文章的标签,它就是集合类型。集合的概念高中的数学课就学习过。在集合中的每个元素都是不同的,且没有顺序。一个集合类型(set)键可以存储至多2的32次方 −1个(相信这个数字对大家来说已经很熟悉了)字符串。集合类型和列表类型有相似之处,但很容易将它们区分开来,集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是O(1)。原创 2023-07-11 00:22:38 · 343 阅读 · 0 评论