`
hello123654789
  • 浏览: 12080 次
文章分类
社区版块
存档分类
最新评论

Redis缓存技术学习系列之事务处理

阅读更多
在本系列的第一篇文章中,我们主要针对Redis中的“键”和“值”进行了学习。我们可以注意到,Redis是一个C/S架构的数据库,在我们目前的认知中,它是通过终端中的一条条命令来存储和读取的,即它是一个非常典型的“请求-响应”模型。可是我们知道在实际的应用中,我们要面对的或许是更为复杂的业务逻辑,因为Redis中不存在传统关系型数据库中表的概念,因此在使用Redis的过程中,我们要面对两个实际的问题,即如何更好的维护数据库中的”键“、如何在高效执行命令的同时保证命令执行成功。对于前者,我认为这是一个设计上的问题,而对于后者,我认为这是一个技术上的问题。所以,这篇文章的核心内容就是找到这两个问题的答案。带着这样的问题出发,我们就可以正式进入这篇文章的主题:Redis中的事务处理。

从数据库事务说起

​通常我们提及数据库都不可避免的要提到事务,那么什么是事务呢?事务是指作为单个逻辑工作单元执行的一系列操作。所以,首先事务是一系列操作,这一系列操作具有二态性,即完全地执行或者完全地不执行。因此事务处理可以确保除非事务单元内的所有操作的成功完成,否则不会永久更新面向数据的资源。我们这里举一个例子,数据库中除查询操作以外,插入(Insert)、删除(Delete)和更新(Update)这三种操作都会对数据造成影响,因为事务处理能够保证一系列操作可以完全地执行或者完全不执行,因此在一个事务被提交以后,该事务中的任何一条SQL语句在被执行的时候,都会生成一条撤销日志(Undo Log),而撤销日志中记录的是和当前擦作完全相反的操作,比如删除的相反操作是插入,插入的相反操作是删除等。我们通常所说的事务回滚其实就是去执行这些插销日志里的相反操作,这同样告诉我们一个道理,只有事务中的一系列操作完全执行的情况下可以回滚,如果是在意外情况下导致事务中的一系列操作没有完全执行,这个时候我们是不能保证数据一定可以回滚的。

​在数据库相关理论中,一个逻辑工作单元想要成为事务,就必须满足ACID,即原子性、一致性、隔离性和持久性。(1):原子性这个概念其实就是指,一个事务内的所有SQL操作都是一个整体,因此只有所有的SQL操作都完全执行成功,该事务方可以认为提交成功。如果在提交事务过程中某一条SQL语句执行失败,则整个事务必须回滚到事务提交前的状态。(2):而一致性这个概念则是指,事务在完成的时候,必须要保证所有的数据都保持一致的状态,而落实到数据库的各个组成部分上,则要求开发人员能够保证数据、索引、约束、日志等在事务前后具备一致性。(3):隔离性这个概念主要针对并发,其核心思想就是不同的并发事务对数据产生的修改必须是相互隔离的,假设有两个不同的事务A和B并发执行,那么对A来讲,它在执行前的状态只有两种,即B执行前和B执行后。同理,对B来讲同样是如此,这样的特性我们就称为隔离性。(4):持久性相对简单,是指事务完成以后它对数据的影响是永久性的。

Redis中的事务处理

​好了,截止到目前为止,我们对数据库中事务处理的相关理论有了一个基本的认识,或许这个世界上的数据库系统千差万别,但我相信在事务处理这个问题上它们最终会殊途同归,就像我们解决并发过程中的冲突问题,常规的做法依然是加锁一样,这是我之所以要花费精力去理解和解释这些理论知识的原因,技术可谓是日新月异,如果我们总是一味地为新技术而疲于奔命,那么或许我们会渐渐地失去对这个行业的热爱,我相信原理永远比框架更为重要,没有系统学习过计算机专业的课程,这件事情让我至今都颇为遗憾。Redis中的事务是可以视为一个队列,即我们可以通过MULTI开始一个事务,这相当于我们声明了一个命令队列。接下来,我们向Redis中提交的每条命令,都会被排入这个命令队列。当我们输入EXEC命令时,将触发当前事务,这相当于我们从命令队列中取出命令并执行,所以Redis中一个事务从开始到执行会经历开始事务、命令入队和执行事务三个阶段。下面是一个在Redis中使用事务的简单示例:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET Book_Name "GIt Pro"
QUEUED
127.0.0.1:6379> SADD Program_Language "C++" "C#" "Jave" "Python"
QUEUED
127.0.0.1:6379> GET Book_Name
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 4
3) "GIt Pro"

我们可以注意到Redis中的事务和通常意义上的事务基本上是一致的,即

事务是由一系列操作组成的单个逻辑工作执行单元。特别地,因为在Redis中命令是存储在一个队列中,所以,事务中的所有命令都会按顺序执行,并且在执行事务的过程中不会被客户端发送的其它命令中断。
事务是一个原子操作,事物中的命令只有两种执行结果,即全部执行或者全部不执行。如果客户端在使用MULTI命令开启事务后因为意外而没有执行EXEC命令,则事务中的所有命令都不会执行。同理,如果客户端在使用MULTI命令开启事务后执行EXEC命令,则事务中的所有命令都会执行。
Redis中的事务可以使用DISCARD命令来清空一个命令队列,并放弃对事务的执行。如果命令在入队时发生错误,Redis将在客户端调用EXEC命令时拒绝执行并取消事务,但是在EXEC命令执行后发生的错误,Redis将选择自动忽略。
我们知道,常见的并发控制方案主要有悲观锁和乐观锁两种方案,这里首先来解释下这两种概念。所谓悲观锁,顾名思义是一种悲观的策略,悲观锁认为:在对任何记录做修改前都应该加锁,如果加锁失败则表明该机录正在被修改,此时应该抛出异常;如果加锁成功则修改记录并在事务完成后解锁;如果有其它人修改则应该等待当前修改解锁或者是抛出异常。而所谓乐观锁,顾名思义是一种乐观的策略,乐观锁认为:每次从记录中查找数据别人都不会修改,因此这个过程中不需要加锁,但是在更新记录的时候,会通过版本号来判断别人是否修改过当前记录。

通常来讲,乐观锁适合在写冲突相对较少的场合下,悲观锁适合在写冲突相对较多的场合下。Redis中提供了一种称为check-and-set的机制,该机制主要通过WATCH命令来实现,其原理正是基于乐观锁的策略,Redis会在执行EXEC命令前检查被监视的键对应的值是否发生变化,如果该值发生变化表明有人修改过这个键中存储的值,此时Redis将会自动取消当前事务。我们来看这个简单的例子:

WATCH Record_Count
val = GET Record_Count
val = val + 1
MULTI
SET Record_Count $val
EXEC

在这个例子中,我们尝试在事务中对Record_Count做一个自增操作,这段代码在非并发的情况下是没有问题的,可是在并发的情况下,如果在执行EXEC命令前有一个用户修改了Record_Count的值,那么我们此时的结果就会比期望的结果小1,现在我们有了WATCH,Redis就会对Record_Count进行监听,当Redis监听到该值发生变化的时候,这个事务就会被自动取消,进而避免造成冲突。

谈谈Redis中键的管理问题

​其实从切题的角度来讲,这篇博客基本上说清楚了事务处理问题,因此这篇博客虽然没有给大家带来多少惊喜,却依然可以非常恰到好处的结题,可是因为之前有朋友在博客中留言并问到Redis的键管理的问题,所以博主决定在这里简单的讨论下这个问题,鉴于博主和大家一样都是感刚接触Redis,所以下面的观点仅仅是一家之言,如果有疑问可以在博客中留言,欢迎大家批评指正。我认为Redis中的键的管理,基本上有两种策略,即惰性删除和定期删除,而实际上这正是Redis默认的键删除策略:

redis使用惰性删除和定期删除两种策略来删除过期的键:惰性删除策略在碰到过期键时方进行删除操作,定期删除策略则每隔一段时间主动查找并删除过期键。
所以,基于这两种键删除策略,我们可以想到的做法有:

对于临时变量可以采用临时键来存储,在数据库全局设定一个过期时间,由Redis在键过期后自动删除。
对于持久化数据可以采用普通键来存储,通过服务器和客户端间定义协议来由客户端主动删除键。
对于不同模块中的键采取统一规范的命名规则来命名键,从而解决Redis中键管理混乱的问题。
设计合理的键回收机制,避免Redis使用超过95%以上的内存,或者通过设置Redis中的最大内存容量及其内存策略来主动触发Redis对键的淘汰。具体可以参考:Sunnyxd - Redis学习笔记-事务、键空间的维护与性能
好了,这篇文章就是这样了,希望大家喜欢,下篇见!


源码来源: minglisoft.cn/technology
分享到:
评论

相关推荐

    Java毕业设计-基于SSM框架的大学生社团管理系统带lw(源码+演示视频+说明).rar

    Java毕业设计-基于SSM框架的大学生社团管理系统带lw(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:438】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 实现了社长管理,社团信息管理,社团分类管理,社团加入信息管理,社团成员登记管理,活动信息管理等功能。

    基于javaEE+Mysql实现的超市积分管理系统(源码+数据库sql+论文+视频齐全)

    【作品名称】:基于javaEE+Mysql实现的超市积分管理系统(源码+数据库sql+论文+视频齐全) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 超市会员积分管理系统主要用于实现了企业管理数据统计等。本系统结构如下: (1)网络会员管理中心界面: 会员修改密码信息模块:实现会员密码功能; 会员登陆模块:实现会员登陆功能; 会员注册模块:实现会员注册功能; 留言板模块:实现留言板留言功能 (2)后台管理界面: 系统用户管理模块:实现管理员的增加、查看功能; 会员信息管理模块:实现会员信息的增加、修改、查看功能; 注册用户管理模块:实现注册用户的增加、修改、查看功能; 会员卡管理模块:实现会员卡信息的增加、查看功能; 商品销售管理模块:实现商品信息的增加、查看功能; 会员积分管理模块:实现合作公司信息的增加、查看功能; 信息统计模块:实现数据统计报表功能; 留言板模块:实现留言板信息的增加、修改、查看功能;

    node-v6.9.4-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.13.1-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    learn.py

    learn.py

    node-v18.9.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    《深度学习入门:基于Python的理论与实现》 动手写的代码.zip

    《深度学习入门:基于Python的理论与实现》 动手写的代码.zip

    基于JSP毕业设计-数据库连接池的研究与实现(源代码+论文).zip

    基于JSP毕业设计-数据库连接池的研究与实现(源代码+论文).zip 在基于JDBC的数据库实际应用开发中,对数据库连接的管理是一个重点也是一个难点,频繁对数据库的连接与关闭操作、多客户对数据库的并发访问,一定程度上决定了WEB系统的响应以及应用性能。使用数据库连接池方式能对数据库的连接进行管理和维护,上层应用程序通过数据库连接池使用数据库资源能提升系统性能,充分利用系统资源。文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为高效的连接池管理策略,在这种策略思想的指导下实际开发出一个数据库连接池模块,使得上层应用通过本连接池访问数据库资源变得相对高效和容易,从实际上论证了这种设计方案的可行性。 关键词:连接池;数据库;JDBC;并发访问

    node-v0.12.12-darwin-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    什么是银行家算法以及举例

    银行家算法(Banker's Algorithm)是一种用于避免系统中进程死锁(Deadlock)的算法。在操作系统中,并行进程可能会因为资源竞争而进入死锁状态,即每个进程都在等待系统资源,但没有进程能够继续执行。银行家算法是一种资源分配算法,它根据当前系统资源状态来做出资源分配决策,以确保进程能够安全地请求和释放资源,从而避免死锁的发生。 银行家算法基于以下假设和原则: 1. 每个进程提前声明自己所需的最大资源数目,以及当前已分配和剩余的资源数目。 2. 在分配资源之前,系统会检查该分配是否会导致未来的资源不足,如果不会,就分配资源;如果可能导致资源短缺,则不分配资源,直到可以确保分配不会导致死锁。 3. 系统会维护一个安全序列,保证当前系统状态下没有进程会因为资源分配不足而无法继续执行。 银行家算法的主要步骤如下: 1. 将进程的最大需求矩阵max[][]、当前占用资源矩阵alloc[]和剩余资源矩阵available[]进行初始化。 2. 判断每个进程的需要资源和剩余资源是否匹配,如果匹配则分配资源,更新占用资源矩阵和剩余资源矩阵。 3. 判断是否存在安全序列,如果存在则执行

    MCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    node-v6.12.3-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v19.7.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    高斯课堂-讲义 学习资料

    高斯课堂-讲义 学习资料

    node-v4.9.0-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.17.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于物理模型+深度学习的MPI重建方法.zip

    基于物理模型+深度学习的MPI重建方法.zip

    基于SSM+JSP的课程辅导网站毕业设计(源码+录像+说明).rar

    基于SSM+JSP的课程辅导网站毕业设计(源码+录像+说明).rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:421】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 这次开发的课程辅导网站有学生,教师,管理员。 管理员功能有教师信息管理,学生信息管理,教学资源管理,推荐课程管理,公告信息管理。 教师功能有教学资源管理,推荐课程管理,公告信息管理。 学生功能有查看和收藏教学资源信息,查看和收藏推荐课程信息。

    node-v6.14.2-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    zookeeper的设计与使用(集群部署,dubbo,分布式锁,master选举,负载均衡,watch,权限等)

    zookeeper之分布式环境搭建

Global site tag (gtag.js) - Google Analytics