自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(284)
  • 资源 (3)
  • 收藏
  • 关注

原创 Zookeeper临时节点删除时机解析

Zookeeper中的节点主要分为临时节点和持久节点。持久节点在创建之后,除非主动发起删除,否则节点会一直存在;而临时节点则不同,创建该节点的Session过期后,则该Session创建的所有临时节点都会被删除。本文主要来从源码的角度来分析下临时节点删除的全过程。既然当Session过期后,Zookeeper会删除该Session创建的所有临时节点,那么我们就可以从Session的管理器SessionTrackImpl入手。SessionTrackImpl本质上还是session桶管理的模式,所以针对

2022-12-03 10:26:01 1838 1

原创 Zookeeper事务日志预分配空间解析

Zookeeper的通过快照日志和事务日志将内存信息保存下来,记录下来每次请求的具体信息。尤其是其事务日志,每次处理事务请求时都需要将其记录下来。Zookeeper事务日志的默认存储方式是磁盘文件,那么Zookeeper的总体性能就受限与磁盘文件的写入速度。针对这个瓶颈,Zookeeper做了什么优化操作呢,本文我们就一起来了解下。事务日志的添加,我们需要从FileTxnLog.append()方法看起创建FileTxnLog对象时,其logStream属性为null,所以当第一次处理事务请求时,会先

2022-12-03 10:23:01 609

原创 Socket常见异常场景模拟实战

如标题所示,本文主要罗列下Socket编程中的那些常见异常,通过实战的方式来模拟这些异常。

2022-09-17 15:31:43 1133

原创 HTTP协议解析与实战

HTTP(HyperText Transfer Protocol)超文本传输协议,它是用于从服务器传输超文本到本地浏览器的一种传输协议。按照七层传输协议,HTTP位于应用层协议,在TCP协议之上。如下图所示。

2022-08-18 19:40:12 472

原创 TCP零窗口探测实战

当接收端的接收窗口被完全占用后,此时再来新的数据包就无处安放了,同时接收方回复给发送方的ACK中,Win也已经归零。上一文的示例中,接收端接收到消息后,并不处理,所以会一直占用接收端的接收窗口,一直到最后,完全占用了接收窗口。当接收方重新获取可用空间时,会给发送端传输一个窗口更新,发送端接收到该数据包之后,继续发送数据。假设一种情况,接收方发送窗口更新包丢失了,那么发送端就一直无法得到窗口更新的消息,一直在等待。为了避免这种互相等待的死锁情况,发送端会采用一个持续计时器,间歇性的查询接收端的窗口信息。...

2022-08-18 19:35:59 2475

原创 Socket发送缓冲区接收缓冲区快问快答

首先,我们要明确一下,通过socket发送数据之后(调用发送方法),数据并不是会直接发送到接收方。整个过程简略图如下:最终数据发送是要通过网卡的,但是socket没法直接将数据发送到网卡,所以只能先将数据发送到操作系统数据发送缓冲区。然后网卡从数据发送缓冲区中获取数据,再发送到接收方。socket接收数据,也不是直接从对端获取的。整个过程简略图如下:首先接收方机器网卡接收到发送方的数据后,先将数据保存到操作系统接收缓冲区。...

2022-08-08 20:48:21 4976

原创 Zookeeper客户端网络通讯模型分析

之前的Zookeeper系列文章中有分析过客户端如何发送具体的增删改查节点请求。这些文章的分析都是偏业务层面的。如今回想起来,还是不知道该如何回答接下来的问题:Zookeeper客户端的网络通讯模型是怎样的?接收到的响应是如何精确匹配到对应请求的?本文主要就围绕这个问题来展开下。有关于发送请求的一些具体内容,可以参考笔者之前的博客,比如: Zookeeper源码解析-客户端创建节点过程分析_恐龙弟旺仔的博客-CSDN博客 笔者主要从三个方面来分析下这个问题:包装请求、发送请求、接收响应下面以一次GET请求为

2022-07-03 17:30:56 661

原创 Zookeeper ZNode Stat对象信息解析

