免费虚拟空间msyql,MySQL如何使用?
MySQL是一种流行的开源关系型数据库管理系统,以下是MySQL的使用方法:
1. 下载和安装MySQL:您可以从MySQL官方网站下载MySQL,下载相应的安装程序并按照安装向导进行安装。
2. 创建和连接数据库:在MySQL中,您可以使用命令行工具或可视化工具(如MySQL Workbench)来创建和连接数据库。使用命令行工具,可以通过输入“mysql -u 用户名 -p”命令连接MySQL服务器,并输入密码访问MySQL。使用可视化工具,可以通过界面轻松管理数据库,包括创建、修改、删除数据库等。
3. 创建和管理表格:在MySQL中,您可以使用CREATE TABLE语句来创建表格。这将定义表格的名称、列名、数据类型和约束等信息。使用ALTER TABLE语句,可以修改表格定义,添加、修改或删除列等。使用GRANT和REVOKE语句,可以授予或撤销用户对数据库和表格的访问权限。
4. 插入和查询数据:在MySQL中,使用INSERT INTO语句来插入数据。它将指定表格名称和数据。使用SELECT语句查询表格数据。您可以指定字段和筛选条件,并使用ORDER BY语句对结果进行排序。
5. 创建和使用视图:在MySQL中,您可以使用CREATE VIEW语句创建视图。视图是一个虚拟表,类似于SELECT语句的结果。它可以像表格一样使用,但不存储任何数据。视图可以与其他表格进行连接,过滤和组合查询结果。
以上是MySQL的基本使用方法。如果您想深入学习MySQL的使用,可以查阅官方文档或参加大量可用的在线课程和教程。
云端托管是?
云托管支持通过云资源访问应用程序和 Web 站点。与传统托管方法不同,解决方案不是部署在单个服务器上。而是通过相互连接的虚拟和物理云服务器构成的网络托管应用程序或 Web 站点,确保更高的灵活性和可扩展性。
主要功能:
应用程序和解决方案部署在云网络上,而不是本地单一服务器上。
支持扩展资源以满足用户需求。
企业只需按使用的资源付费。
云托管可以可以支持 SQL(包含 MySQL)或 NoSQL 数据库。
利用 API、Web 门户网站和移动应用,自动执行和控制解决方案。
个人博客网站怎么做网站空间?
首先,要有一个空间来存放静态文件和数据库文件,这个你可以找找香港的空间,因为不用做ICP的备案啊,虽然慢点,但是你这不是非营业性的嘛,略微慢一点也可以接受的。可以选择一个虚拟的服务器,虽然IP是共享的,但是应用是没有问题的,便宜嘛。这个有两百块足够了。
然后你要有一个域名来指向这个空间,你可以去腾讯或阿里去,先想好域名,然后去查一下是否可以注册,以COM为后缀的为最好,NET为次之,如果已经让人抢了就换一个,真到可以注册为止。这个有六十块足够了。
然后通过域名管理,把域名指向到空间。指向完成后还要在空间里设置一下,把域名和空间对应绑定起来才可以的。
接下来就是大戏了,你需要一个开源的程序。
如果你做个人的博客,推荐用WORDPRESS,开源的,中文的,还不要钱。
如果你是做企业的网站,做个公司介绍和产品的展示什么的,推荐用米拓,免费的那个就可以了,也不要钱。
如果你想做个论坛,推荐Discuz!,这个也是免费的,不要钱的。
选择好开源的程序,下载到本地,然后上传到服务器空间里,通过你的域名进去安装。在安装时需要你做个数据库,建立一个数据库,这个每个空间都不一样,不也过差不多,都会有相关的帮助的。一般的空间都用的是MYSQL的数据库。
有什么内网监控的运维系统?
推荐10款内网监控系统,您可以了解一下,有免费开源的系统应用。
1、Solarwinds Network Performance Monitor
Solarwinds目前是局域网技术市场的重要参与者。该公司为网络管理员生产一系列产品,可以单独购买,也可以组合形成一个完整的网络管理系统。
你不必承诺购买所有其他模块以使用网络性能监控,但是一旦你习惯了LAN监控工具,可能很想看看其他的Solarwinds实用程序。这个工具的关键特性使其成为本文列表中的最大赢家,它是一个强大的仪表板。只需一眼就能全面了解整个网络的性能。通过图形演示即时可以看到网络活动的实时指标,包括饼图和折线图。
如果你负责多个站点,则可以通过其远程监控功能扩展Network Performance Monitor的能力。这样,你就可以从一个中心位置管理广域网中的所有设备。
总览视图的四个面板之一包括当天发生的严重事件列表。提供给此总览页面的实时数据来自SNMP方法。大多数新的网络兼容设备都带有预装在固件中的SNMP功能,Network Performance Monitor会自动检测设备代理并与之交互,以便随时了解设备状态。
这些实时状态警报是监控系统的核心,但你不希望被提供给监控平台的每条状态消息所淹没。可以自定义界面以过滤状态警报,并根据可能出现的不同网络活动条件通知不同的团队成员。如果你负责由一组专家支持的大型网络,这可以帮助你更有效地管理时间。如果你的大量硬件支持外包,此工具特别有用。会直接通知服务提供商,因此你无需浪费时间来寻求支持。
监控包管理有线和无线网络。你可以向下获取网络上每个节点的详细信息,以检查问题并跟踪利用率。同样,节点详细信息屏幕具有图形显示,可让你全面了解性能。
Network Performance Monitor面向大型企业网络,入门级系统售价为2895美元。价格会根据你网络上的节点数量而增加。因此,如果你只有一个小型网络和非常紧张的预算,这个全面的局域网监控工具可能不适合你。
2、WhatsUp Gold
来自Ipswitch的WhatsUp Gold非常简单,你不会花太多时间学习如何充分利用监控系统。对于不需要远程站点发生的事件的详细信息的小型网络管理员来说,这是一个优势。该软件将通过自动发现模块自行设置其数据库。这将映射所有节点及其分配的IP地址。
使用SNMP技术执行持续的实时监控。SNMP陷阱消息使设备代理能够通知中央管理控制台故障情况。服务器和存储性能指标包含在此监控系统中。该软件中的网络流量分析工具与NetFlow,sFlow,J-Flow,NSEL和IPFIX兼容。
仪表板包含状态的红色/绿色编码,以使警报和性能问题非常容易发现。你可以通过短信或电子邮件收到发送给你的警报,这使你可以继续执行其他任务而不会忽略网络状态。通过报告工具,你可以通过指定要显示的数据列以及显示的顺序来自定义报告。
监控扩展到云服务。这使你的管理团队能够跟踪云系统的利用率。这有助于评估价值,还可以帮助你验证云服务提供商。
你可以使用WhatsUp Gold监控Web应用程序的性能。系统生成的典型指标包括请求数,响应时间和带宽容量。WhatsUp Gold的另一个功能是其配置管理模块,该功能超越了网络监控。这使你可以备份网络设备的配置。它将监控版本更改和软件安装。这使你可以跟踪网络上的所有软件,包括未经授权的安装。
如果你使用虚拟终端,那么WhatsUP Gold已经为你提供服务。监控系统可以与Hyper-V/VMWare交互并映射你的虚拟环境。可以记录虚拟机上的使用和负载,并识别为虚拟环境提供服务的流量。
一个小企业可能只有一个单站点网络。但是,随着拓展业务,可能会对WhatsUp Gold的远程监控和管理设施感兴趣。这些功能使你可以将所有网络管理任务集中在一个位置,从而降低在每个站点上使用网络运维的成本。
3、Paessler PRTG
Paessler PRTG系统涵盖服务器监控以及LAN和WAN监控。驱动此监控实用程序的基础技术是NetFlow系统。这可以实时跟踪网络周围的数据包传输速率。数据包嗅探器实用程序提供了一个向下查看协议级别的向下钻取实用程序。然而,监控不仅仅是观察流量的任务。Paessler PRTG LAN监控功能依靠SNMP为硬件状态提供警报。SNMP提供的警报使网络管理员能够始终领先于危机。如果你可以在硬件故障之前保持领先并在用户呼叫开始失控之前修复它,你可以在支持台上节省大量成本。
SNMP的一大好处是它使用的带宽非常少,因此使用此套件进行监控不会降低网络速度。Paessler系统的仪表板包括图形,图表,为你提供有关网络整体状态的即时信息。你可以查询网络上的各个节点以获取包含实时数据的即时状态报告。这些特定于设备的页面包含易于理解的图形,整个仪表板可以从网络上的任何计算机以及平板电脑和智能手机访问。
PRTG对包括互联网连接和云服务在内的多站点运营特别有用。借助Paessler的远程探测技术,可以将所有网络管理功能集中在一个位置,远程访问每个站点的LAN。
Paessler PRTG许多安装过程都是自动化的,集成的网络发现功能可以自动映射拓扑。LAN监控工具包括收集每个设备的状态信息的模板。这为监控工作带来了标准化格式,使你能够同等关注网络上的所有设备。PRTG监控系统的许多方面都可以定制,为你提供对网络成功至关重要的通知和状态。
Paessler的PRTG免费试用允许无限数量的传感器,但仅适用于30天。还有一个免费软件版本,旨在帮助小企业成长,目前允许最多100个传感器无限期使用。
4、OpManager
OpManager由ManageEngine制作,ManageEngine是网络软件行业的另一个重要参与者。你可以获得免费版本的OpManager系统,以熟悉其功能并正确监控你的小型企业网络。
你可以使用免费的OpManager监控多达10台设备。但是,你仍然可以获得付费版本用户获得的相同级别的系统通知。监控方法的引擎使用SNMP。它内置于所有新的网络兼容性硬件中,因此你可以自动从连接到网络的所有设备获得有关网络活动的实时反馈。另一种支持OpManager系统的常用技术是NetFlow流量监控方法。
无论你使用的是免费系统,还是选择付费,该软件都可以加载到Linux或Windows上。它包括与基于SQL的数据库以及MySQL,Active Directory和Eventlog交互的功能。
如果你正在考虑购买OpManager系统,可以选择两个计划:Essential和Enterprise。使用Essential计划最多可管理1000个节点,使用企业软件包最多可管理10000个节点。这两个选项都可以通过远程监控和QoS功能将其监控扩展到WLAN和语音系统。
OpManager的免费版本无法获得的功能是自动发现实用程序。这将映射你的网络并在仪表板中以漂亮的图形显示它。屏幕上显示的拓扑基于真实情况,因此可以获得整个网络的可视化,即使它是全局的。仪表板主页的顶部包含微型图形,图表和表盘。虽然如果点击它们,每个都会全屏显示,但这些图标显示的颜色编码可以很容易地快速浏览网络的状态。
仪表板包括设备向下研究,可以获得平板电脑和智能手机的应用程序,无论你身在何处,都可以访问网络状态信息。免费的OpManager的存在对小型企业来说是个好消息。但是,跳到付费版本将是一个小小的飞跃。如果公司提供的入门级软件包可以覆盖400或500个节点,以帮助小型企业进入中型企业领域,那将是一件好事。
5、Nagios Core和Nagios XI
Nagios的开源网络管理监控软件,完全免费使用。这个免费系统的接口叫做Nagios Core,不是很全面。你将获得主要下载的基本Web界面,然后你可以搜索Nagios Core社区页面以查找其他用户为自己开发并愿意共享的插件和界面。
如果你没有LAN监控工具的预算,Nagios Core系统是一个很好的选择。免费版本的Nagios XI免费但有限制,只能使用它来监控七个节点。但是,此优惠以及两个等级的付费使用意味着Nagios XI适用于所有规模的网络。
标准付费版本的售价为1995美元,网络上至少有100个节点,企业版起价为3495美元。这是一次性购买价格,包括访问电子邮件支持和社区论坛。可以支付额外的电话支持。
使用Nagios XI,可以获得Nagios Core的实时监控功能,但收集的数据将以更易于理解的格式进行管理,呈现和过滤。仪表板中的图形为你完成所有工作。你可以立即看到网络上存在问题的位置。界面页面包括图表,图形,可帮助一目了然地获得性能数据。
Nagios XI系统易于设置,因为该软件包括自动发现功能,因此它可以自行映射网络。将设备添加到网络时,此功能非常有用。配置向导可帮助你根据自己的喜好调整界面。可以创建用户组和个人帐户,以委派团队成员对数据的部分访问权限。
Nagios能够监控远程站点上的设备,可以通过在这些服务器上安装远程程序执行代理来深化服务器物理状态的远程监控功能。
订阅选项的范围,包括Nagios Core和用于小型网络的免费版Nagios XI,意味着该系统具有真正的可扩展性。只需安装软件,Nagios Core即可升级到Nagios XI。当你从免费的Nagios XI切换到标准版本,然后切换到Enterprise软件包时,你不会丢失任何自定义设置。这对于快速扩张的公司来说是一个非常好的特性。
6、Pandora NMS
Pandora NMS安装以网络扫描开始,使系统能够映射拓扑。网络拓扑只是仪表板中包含的图形之一,可帮助你一目了然地跟踪系统。
Pandora NMS的监控功能基于SNMP。你的中央网络管理器节点将不断轮询系统以跟踪设备状态。标准SNMP警报会报告出现的关键情况,而无需等待网络管理员的状态请求。Pandora引擎能够使用SNMPv1,v2c和v3与设备通信。
Pandora软件包不仅涵盖实时网络监控。更广泛的系统,称为Pandora FMS,包括地址管理以及内置IPAM。IP地址管理器可以使用IPv4和IPv6地址运行。
Pandora FMS的第三个要素是其配置管理系统,它可以跟踪你公司的软件补丁状态并检测系统上的流氓软件。
这种组合是否会引起你的兴趣取决于你是否已经拥有一个满意的DDI套件和配置管理系统。但是,如果你正在寻找一个全新的网络工具包,这个选项可以很好地为你服务。
如果你拥有多站点网络,则可以通过远程监控将企业WAN的所有管理集中到一个位置。但是,可以在仪表板中划分职责和系统访问权限,以限制现场仅访问其子网-仪表板的内容可完全自定义。还可以在控制台中定义角色,以便部分访问仪表板的控件,使初级员工能够安全地参与并上传管理员以访问报告功能。
Pandora NMS是一款西班牙的产品,其价格以欧元计算。基本网络监控软件包免费提供其开源软件的“社区”版本。功能齐全的网络管理系统起价为2625欧元,价格随着网络节点的增加而增加。该价格包括一年的维护和支持包。适用于大型网络的企业解决方案包括云服务跟踪。该计划第一年起价为3750欧元,包括一年的支持和维护。
一些额外的功能可作为附加功能提供,但包含在企业计划中。它们包括远程访问系统和SAP监控。如果需要,可以考虑升级到企业计划,其中包含价格中的额外功能。
7、Zenoss
Zenoss Core是一个开源网络监控系统,可以免费安装。这个实时网络监控和分析软件有两个付费版本。可以获得一个名为Zenoss Service Dynamics的现场版本,或者可以拥有一个托管的基于云的服务,称为Zenoss-as-a-service。
无论选择哪种方式,都将获得自动发现模块。这会自动映射你的网络拓扑并记录连接到系统的所有设备。最多可以使用1000个网络设备,但使用这两种付费服务时,可以拥有的设备数量不受限制。
监控不仅限于标准网络设备,终端和打印机。它还将监视电源,服务器机架,端口,风扇等。
网络监控系统基于SNMP。可以自动兼容当前使用网络连接的所有新设备。SNMP警报提供直接反馈到仪表板的设备故障通知。NetFlow监控网络周围的流量。
无论选择使用现场系统还是基于云的Zenoss LAN监控服务版本,仪表板都是基于Web的,这意味着可以从任何GUI操作系统访问。可以通过在每个站点上安装收集器来扩展Zenoss的功能以覆盖多个站点并实现远程监控。
ZenPacks可以扩展标准监控软件。这些是通知附件,可满足一系列知名设备制造商生产的特定硬件的需求。无需安装所有可用的ZenPack。但是,了解特定设备的ZenPack的存在将使你更容易为多供应商环境购买新设备。
Zenoss网络监控软件的所有类型都包括服务器和存储监控功能,它们都包括IP地址管理功能。
8、Dynatrace
Dynatrace与此列表中的所有其他网络监视系统不同。它侧重于网络连接的性能,而不是连接到网络的设备的状态。网络的图形表示令人惊叹,它们可以突出显示物理布线复杂的位置,让你了解如何更好地布置网络。
实时网络监控扩展到虚拟环境。与物理网络一样,Dynatrace将发现你的连接并映射它们。虚拟环境的布局显示了每个虚拟机吸引的流量,从而使你更有可能调整容量。作为虚拟环境的一部分映射的节点还可以包括你的企业使用的任何云服务。
Dynatrace在流程级别分析网络流量。你将能够看到哪些进程使用最多的资源以及你的基础架构的哪些方面比较紧张。除网络资源外,Dynatrace还提供服务器利用率指标,包括内存,磁盘和CPU使用情况。
Dynatrace系统非常适合在线业务。可以跟踪应用程序性能,并了解每个用户的活动如何影响软件激活,处理网络活动和资源使用情况。网络活动的表示很大程度上依赖于映射。这是一种非常独特的性能监控方法,非常有效。对工艺流程而不是设备性能的关注,使其更像是网络分析仪而不是简单的监控工具。
如果你查看此列表中的其他网络监控工具并确定它们并未真正为你提供有关正在查找的数据流的详细信息,那么Dynatrace可能是问题的答案。
9、ConnectWise Automate
ConnectWise提供一系列网络服务,其网络监控系统称为Automate。这种基于云的解决方案面向中小型企业。该公司不会在其网站上公布其价格。相反,你必须联系销售代表来协商报价。对于企业来说,秘密的定价方法可能有点令人不快。
仪表板为你的数据提供了多种视图格式,因此只需查看事件的简单列表或获取实时数据的图形显示。
Automate名称解释了包的操作方法。我们的想法是,该监控系统将为你完成所有工作,包括网络发现和用户跟踪。通过一些额外的功能,可以在自动运行许多网络管理任务。例如,版本控制通常不是网络监控系统所期望的功能。但是,Automate包含一个补丁管理工具,它可以记录系统上的所有软件版本,并使你能够从一个中心位置更新所有版本的软件。
ConnectWise Automate不仅限于一个站点。该软件能够为MSP的多个客户端及其众多网络提供服务。自动化可以根据IP范围监控多个位置,并合并这些客户端网络的子网。
购买ConnectWise Automate时附带了远程管理工具,例如ConnectWise Control。这对于软件或IT服务提供商来说可能是一个很好的解决方案,因为它为你的IT部门提供了完整的用户支持功能,而不仅仅是网络监控软件。
10、Zabbix
Zabbix是另一个开源系统。开源软件的一个好处是任何人都可以生成附加组件。核心程序是免费提供的,大多数附加组件也是免费提供的。
尽管是免费的,但仪表板具有非常专业的外观。可以切换仪表板的元素,以便在屏幕的最突出区域显示最重要的信息。仪表板功能包括实时事件数据,图形和颜色编码列表,以便立即识别重要信息。
Zabbix的实时网络监控模块依赖于SNMP,因此你可以从设备已经安装的设备代理中受益。Zabbix系统可以监控云服务,应用程序性能,机架和UPS等硬件以及服务器。如果你有其他要集中管理的站点,系统还可以实施远程监控。
Zabbix没有预先编写的报告模块,但可以创建自己的自定义报告,并在Zabbix网站的社区论坛上查找其他人编写的报告格式。
许多网络协议的一个弱点是它们在协议栈中以较低的级别运行,这使加密变得困难。Zabbix包含一个加密层,用于锁定窃听和窥探器,并使监控数据能够安全地通过网络。加密系统使身份验证过程可用,因此你可以创建不同的权限级别,以访问网络监控仪表板中可用的数据。
Zabbix面向中小型企业,所以如果刚刚开始,这个免费的网络监控解决方案将是你的理想选择。
memcache做Mysql缓存层?
Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:
1、Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
2、内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
3、性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
具体为什么会出现上面的结论,以下为收集到的资料:
1、数据类型支持不同
与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部使用一个redisObject对象来表示所有的key和value。redisObject最主要的信息如图所示:
type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:”123″ “456”这样的字符串。只有打开了Redis的虚拟内存功能,vm字段字段才会真正的分配内存,该功能默认是关闭状态的。
1)String
常用命令:set/get/decr/incr/mget等;应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。2)Hash常用命令:hget/hset/hgetall等应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。3)List常用命令:lpush/rpush/lpop/rpop/lrange等;应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。4)Set常用命令:sadd/spop/smembers/sunion等;应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。5)Sorted Set常用命令:zadd/zrange/zrem/zcard等;应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。2、内存管理机制不同在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。对于像Redis和Memcached这种基于内存的数据库系统来说,内存管理的效率高低是影响系统性能的关键因素。传统C语言中的malloc/free函数是最常用的分配和释放内存的方法,但是这种方法存在着很大的缺陷:首先,对于开发人员来说不匹配的malloc和free容易造成内存泄露;其次频繁调用会造成大量内存碎片无法回收重新利用,降低内存利用率;最后作为系统调用,其系统开销远远大于一般函数调用。所以,为了提高内存的管理效率,高效的内存管理方案都不会直接使用malloc/free调用。Redis和Memcached均使用了自身设计的内存管理机制,但是实现方法存在很大的差异,下面将会对两者的内存管理机制分别进行介绍。Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Memcached的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响Slab Allocation的原理相当简单。 如图所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Memcached启动的时候通过制定Growth Factor来控制。假定图中Growth Factor的取值为1.25,如果第一组Chunk的大小为88个字节,第二组Chunk的大小就为112个字节,依此类推。当Memcached接收到客户端发送过来的数据时首先会根据收到数据的大小选择一个最合适的Slab Class,然后通过查询Memcached保存着的该Slab Class内空闲Chunk的列表就可以找到一个可用于存储数据的Chunk。当一条数据库过期或者丢弃时,该记录所占用的Chunk就可以回收,重新添加到空闲列表中。从以上过程我们可以看出Memcached的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。因为每个Chunk都分配了特定长度的内存空间,所以变长数据无法充分利用这些空间。如图 所示,将100个字节的数据缓存到128个字节的Chunk中,剩余的28个字节就浪费掉了。Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。如图所示,real_ptr是redis调用malloc后返回的指针。redis将内存块的大小size存入头部,size所占据的内存大小是已知的,为size_t类型的长度,然后返回ret_ptr。当需要释放内存的时候,ret_ptr被传给内存管理程序。通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存。Redis通过定义一个数组来记录所有的内存分配情况,这个数组的长度为ZMALLOC_MAX_ALLOC_STAT。数组的每一个元素代表当前程序所分配的内存块的个数,且内存块的大小为该元素的下标。在源码中,这个数组为zmalloc_allocations。zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。所以,总的来看,Redis采用的是包装的mallc/free,相较于Memcached的内存管理方法来说,要简单很多。3、数据持久化支持Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志。而memcached是不支持数据持久化操作的。1)RDB快照Redis支持将当前数据的快照存成一个数据文件的持久化机制,即RDB快照。但是一个持续写入的数据库如何生成快照呢?Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。我们可以通过Redis的save指令来配置RDB快照生成的时机,比如配置10分钟就生成快照,也可以配置有1000次写入就生成快照,也可以多个规则一起实施。这些规则的定义就在Redis的配置文件中,你也可以通过Redis的CONFIG SET命令在Redis运行时设置规则,不需要重启Redis。Redis的RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时,Redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件,这样在任何时候出现故障,Redis的RDB文件都总是可用的。同时,Redis的RDB文件也是Redis主从同步内部实现中的一环。RDB有他的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。在某些业务下,这是可以忍受的。2)AOF日志AOF日志的全称是append only file,它是一个追加写入的日志文件。与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。只有那些会导致数据发生修改的命令才会追加到AOF文件。每一条修改数据的命令都生成一条日志,AOF文件会越来越大,所以Redis又提供了一个功能,叫做AOF rewrite。其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作。其生成过程和RDB类似,也是fork一个进程,直接遍历数据,写入新的AOF临时文件。在写入新文件的过程中,所有的写操作日志还是会写到原来老的AOF文件中,同时还会记录在内存缓冲区中。当重完操作完成后,会将所有缓冲区中的日志一次性写入到临时文件中。然后调用原子性的rename命令用新的AOF文件取代老的AOF文件。AOF是一个写文件操作,其目的是将操作日志写到磁盘上,所以它也同样会遇到我们上面说的写操作的流程。在Redis中对AOF调用write写入后,通过appendfsync选项来控制调用fsync将其写到磁盘上的时间,下面appendfsync的三个设置项,安全强度逐渐变强。appendfsync no 当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。appendfsync everysec 当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。所以结论就是,在绝大多数情况下,Redis会每隔一秒进行一次fsync。在最坏的情况下,两秒钟会进行一次fsync操作。这一操作在大多数数据库系统中被称为group commit,就是组合多次写操作的数据,一次性将日志写到磁盘。appednfsync always 当设置appendfsync为always时,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响。对于一般性的业务需求,建议使用RDB的方式进行持久化,原因是RDB的开销并相比AOF日志要低很多,对于那些无法忍数据丢失的应用,建议使用AOF日志。4、集群管理的不同Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。下图给出了Memcached的分布式存储实现架构。当客户端向Memcached集群发送数据之前,首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储。但客户端查询数据时,同样要计算出查询数据所在的节点,然后直接向该节点发送查询请求以获取数据。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。下图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096。Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER。为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。