导航:首页 > 源码编译 > redis源码调试

redis源码调试

发布时间:2022-02-13 05:17:34

1. redis 怎么启用多端口

我来回答通常sniffer所要关心的内容可以分成这样几类:1、口令我想这是绝大多数非法使用sniffer的理由,sniffer可以记录到明文传送的userid和passwd.就算你在网络传送过程中使用了加密的数据,sniffer记录的数据一样有可能使入侵者在家里边吃肉串边想法算出你的算法。2、金融帐号许多用户很放心在网上使用自己的信用卡或现金帐号,然而sniffer可以很轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和pin.3、偷窥机密或敏感的信息数据通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干脆拦截整个的email会话过程。4、窥探低级的协议信息。这是很可怕的事,我认为,通过对底层的信息协议记录,比如记录两台主机之间的网络接口地址、远程网络接口ip地址、ip路由信息和tcp连接的字节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用sniffer收集这些信息只有一个原因:他正在进行一次欺诈,(通常的ip地址欺诈就要求你准确插入tcp连接的字节顺序号,这将在以后整理的文章中指出)如果某人很关心这个问题,那么sniffer对他来说只是前奏,今后的问题要大得多。(对于高级的hacker而言,我想这是使用sniffer的唯一理由吧)二.sniffer的工作环境snifffer就是能够捕获网络报文的设备。嗅探器的正当用处在于分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器来作出精确的问题判断。嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:1.标准以太网2.TCP/IP3.IPX4.DECNet嗅探器通常是软硬件的结合。专用的嗅探器价格非常昂贵。另一方面,免费的嗅探器虽然不需要花什么钱,但得不到什么支持。嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键值,而嗅探器则捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这个目的——例如将以太网卡设置成杂收模式。(为了理解杂收模式是怎么回事,先解释局域网是怎么工作的)。数据在网络上是以很小的称为帧(Ftame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前12个字节存放的是源和目的的地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用户数据、TCP/IP的报文头或IPX报文头等等)。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会造成安全方面的问题。每一个在LAN上的工作站都有其硬件地址。这些地址唯一地表示着网络上的机器(这一点于Internet地址系统比较相似)。当用户发送一个报文时,这些报文就会发送到LAN上所有可用的机器。在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的报文则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单的忽略这些数据)。如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的报文和帧,如果一个工作站被配置成这样的方式,它(包括其软件)就是一个嗅探器。嗅探器可能造成的危害:1.嗅探器能够捕获口令2.能够捕获专用的或者机密的信息3.可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限事实上,如果你在网络上存在非授权的嗅探器就以为着你的系统已经暴露在别人面前了。(大家可以试试天行2的嗅探功能)一般我们只嗅探每个报文的前200到300个字节。用户名和口令都包含在这一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有报文,如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一些非常有趣的东西……简单的放置一个嗅探器宾将其放到随便什么地方将不会起到什么作用。将嗅探器放置于被攻击机器或网络附近,这样将捕获到很多口令,还有一个比较好的方法就是放在网关上。如果这样的话就能捕获网络和其他网络进行身份鉴别的过程。这样的方式将成倍地增加我们能够攻击的范围。三.谁会使用sniffers可能谁都回知道谁会使用sniffer,但是并不是每个使用它的人都是网络高手,因为现在有很多的sniffer都成了傻瓜似的了,前段时间用的最多的不外乎oicqsniffer。我想那些喜欢查好友ip的朋友都应该记得它吧。呵呵,我都使用过它,现在当然不用了啊!当然系统管理员使用sniffer来分析网络信息交通并且找出网络上何处发生问题。一个安全管理员可以同时用多种sniffer,将它们放置在网络的各处,形成一个入侵警报系统。对于系统管理员来说sniffer是一个非常好的工具,但是它同样是一个经常被黑客使用的工具.骇客安装sniffer以获得用户名和账号,信用卡号码,个人信息,和其他的信息可以导致对你或是你的公司的极大危害如果向坏的方面发展。当它们得到这些信息后,骇客将使用密码来进攻其他的internet站点甚至倒卖信用卡号码。三.sniffer是如何在网络上实施的谈这个问题之前还应该先说一下Ethernet的通讯。通常在同一个网段的所有网络接口都有访问在媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其它网络接口的硬件地址,同时,每个网络至少还要一个广播地址。在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:1帧的目标区域具有和本地网络接口相匹配的硬件地址。2帧的目标区域具有“广播地址”。在接受到上面两种情况的数据包时,网卡通过cpu产生一个硬件中断。该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。而sniffer就是一种能将本地网卡状态设成杂乱模式(promiscuousMode)的软件。当网卡处于杂乱模式时,该网卡具备“广播地址”,它对所有遇到的每一个帧都产生一个硬件中断以提醒操作系统处理每一个报文包。(绝大多数的网卡具备设置成杂乱模式的能力。可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据。通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。值得注意的是:sniffer是极其安静的,它是一种消极的安全攻击。四.哪里可以得到sniffer我们讲的sniffer,主要是在unix系统下运用的,至于那些oicqsniffer就不在我们讨论的范围。Sniffer是黑客们最常用的入侵手段之一。你可以在经过允许的网络中运行sniffer,了解它是如何有效地危及本地机器安全。Sniffer可以是硬件,也可以是软件。现在品种最多,应用最广的是软件Sniffer,绝大多数黑客们用的也是软件Sniffer。以下是一些也被广泛用于调试网络故障的sniffer工具:(一).商用sniffer:1.NetworkGeneral.NetworkGeneral开发了多种产品。最重要的是ExpertSniffer,它不仅仅可以sniff,还能够通过高性能的专门系统发送/接收数据包,帮助诊断故障。还有一个增强产品"DistrbutedSnifferSystem"可以将UNIX工作站作为sniffer控制台,而将snifferagents(代理)分布到远程主机上。2.Microsoft'sNetMonitor对于某些商业站点,可能同时需要运行多种协议--NetBEUI、IPX/SPX、TCP/IP、802.3和SNA等。这时很难找到一种sniffer帮助解决网络问题,因为许多sniffer往往将某些正确的协议数据包当成了错误数据包。Microsoft的NetMonitor(以前叫Bloodhound)可以解决这个难题。它能够正确区分诸如Netware控制数据包、NTNetBios名字服务广播等独特的数据包。(etherfind只会将这些数据包标识为类型0000的广播数据包。)这个工具运行在MSWindows平台上。它甚至能够按MAC地址(或主机名)进行网络统计和会话信息监视。只需简单地单击某个会话即可获得tcpmp标准的输出。过滤器设置也是最为简单的,只要在一个对话框中单击需要监视的主机即可。(二).免费软件sniffer1.Sniffit由LawrenceBerkeley实验室开发,运行于Solaris、SGI和linux等平台。可以选择源、目标地址或地址集合,还可以选择监听的端口、协议和网络接口等。这个SNIFFER默认状态下只接受最先的400个字节的信息包,这对于一次登陆会话进程刚刚好。2.SNORT:这个SNIFFER有很多选项供你使用并可移植性强,可以记录一些连接信息,用来跟踪一些网络活动。3.TCPDUMP:这个SNIFFER很有名,linux,FREEBSD还搭带在系统上,是一个被很多UNIX高手认为是一个专业的网络管理工具,记得以前TsutomuShimomura(应该叫下村侵吧)就是使用他自己修改过的TCPDUMP版本来记录了KEVINMITNICK攻击他系统的记录,后来就配合FBI抓住了KEVINMITNICK,后来他写了一文:使用这些LOG记录描述了那次的攻击,((四).Linux下的sniffer工具Linux下的sniffer工具,我推荐Tcpmp。[1].tcpmp的安装在linux下tcpmp的安装十分简单,一般由两种安装方式。一种是以rpm包的形式来进行安装。另外一种是以源程序的形式安装。1.rpm包的形式安装这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装,不需要修改任何东西。以超级用户登录,使用命令如下:#rpm-ivhtcpmp-3_4a5.rpm这样tcpmp就顺利地安装到你的linux系统中。怎么样,很简单吧。2.源程序的安装既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢其实,linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。·第一步取得源程序在源程序的安装方式中,我们首先要取得tcpmp的源程序分发包,这种分发包有两种形式,一种是tar压缩包(tcpmp-3_4a5.tar.Z),另一种是rpm的分发包(tcpmp-3_4a5.src.rpm)。这两种形式的内容都是一样的,不同的仅仅是压缩的方式.tar的压缩包可以使用如下命令解开:#tarxvfztcpmp-3_4a5.tar.Zrpm的包可以使用如下命令安装:#rpm-ivhtcpmp-3_4a5.src.rpm这样就把tcpmp的源代码解压到/usr/src/redhat/SOURCES目录下.·第二步做好编译源程序前的准备活动在编译源程序之前,最好已经确定库文件libpcap已经安装完毕,这个库文件是tcpmp软件所需的库文件。同样,你同时还要有一个标准的c语言编译器。在linux下标准的c语言编译器一般是gcc。在tcpmp的源程序目录中。有一个文件是Makefile.in,configure命令就是从Makefile.in文件中自动产生Makefile文件。在Makefile.in文件中,可以根据系统的配置来修改BINDEST和MANDEST这两个宏定义,缺省值是BINDEST=@sbindir@MANDEST=@mandir@第一个宏值表明安装tcpmp的二进制文件的路径名,第二个表明tcpmp的man帮助页的路径名,你可以修改它们来满足系统的需求。·第三步编译源程序使用源程序目录中的configure脚本,它从系统中读出各种所需的属性。并且根据Makefile.in文件自动生成Makefile文件,以便编译使用.make命令则根据Makefile文件中的规则编译tcpmp的源程序。使用makeinstall命令安装编译好的tcpmp的二进制文件。总结一下就是:#tarxvfztcpmp-3_4a5.tar.Z#viMakefile.in#./configure#make#makeinstall[2].Tcpmp的使用tcpmp采用命令行方式,它的命令格式为:tcpmp[-adeflnNOpqStvx][-c数量][-F文件名][-i网络接口][-r文件名][-ssnaplen][-T类型][-w文件名][表达式]1.tcpmp的选项介绍-a将网络地址和广播地址转变成名字;-d将匹配信息包的代码以人们能够理解的汇编格式给出;-dd将匹配信息包的代码以c语言程序段的格式给出;-ddd将匹配信息包的代码以十进制的形式给出;-e在输出行打印出数据链路层的头部信息;-f将外部的Internet地址以数字的形式打印出来;-l使标准输出变为缓冲行形式;-n不把网络地址转换成名字;-t在输出的每一行不打印时间戳;-v输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;-vv输出详细的报文信息;-c在收到指定的包的数目后,tcpmp就会停止;-F从指定的文件中读取表达式,忽略其它的表达式;-i指定监听的网络接口;-r从指定的文件中读取包(这些包一般通过-w选项产生);-w直接将包写入文件中,并不分析和打印出来;-T将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议;)2.tcpmp的表达式介绍表达式是一个正则表达式,tcpmp利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port,例如host210.27.48.2,指明210.27.48.2是一台主机,net202.0.0.0指明202.0.0.0是一个网络地址,port23指明端口号是23。如果没有指定类型,缺省的类型是host.第二种是确定传输方向的关键字,主要包括src,dst,dstorsrc,dstandsrc,这些关键字指明了传输的方向。举例说明,src210.27.48.2,指明ip包中源地址是210.27.48.2,dstnet202.0.0.0指明目的网络地址是202.0.0.0。如果没有指明方向关键字,则缺省是srcordst关键字。第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpmp将会监听所有协议的信息包。除了这三种类型的关键字之外,其他重要的关键字如下:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是'not''!',与运算是'and','&&';或运算是'or','';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。(1)想要截获所有210.27.48.1的主机收到的和发出的所有的数据包:#tcpmphost210.27.48.1(2)想要截获主机210.27.48.1和主机210.27.48.2或210.27.48.3的通信,使用命令:(在命令行中适用括号时,一定要#tcpmphost210.27.48.1and\(210.27.48.2or210.27.48.3\)(3)如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:#tcpmpiphost210.27.48.1and!210.27.48.2(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:#tcpmptcpport23host210.27.48.13.tcpmp的输出结果介绍下面我们介绍几种典型的tcpmp命令的输出信息(1)数据链路层头信息使用命令#tcpmp--ehosticeice是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1AH219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:21:50:12.847509eth08:0:20:79:5b:460:90:27:58:af:1aip60:h219.33357>ice.telnet0:0(0)ack22535win8760(DF)分析:21:50:12是显示的时间,847509是ID号,eth0表示从网络接口设备发送数据包,8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE.ip是表明该数据包是IP数据包,60是数据包的长度,h219.33357>ice.telnet表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口.ack22535表明对序列号是222535的包进行响应.win8760表明发送窗口的大小是8760.(2)ARP包的TCPDUMP输出信息使用命令#tcpmparp得到的输出结果是:22:32:42.802509eth0>arpwho-hasroutetellice(0:90:27:58:af:1a)22:32:42.802902eth0表明从主机发出该数据包,arp表明是ARP请求包,who-hasroutetellice表明是主机ICE请求主机ROUTE的MAC地址。0:90:27:58:af:1a是主机ICE的MAC地址。(3)TCP包的输出信息用TCPDUMP捕获的TCP包的一般输出信息是:src>dst:flagsdata->dst:表明从源地址到目的地址,flags是TCP包中的标志信息,S是SYN标志,F(FIN),P(PUSH),R(RST)"."(没有标记);data-seqno是数据包中的数据的顺序号,ack是下次期望的顺序号,window是接收缓存的窗口大小,urgent表明数据包中是否有紧急指针.Options是选项.(4)UDP包的输出信息用TCPDUMP捕获的UDP包的一般输出信息是:route.port1>ice.port2:udplenthUDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP,包的长度是lenth上面,我就详细介绍了TCPDUMP的安装和使用,希望会对大家有所帮助。如果想要熟练运用TCPDUMP这个LINUX环境下的SNIFFER利器,还需要大家在实践中总结经验,充分发挥它的威力。(五).windows平台上的sniffer我推荐netxray和snifferpro软件,想必大家都用过他们,不过我在这儿还要再简单介绍一下他们。

2. redis什么时候用哈希

假定我们有一个hashmap的逻辑结构,用户编号的为15的人,name是dlf,school是x
当我们在redic-cli命令行下敲下 hset id:15 name dlf时
redis里面都发生了什么事情呢?


任何一个使用过redis的用户,即使没有看过redis的源码,想一下这个过程,那么肯定都包含下面这几步
1 socket连接
2 redis-server收到命令信息
3 redis-server解析命令信息(找到对应的命令,及附带的参数)
4 调用对应的命令
5 返回结果
当然在redis-cli发送命令之前,redis-server首先启动,然后加载各种配置,初始化服务器等等。


在这篇博客里,我们只介绍第四点,就是找到redis内部的命令后,并且也已经分析出了参数,如何调用的过程。


首先我们看一个时序图(那个,我得声明,我并没有学习过时序图的精确概念,下面的图大概只能说明调用过程,如果绘制的某些部分不符合时序图的规定,大家见谅哦)
换句话说,如果第一次执行hset user:id name zhangsan
dictadd会返回ok,然后跳出dictreplace

至于第一次调用hset userid:14 school x

与hset userid:14 name lisi

会怎么样,大家自己想吧




[java]view plain

  • [java]view plain


  • 阅读全文

    3. redis怎么解决高并发

    而Edith解决高并发需要按照相关的程序步骤说明来设定。

    4. windows怎么调试redis源码

    Redis对于Linux是官方支持的,安装和使用没有什么好说的,普通使用按照官方指导,5分钟以内就能搞定。详情请参考:
    http://redis.io/download

    但有时候又想在windows下折腾下Redis,可以从redis下载页面看到如下提示(在页面中搜索 "windows"):

    [plain] view plain
    Win64 Unofficial The Redis project does not directly support Windows,
    however the Microsoft Open Tech group develops and maintains
    an Windows port targeting Win64.

    大意就是 Redis官方是不支持windows的,只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是:
    https://github.com/MSOpenTech/redis
    打开以后,可以直接使用浏览器下载,或者Git克隆。
    可以在项目主页右边找到 zip包下载地址: https://github.com/MSOpenTech/redis/archive/2.8.zip
    (注意: dist文件改变了下载地址: https://github.com/MSOpenTech/redis/releases )

    5. 如何用java获取redis的info

    预备
    jedis-2.5.2
    commons-pool2-2.2.jar
    使用单连接
    此方式仅建议用于开发环境做调试用。
    // 创建连接
    String host = "192.168.56.102";
    int port = 6379;
    Jedis client = new Jedis(host, port);
    // 执行set指令
    String result = client.set("key-string", "Hello, Redis!");
    System.out.println( String.format("set指令执行结果:%s", result) );
    // 执行get指令
    String value = client.get("key-string");
    System.out.println( String.format("get指令执行结果:%s", value) );
    运行上述代码,控制台输出:
    set指令执行结果:OK
    get指令执行结果:Hello, Redis!
    使用连接池
    此方式适用于仅使用单个Redis实例的场景。
    // 生成连接池配置信息
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(10);
    config.setMaxTotal(30);
    config.setMaxWaitMillis(3*1000);

    // 在应用初始化的时候生成连接池
    JedisPool pool = new JedisPool(config, "192.168.56.102", 6379);

    // 在业务操作时,从连接池获取连接
    Jedis client = pool.getResource();
    try {
    // 执行指令
    String result = client.set("key-string", "Hello, Redis!");
    System.out.println( String.format("set指令执行结果:%s", result) );
    String value = client.get("key-string");
    System.out.println( String.format("get指令执行结果:%s", value) );
    } catch (Exception e) {
    // TODO: handle exception
    } finally {
    // 业务操作完成,将连接返回给连接池
    if (null != client) {
    pool.returnResource(client);
    }
    } // end of try block

    // 应用关闭时,释放连接池资源
    pool.destroy();

    运行上述代码,控制台输出:

    set指令执行结果:OK
    get指令执行结果:Hello, Redis!
    使用连接池+分布式
    在规模较大的系统中,往往会有多个Redis实例做负载均衡。并且还实现主从备份,当主实例发生故障时,切换至从实例提供服务。
    类似于Memcached的客户端,Jedis也提供了客户端分布式操作的方式,采用一致性哈希算法。
    // 生成多机连接信息列表
    List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
    shards.add( new JedisShardInfo("127.0.0.1", 6379) );
    shards.add( new JedisShardInfo("192.168.56.102", 6379) );

    // 生成连接池配置信息
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(10);
    config.setMaxTotal(30);
    config.setMaxWaitMillis(3*1000);

    // 在应用初始化的时候生成连接池
    ShardedJedisPool pool = new ShardedJedisPool(config, shards);

    // 在业务操作时,从连接池获取连接
    ShardedJedis client = pool.getResource();
    try {
    // 执行指令
    String result = client.set("key-string", "Hello, Redis!");
    System.out.println( String.format("set指令执行结果:%s", result) );
    String value = client.get("key-string");
    System.out.println( String.format("get指令执行结果:%s", value) );
    } catch (Exception e) {
    // TODO: handle exception
    } finally {
    // 业务操作完成,将连接返回给连接池
    if (null != client) {
    pool.returnResource(client);
    }
    } // end of try block

    // 应用关闭时,释放连接池资源
    pool.destroy();

    运行上述代码,控制台输出:

    set指令执行结果:OK
    get指令执行结果:Hello, Redis!

    6. redis安装segmentation fault怎么解决

    你这个是运行时错误 也就是只有在运行时才出现的 看你的代码,没有问题,可能是你输入的数据存在问题。不敢说这是数组越界,除非你累死了……段错误的原因非常多,最多的是内存非法访问,也可是系统有保护功能:死循环也会成为错误。所以你得调试

    7. Redis和Memcache的区别总结

    区别:

    1、存储方式不同

    memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做mp)。

    2、数据支持类型不同

    redis在数据支持上要比memecache多的多。

    3、使用底层模型不同

    新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

    4、运行环境不同

    redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上。

    (7)redis源码调试扩展阅读

    注意事项

    1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。

    2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

    3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘 。

    4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10 。

    5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一,存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化) 。

    8. windows下怎么编译redis

    打开windows版本链接,进行
    按上面的说明:

    On your computer create a working folder and cd into it.
    Clone antirez/redis repository:
    git clone https://github.com/antirez/redis.git

    然后,

    cd redis git checkout 3fac86ff1d


    git checkout -b 2.4_win_uv

    这个命令可能会有错误,文档提示can ignored。
    也可以用curl:

    curl https://raw.github.com/gist/1439660//redis24_win_uv.patch | git am
    如果curl支持openssl的话,会提示什么签名证书有问题,可以根据提示,带上参数 --insecure,也就是
    curl --insecure https://raw.github.com/gist/1439660//redis24_win_uv.patch | git am。
    补丁安装完后,在msvs下面会生成.sln解决方案,可以用vc2010打开浏览代码。这时还不能编译,因为一般电脑上都没有pthread相关文件。pthread-win32在多平台开源代码中很常见,就是把win32的编程函数封装成pthread风格的。可以从ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.exe.这里下载,不用运行,直接解压就可以,这是自解压文件。然后,可以直接用里面的lib和dll,也可以自己编译一个。把include和lib按要求复制到deps目录:From your local folder, all the files from Pre-built.2/include to your redis folder under deps/pthreads-win32/include (the directory needs to be created).
    lib和dll有多个,要使用带pthreadVC2.dll和pthreadVC2.lib。如果想省事,可以把pthreadVC2.lib改名成pthread.lib。pthreadVC2.dll不要改名,直接放在msvs目录下,如果要直接运行,需要和.exe放在同级目录。Redis说明要求编译成静态lib,就不需要dll了。根据个人爱好来定,个人感觉用dll好。
    然后就是打开RedisServer.sln调试代码了

    9. Redis-server有没有调试日志

    在配置文件中有这样一个配置:loglevel ,详细如下:

    # Set server verbosity to 'debug'
    # it can be one of:
    # debug (a lot of information, useful for development/testing)
    # verbose (many rarely useful info, but not a mess like the debug level)
    # notice (moderately verbose, what you want in proction probably)
    # warning (only very important / critical messages are logged)
    #日志记录等级,4个可选值
    loglevel notice

    将这个设置到debug级别应该就能看到你想看到的。

    阅读全文

    与redis源码调试相关的资料

    热点内容
    全新云服务器价格对比 浏览:383
    python为什么去除了switch语句 浏览:54
    二进制7到8的算法 浏览:807
    服务器机柜叫什么名字 浏览:345
    vue3源码作者 浏览:828
    app右下角标怎么关 浏览:831
    怎么对一个盘加密码 浏览:670
    练习sql用什么样的服务器 浏览:978
    asp与php对比 浏览:643
    php模除 浏览:254
    android上传图片方式 浏览:885
    华为视频会议服务器如何连接 浏览:224
    phpfpm并发数 浏览:925
    云服务器哪里看 浏览:244
    戴尔emc服务器led怎么拔出 浏览:794
    程序员霸王 浏览:371
    文件夹重合如何分开 浏览:163
    mdk3命令 浏览:502
    我的世界服务器云地址是什么 浏览:755
    往复压缩机气缸 浏览:248