Zookeeper的视图结构和标准的UNIX文件系统类似,整个结构也是以树形目录结构展现的。Zookeeper中的每个节点称为ZNode,每个ZNode上既可以保存数据,也可以挂载子节点。关于ZNode,不仅可以存储数据,节点本身也有一些状态信息(Stat),本文就来分析下这个Stat信息。我们随意创建一个节点,可以使用Zookeeper客户端命令,如下所示:我们来逐个看下这些参数的含义cZxid即create zxid的缩写(创建该节点的事务ID),每一次事务操作都会有一个特定的zxid来代表当前事

2022-06-19 16:29:28 733

原创 zookeeper客户端断开自动重连相关代码分析

Zookeeper在我们的实际使用中,都是以集群模式来对外提供服务。在客户端的使用中,写入集群所有节点的ip:port信息,客户端启动后便会随机选择一个Zookeeper server节点创建长连接。如果当前连接的Zookeeper server节点网络异常,当前长连接便会断掉重连。本文主要就来看下Zookeeper客户端是如何检测连接断掉,并自动做重连动作的。有关于Zookeeper客户端状态的相关信息可以参考笔者另一篇博客: zookeeper客户端会话状态分析_恐龙弟旺仔的博客-CSDN博客 从笔者之

2022-06-18 09:27:51 1437

原创 TCP滑动窗口模拟实战

客户端与服务端之间的通信是一个数据传输的过程,消息以数据包形式进行传输。在传输的过程中,通过滑动窗口机制来同时传输多个数据包;发送端根据接收端的处理能力,适当控制发送窗口大小,实现流量控制。在数据包较大的情况下,需要将大的数据包拆分成多个小的数据包进行传输。接收端确认接收到一个数据包之后,发送端才能发送下一个数据包。整个过程如下图所示:很明显,这种方式方式的数据传输效率非常低,发送端只有等到接收端确认收到之后才能发送下一个数据包。为了改进这种情况,引入了窗口的概念。窗口大小是指:不需要等待确认包而可以继续发

2022-06-18 09:04:39 1079

原创 zookeeper客户端会话状态分析

Zookeeper客户端创建完成之后,后续就可以使用其进行请求发送,在请求发送之前,会先检查客户端与服务端的连接是否存在(是否有对应Session),如果不存在,则会先创建Session会话,后续的操作都会依据当前Session来发送。而当连接发生异常时(网络波动等),客户端会尝试重连服务端,其中又会涉及到Session状态的变化。本文就来了解下Session的创建及其状态的变化过程。客户端与服务端三次握手完成后,会发送ConnectRequest请求,服务端处理完成后,返回ConnectResponse,

2022-06-12 22:28:53 1166 1

原创 TCP协议之TIME_WAIT状态实战与分析

TCP/IP协议的三次握手和四次挥手,我们应该都滚瓜烂熟了。下面是一张代表发送接收双方全状态的图本文我们重点关注下TIME_WAIT状态。从图中我们可以看出来,该状态属于主动发起关闭的一方,在收到对方的关闭请求时,所处于的状态。按照TCP/IP协议规定:当TCP执行一个主动关闭并发送最终的ACK时,连接必须处于TIME_WAIT并持续两倍于最大生存期的时间,这样就能够让TCP重新发送最终的ACK以避免出现丢失的情况。Q:出现丢失?A:怎么理解出现丢失,我们看以下这种场景:当上图中的Server(在Clien

2022-06-12 21:48:19 1447

原创 TCP协议基于计时器的重传策略模拟实战

关于TCP协议的重传策略,是TCP数据传输正确性的重要保证。由于下层网络层协议可能出现的包丢失、重复、失序包等问题,当TCP协议基于某种策略确认当前包已经发生以上情况,就会启动重传。TCP拥有两套机制来完成重传:基于超时时间;基于确认消息(SACK);本文主要来模拟下基于超时时间的重传。笔者准备两台机器,一台启动ServerSocket服务,另一台就启动telnet命令进行连接发送请求等操作笔者这里使用的是标准的java ServerSocket,来启动一个端口监听,代码如下: 代码很简单,笔者不再多

2022-06-03 21:01:36 403

原创 TCP重置报文段的几种场景

TCP的重置报文段,就是TCP发送了RST包到对端。RST标志位在什么地方呢?我们通过TCP协议头部来看下(图片来自: TCP头部详解_却道天凉_好个秋的博客-CSDN博客_tcp头部)很明显,RST与我们熟悉的SYN、ACK和FIN标志位同属一个级别。但是日常工作中,我们对RST的使用不是很熟悉,本文就来介绍下哪些会产生RST的场景。这个场景很容易理解,如果我们telnet一个并不存在的端口,那么会被快速响应一个RST复位报文段常规的中止连接的方式都是发送FIN标志位,这被称为有序释放。(因为FIN是在所

2022-06-03 20:57:38 1179

原创 TCP连接超时模拟实战

前言:发送TCP请求连接远端服务器,在规定时间内没有返回ACK响应,这种情况一般我们称之为三次握手超时。三次握手连接超时的原因主要有两种:1)client发送SYN后,进入SYN_SENT状态,等待server的SYN+ACK超时;2)server收到client发送的SYN后,返回SYN+ACK,进入SYN_RECV状态,等待client的ack超时;当超时发生时,就会重传,一直到某一个阈值,还没有收到回应,则会放弃,终止本次连接的创建。本文我们就来模拟下第一种超时现象。

2022-05-31 23:38:11 2274 2

原创 TCP backlog解析与实战

前言:针对TCP连接三次握手,我们都已经非常熟悉了。那么三次握手之后是不是就一定会被服务端处理请求了呢?可能我们不太清楚操作系统的具体做法,但是凭感觉我们会有两方面的思考:1)如果大量的客户端连接发送SYN请求,服务器根本无力处置这么多SYN请求,那么怎么做限流操作来避免自己被冲垮呢?2)三次握手成功之后,服务端处理程序一直在忙于之前的连接的业务处理,长时间没有感知到新的连接到了,那么对于这个客户端发来的请求应该怎么操作呢?本文就通过对TCP backlog来回答下上述两个问题。

2022-05-28 10:14:19 2442

原创 TCP协议解析与实战

前言:之前我们介绍过IP协议和ICMP协议,这两个协议在OSI模型中都位于网络层,主要负责数据包的传递。但是IP协议只负责传输,如果在包传输过程中出现分片乱序、包丢失等问题,IP协议是不负责解决的。所以针对这种异常情况的解决,就需要更上层协议来解决了,这个就是我们本次介绍的TCP协议。1.TCP协议概述1.1 什么是TCP协议?TCP(Transmission Control Protocol)传输控制协议。该协议是一种面向连接的、可靠的、基于IP的传输层协议。1)传

2022-05-22 12:36:00 1980 1

原创 ICMP协议解析与实战

1.ICMP协议概述1.1 什么是ICMP?ICMP(Internet Control Message Protocol的缩写),中文就是:网际报文控制协议。该协议是网络协议族的核心协议之一。通过一张图来看下该协议所处位置:(图片来自百度安全验证):可以看到,ICMP协议与IP协议同属网络层。虽然两者同属网络层,没有上下级关系,但是ICMP协议最终还是要依靠IP协议将报文发送出去。1.2 ICMP协议作用IP协议我们知道是发送数据包的重要协议,实现了数据包的分片发送.

2022-05-21 11:02:05 4584 1

原创 IP协议解析与实战

1.IP协议概述1.1 什么是IP协议?IP(Internet Protocol缩写)中文就是网际协议,这个比较抽象,我们比较熟悉的还是ip地址。ip地址翻译成中文就是网际协议地址。这个地址与我们之前说过的MAC地址有什么关系呢?既然物理机器已经有了MAC地址,那么还需要IP地址做什么呢?1.2 IP地址作用通过之前对ARP协议的分析,可以发现它是通过MAC地址发送数据的,但是其有一个很大的问题:ARP协议是子网广播协议(在子网中的所有的设备都会收到该ARP协议数据包)。

2022-05-15 16:39:45 2511 1

原创 ARP协议解析与实战

1.ARP协议概述1.1 什么是ARP协议?ARP是Address Resolution Protocol的简写。翻译成中文就是:地址解析协议。那么解析什么地址呢?本质上就是把IP解析成MAC的一种协议。1.2 为什么需要把IP解析成MAC地址?看了ARP协议的内容,难免我们会有一个疑问,就是当前主题。我们知道根据OSI模型,把网络工作分为七层,如下图所示(图片来自:计算机网络-数据结构-MAC帧头-IP头-TCP头-UDP头 - 多情剑客无情剑; - 博客园 ):以..

2022-05-14 19:02:07 978

原创 log4j2异步日志的使用

前言:之前三篇文章我们介绍过log4j、logback以及log4j2的springboot使用方式。那么在实际的工作中,我们应该使用哪种日志框架呢?做选择之前,我们肯定要有所比对,究竟哪种日志框架性能最好,使用最方便?从下图中(来自log4j2官网测试)可以看出,log4j2(有三种模式[全异步、混合异步、同步])的性能吊打log4j1和logback。尤其在多线程的测试下,log4j2的性能更是火力全开。所以,为了实现更好的日志打印,我们就选择log4j2即可。.

2022-05-12 22:01:09 3461

原创 log4j2使用实战

前言:今天完成最后一篇文章的介绍,也就是我们的log4j2。log4j2的优点笔者就不再介绍了,网上一大堆相关文章。简单粗暴点,我们直接上使用。1.log4j2单独使用实战1.1 引入maven依赖 <!-- log4j2 依赖 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <

2022-05-08 21:14:07 599 1

原创 logback使用实战

前言:上文我们介绍了log4j的三种使用情况。本文依旧按照这种方式来介绍下logback的使用。只不过logback与log4j是有所不同的,logback-classic包本身就引入了slf4j相关包(slf4j-api),而logback-classic包里也包含了slf4j-logback的相关对接实现。所以使用logback-classic包就相当于使用了slf4j1.logback单独使用1.1 引入maven依赖 <dependency>

2022-05-08 21:10:13 727

原创 log4j使用实战

前言:每次排查log相关的问题总会被逼疯,log4j、logback、log4j2这几个之间的关系,尤其再加上slf4j,那酸爽,经历过的人都懂。所以才促成了笔者这一个系列的博客:log4j实战、logback实战、log4j2实战。我们从三个方法来实战每一种log类型:log单独使用、log与slf4j的组合、springboot与log的组合。当然,笔者这个系列的文章,并不是科普类文章,有关于log.xml如何配置这些知识点网络上已经有很多文章了,不再赘述。希望整理完这个系列之后

2022-05-06 22:40:01 529

原创 Linux tcpdump命令实战

前言:网络这块知识点一直都是笔者的薄弱之处。虽然也一直在学习理论知识,但是总觉得学完就忘,一直在重复学习。究其原因,应该还是理论没有与实践结合在一起。而想学习具象的网络知识,那么工具就是必不可少的。目前的工具有两类:wireshark(可视化工具)、tcpdump(命令)。本文我们就来学习下tcpdump命令的使用1.tcpdump作用tcpdump是一款强大的网络抓包工具。通过tcpdump命令的使用可以帮助我们分析、调试网络数据2.tcpdump语法同样我们通过man

2022-05-02 15:35:52 955

原创 Linux netstat命令实战

前言:netstat是我们常用的一款用于统计网络套接字连接情况的工具。TCP、UDP、监听状态的套接字等都可以监听到。在排查网络相关问题时,会经常用到这款工具,下面我们就一起来看下那些比较实用的使用方式。1.netstat实用参数最全的话肯定还是通过man netstat命令输出root@93de58bae514:/proc/net# man netstatNETSTAT(8)

2022-05-02 15:31:56 1009

原创 系统网络性能评估实战

前言:说到性能评估,首先我们有两个方面需要确认:* 我们要确认哪些性能点需要评估,有个具体的参数* 使用哪些压测工具来进行评估网络性能评估参数,就是笔者上一篇文章 机器网络配置与性能指标监控实战 中介绍的那些性能指标点:带宽、吞吐量、延迟、PPS等至于压测工具的话,下面我们逐个来介绍下1.应用层性能测试按照7层网络协议模型,应用层应该是我们在实际工作中最常用的一层。我们按照最常用的HTTP协议来测试,市面上的压测工具一般有ab(Apache自带的HTTP压测工具)、w

2022-04-30 18:06:39 480

原创 机器网络配置与性能指标监控实战

前言:有关于网络问题,又是笔者另一个薄弱知识点。应该说是理论知识不够扎实,每次理论学的差不多的时候,由于缺乏实战,一段时间之后,又忘记的差不多了。每次重复这种情况还是蛮尴尬的,所以理论结合实战才是学习网络知识的最佳途径。本文主要介绍如何通过命令来了解当前机器的网络配置,而对于网络方面的监控,究竟有哪些指标可供使用。1.机器网络配置所谓网络配置,实际最简单的就是当前机器的IP地址,当然还有别的重要信息。我们通过ifconfig命令可以了解到root@93de58bae

2022-04-30 11:35:40 513

原创 Linux strace命令的用法

前言:Linux的strace命令简直就是一个调试神器。但是对于笔者而言却很陌生,一方面确实在实际生产中没有用到过这个命令,另一方面对操作系统方法不够熟悉,即使打印出了相关结果,也无法进行有效分析。本文笔者是先学习了别人的关于strace命令的文章后,再来总结。1.strace简介在Linux系统中,strace命令是一个集诊断、调试、统计为一体的工具。strace常用来跟踪进程执行时的系统调用和所接收的信号。比如当进程进行磁盘读写时,会由用户态切换到内核态,而此时通过strac

2022-04-23 19:02:36 4815

原创 Linux sar命令实战

前言:Linux中的sar命令,全称是(System Activity Reporter系统活动情况报告),它是Linux下的系统运行状态监控工具,可以从多个方面对系统活动进行报告。包括:网络收发包情况、文件读写情况、磁盘I/O、内存使用情况等。堪称全能小王子,下面我们一起来看下sar命令的使用。1.sar命令安装笔者使用的是Ubuntu机器,安装比较简单root@91230cc467cc:/usr/local/tomcat# apt-get install sar在使用s

2022-04-23 16:14:39 2037

原创 文件系统读写性能测试实战

前言:笔者本来准备直接测试磁盘块的读写性能(随机读写、顺序读写),但是奈何环境一直搭建不好,所以只能退而求其次,测试下文件系统的读写性能(随机读写、顺序读写)。有关于两者的区别,可以参考下笔者另一篇博客:磁盘性能指标监控实战1.环境准备笔者安装了docker Ubuntu:18.04版本,所有的命令就在该容器中测试 ;命令安装(fio命令)apt-get install -y fio2.fio命令fio工具是主流的第三方I/O测试工具,它提供了大量的可定制化选项,可以用

2022-04-23 11:50:08 1594

原创 磁盘性能指标监控实战

前言:磁盘I/O这块也属于笔者比较薄弱的知识点。平时工作中基本没有很好的认知,也没有很好的检测工具来确认磁盘IO问题。照猫画虎的从网络上找了很多文章,还是比较希望能够转化为自己的知识点。1.基础知识先上图(图片来自极客时间 <<Linux性能优化实战>>):我们从上到下的来分析整个层次,从应用程序发起调用到本地磁盘,基本经历了以下几个层次:1.1 应用程序调用库函数就java程序而言,我们一般通过// 获取指定路径的文件引用File f =

2022-04-03 12:33:33 1533

原创 Linux iostate命令实战

前言:iostat(I/O statistics)工具,对系统的磁盘操作活动进行监控。类似于vmstat,它只能对系统整体情况进行分析,无法对特定进程进行分析。1.iostat基本输出iostat命令默认输出结果如下:root@7bc18553126f:/tmp# iostatLinux 5.10.76-linuxkit (7bc18553126f) 03/27/22 _aarch64_ (4 CPU)avg-cpu: %user %nice %system %io

2022-04-03 12:30:35 2515 1

原创 Linux pidstat命令实战

前言:前文中我们了解了vmstat命令,其可以监控操作系统整体的CPU、内存、IO运行情况。但是如果我们相对某一个进程进行监控的话,vmstat就难免心有余而力不足。这时就需要本文主角登场,pidstat命令。pidstat可用于监控全部或指定进程的CPU、内存、IO等系统资源的占用情况。下面就一起来实战下该命令吧。1.常规使用最常用的pidstat命令就是 pidstat 5(5秒刷新一次,用户也可自定义为其他时间段)root@7bc18553126f:/# pidstat

2022-04-03 12:27:45 1832

原创 Linux mpstat命令实战

前言:mpstat是一款实时系统监控工具。它主要展示与CPU相关的统计信息。在多CPU系统中,它能查看ALL(所有CPU的平均状况),也能查看特定CPU的信息。1.常规使用类似于vmstat和pidstat,mpstat直接的命令输出的是从系统启动以来的平均值root@7bc18553126f:/# mpstat Linux 5.10.76-linuxkit (7bc18553126f) 03/15/22 _aarch64_ (4 CPU)14:20:18 CPU

2022-04-03 12:24:25 1000

原创 Linux free命令中的Buffer和Cache

前言:查看当前系统的内存使用情况时,我们最常使用free来查看,如下root@7bc18553126f:/# free -h total used free shared buff/cache availableMem: 1.9G 374M 465M 258M 1.1G 1.3GSwap: 1.0G

2022-03-30 21:41:23 4854

原创 磁盘IO问题排查实战

前言:有关于磁盘IO过高导致CPU iowait比较高的问题,笔者一直没有在产线遇到过。所以想去通过写代码来模拟这个操作,但是无奈笔者的Mac机器性能太强了,所以一直压不出来想要的效果。既然有些效果没法出来,我们就先方法论一下,先用工具了解当前服务及进程的状态,然后逐个分析。准备工作:1.代码准备,(笔者会在最后贴出,模拟写磁盘动作),最终打成war包,在docker tomcat中启动2.工具准备,需要的验证工具,iostat、strace、lsof、pidstat,需要提前安

2022-03-30 21:33:16 3346

原创 Linux vmstat命令实战

前言:vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析(后续会介绍pidstat命令来展示各个进程的资源使用情况)1.常规使用在使用vmstat命令时,最常用的就是vmstat -w 5这里的5意思是每5秒输出一次root@7bc18553126f:/# vmstat -w 5procs -------------------

2022-03-28 21:37:50 735

原创 cpu上下文切换对性能的影响(实战)

前言:在之前CPU负载的几种情况相关文章中,我们描述了几种情况导致CPU负载高。最神奇的就是当多个活跃进程(多于CPU个数)在执行操作时,通过vmstat命令可以看到对应的cs(context switch)很高,并同时引起了CPU的高负载。那么为什么CPU上下文切换会引起高负载均衡呢?我们一起来学习下1.什么是CPU上下文切换?我们知道,现代CPU基本都是基于多核、基于抢占式。CPU会给每个任务一定的时间分片来执行任务,当A进程时间分片使用完成之后,就会切换到下一个B进程来执行

2022-03-28 21:33:57 1182

原创 JDK8 GC日志分析

前言:从事java开发的小伙伴,对JVM都不会陌生。这块的知识点笔者不再多述,网络上有很多教程。如果想去系统性的学习,笔者还是推荐 周志明老师的 《深入理解Java虚拟机》基本了解了JVM的内存结构后,那么平时我们怎么排查jvm相关的问题呢?那就要从jvm参数和GC日志来分析具体问题了,通过jvm参数了解其基本设置;通过GC日志了解GC具体情况。下面我们来实战一把。1.准备工作笔者使用的JDK版本为1.8.0_131版本,通过命令java -version可以看出P

2022-03-26 13:17:03 1553

深入分析Java+web 技术内幕part1

首先介绍前端知识,主要介绍JavaWeb开发中涉及的一些基本知识,包括Web请求过程、HTTP协议、DNS技术和CDN技术。其次深入介绍Java技术,包括I/O技术、中文编码问题、Javac编译原理、class文件结构解析、ClassLoader工作机制及JVM的内存管理等。最后介绍Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、Ibatis框架和Velocity框架等原理介绍。

2017-09-12

redis学习笔记

个人学习redis时候的笔记,例子比较齐全,比较详细,一步一步均有记录,保证一看就会,适合入门人员

2015-12-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除