我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis数据分片如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis数据分片如何实现

今天小编给大家分享一下Redis数据分片如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Twemproxy的介绍

Twitter的Twemproxy是目前市面上用的最广的使用做多的用来做redis集群服务。由于redis是单线程,而且官方的cluster 还不是很稳定和广泛使用。Twemproxy是一种代理分片机制,Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案(或者LVS)。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。其实twemproxy不光实现了redis协议,还实现了memcached协议,什么意思?换句话说,twemproxy不光可以代理redis,还可以代理memcached。

Twemproxy的优点:

1)对外暴露一个访问节点,减少程序复杂度。

2)支持失败节点自动删除,可以设置重新连接该节点的时间,可以设置连接多少次之后删除该节点,该方式适合作为cache存储,不然会丢失Key;

3)支持设置HashTag,通过HashTag可以自己设定将两个KEYhash到同一个实例上去。

4)多种hash算法,并且可以设置后端实例的权重。

5)减少与redis的直接连接数:保持与redis的长连接,可设置代理与后台每个redis连接的数目,自动分片到后端多个redis实例上。

6)避免单点问题:可以平行部署多个代理层,客户端自动选择可用的一个。

7)高吞吐量:连接复用,内存复用,将多个连接请求,组成redis pipelining统一向redis请求。

Twemproxy的缺点:

1)不支持针对多个值的操作,比如取sets的子交并补等。

2)不支持Redis的事务操作。

3)对于已申请的内存不会释放,所有机器内存要大,且需要定期重启,不然就会出现客户端连接错误。

4)不支持动态增删节点,修改完配置需重启。

5)改变节点时,系统不会对已有数据重分配,不自己写脚本做数据迁移的话,会造成部分key丢失(key本身存在某redis上,只是key被哈希到了其他节点,造成“丢失”)。

6)权重直接影响key的哈希结果,改变节点权重会造成部分key丢失。

7)默认Twemproxy是单线程运行,但是大部分使用Twemproxy的公司都会自行进行二次开发一下,改成多线程。

总体来说,twemproxy还是非常的靠谱,虽然性能有损失,但是相对来说还是很值得的,而且久经考验,使用非常广泛。关于更多更加详细的资料请参考官方文档。另外twemproxy只适合静态集群,不适合需要动态增删节点,手动调整负载的场景,如果我们直接来用,需要做开发改进工作。https://github.com/wandoulabs/codis这个系统基于twemproxy,增加了动态数据迁移等功能,具体使用方法需要进一步测试。

Twemproxy使用架构

第一种:单节点Twemproxy

Redis数据分片如何实现

ps:节省硬件资源,但容易有单点故障。

第二种:高可用Twemproxy

Redis数据分片如何实现

PS:浪费二分之一的资源,但是节点高可用。

第三种:负载均衡Twemproxy

Redis数据分片如何实现

PS:如果你是大规模Redis或Memcached应用场景,就可以做Twemproxy的负载军和场景,也就是在高可用Twemproxy的基础上加LVS节点,利用LVS(Linux virtual server)做Twemproxy的负载均衡,LVS是四层负载均衡技术,有很强大的代理能力,具体可以看本博客的LVS章节介绍。但是当你使用LVS之后,又出现了Twemproxy的问题,单点故障故障问题,这个时候又要跟给LVS做高可用了。但是LVS也支持做负载均衡,利用OSPF路由技术就可以做负载均衡了。而这个架构也就是我目前工作中正在使用的架构方式。

另外不管使用以上哪种架构方式,都无法避免Redis的单点故障问题,Redis持久化也无法避免硬件故障问题。如果必须要保证Redis数据访问的不可中断性,那你还是使用Redis集群模式吧,集群模式目前对JAVA支持还不错,工作中也有大量的使用。

安装Twemproxy

下载Twemproxy

git clone https://github.com/twitter/twemproxy.git

安装Twemproxy

Twemproxy需要使用Autoconf进行编译配置。 GNU Autoconf是一个在Bourne shell下制作供编译、安装和打包软件的配置脚本的工具。Autoconf并不受程序语言限制,常用于C、C++、Erlang和Objective-C。配置脚本控制了一个软件包在特定系统上的安装。在进行一系列测试后,配置脚本从模板中生成makefile与头文件进而调整软件包,使之适应某一种系统。Autoconf与Automake、Libtool等软件组成了GNU构建系统。Autoconf由戴维·麦肯思于1991年夏天编写用于支持他在自由软件基金会的编程工作。此后,Autoconf包含了多人编写的改进代码并成为了使用最广泛的自由编译配置软件。

下面开始使用autoreconf对twemproxy编译配置:

[root@www twemproxy]# autoreconfconfigure.ac:8: error: Autoconf version 2.64 or higher is requiredconfigure.ac:8: the top levelautom4te: /usr/bin/m4 failed with exit status: 63aclocal: autom4te failed with exit status: 63autoreconf: aclocal failed with exit status: 63[root@www twemproxy]# autoconf --versionautoconf (GNU Autoconf) 2.63

提示autoreconf 的版本过低,上面使用的是autoconf 2.63版本的,所以下面下载autoconf 2.69版本进行编译安装。注意如果你是CentOS6,那么你的默认版本就是2.63,如果你是CentOS7,那么你的默认版本应该是2.69,如果你是Debian8或Ubuntu16,那么你的默认版本应该也是2.69。反正如果执行autoreconf报错就说明版本低了,需要编译安装了。

编译安装Autoconf

[root@www ~]# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz[root@www ~]# tar xvf autoconf-2.69.tar.gz[root@www ~]# cd autoconf-2.69[root@www autoconf-2.69]# ./configure --prefix=/usr[root@www autoconf-2.69]# make && make install[root@www autoconf-2.69]# autoconf --versionautoconf (GNU Autoconf) 2.69

编译安装Twemproxy

[root@www ~]# cd /root/twemproxy/[root@www twemproxy]# autoreconf -fvi[root@www twemproxy]# ./configure --prefix=/etc/twemproxy CFLAGS="-DGRACEFUL -g -O2" --enable-debug=full[root@www twemproxy]# make && make install

如果autoreconf -fvi时报如下错误,就是要安装libtool工具,需要依赖libtool(如果是CentOS直接使用yum install libtool即可,如果是Debian直接使用apt-get install libtool即可)。

autoreconf: Entering directory `.'autoreconf: configure.ac: not using Gettextautoreconf: running: aclocal --force -I m4autoreconf: configure.ac: tracingautoreconf: configure.ac: adding subdirectory contrib/yaml-0.1.4 to autoreconfautoreconf: Entering directory `contrib/yaml-0.1.4'autoreconf: configure.ac: not using Autoconfautoreconf: Leaving directory `contrib/yaml-0.1.4'autoreconf: configure.ac: not using Libtoolautoreconf: running: /usr/bin/autoconf --forceconfigure.ac:36: error: possibly undefined macro: AC_PROG_LIBTOOL     If this token and others are legitimate, please use m4_pattern_allow.     See the Autoconf documentation.autoreconf: /usr/bin/autoconf failed with exit status: 1

Twemproxy添加配置文件

[root@www twemproxy]# mkdir /etc/twemproxy/conf[root@www twemproxy]# cat /etc/twemproxy/conf/nutcracker.ymlredis-cluster: listen: 0.0.0.0:22122 hash: fnv1a_64 distribution: ketama timeout: 400 backlog: 65535 preconnect: true redis: true server_connections: 1 auto_eject_hosts: true server_retry_timeout: 60000 server_failure_limit: 3 servers:   - 172.16.0.172:6546:1 redis01   - 172.16.0.172:6547:1 redis02

配置选项介绍:

redis-cluster:给这个配置段取一个名字,可以有多个配置段;

listen:设置监控IP和端口端口;

hash:具体的hash函数,支持md5,crc16,crc32,finv1a_32,fnv1a_64,hsieh,murmur,jenkins等十多种,一般选用fnv1a_64可以了,默认也是fnv1a_64;

hash_tag:hash_tag允许根据key的一个部分来计算key的hash值。hash_tag由两个字符组成,一个是hash_tag的开始,另外一个是hash_tag的结束,在hash_tag的开始和结束之间,是将用于计算key的hash值的部分,计算的结果会用于选择服务器。例如:如果hash_tag被定义为”{}”,那么key值为”user:{user1}:ids”和”user:{user1}:tweets”的hash值都是基于”user1”,最终会被映射到相同的服务器。而”user:user1:ids”将会使用整个key来计算hash,可能会被映射到不同的服务器。

distribution:指定哈希算法,这个哈希算法决定通过上面hash后的key如何分布在多个server上,默认是”ketama“一致性哈希。ketama:ketama一致性hash算法,会根据服务器构造出一个hash ring,并为ring上的节点分配hash范围。ketama的优势在于单个节点添加、删除之后,会最大程度上保持整个群集中缓存的key值可以被重用。modula:modula非常简单,就是根据key值的hash值取模,根据取模的结果选择对应的服务器。random:random是无论key值的hash是什么,都随机的选择一个服务器作为key值操作的目标。

timeout:设置twemproxy的超时时间,当timeout被设置后,如果在timeout的时间过后还没有从服务端得到回应,这时会将超时错误信息SERVER_ERROR Connection time out发送给客户端

backlog:监听TCP的backlog(连接等待队列)的长度,默认是512。

preconnect:指定是否在系统启动时,twemproxy就建立和所有redis的连接,默认是false,一个布尔值;

redis:指定此配置段否作为Redis做代理,如果不加redis为true的话,就可以为memcached集群做代理(这就是Twemproxy作为redis或memcached集群代理的唯一区别);

redis_auth: 如果你的后端Redis开启了认证,那么就需要redis_auth指定认证的密码了;

server_connections:twemproxy与每台redis服务器的连接数,默认就是1,如果大于1,用户命令可能发到不同的连接上,可能造成命令的实际执行顺序和用户指定的不一致(类似并发);

auto_eject_hosts:是否在节点无法响应的时候剔除,默认为true,但是需要注意,节点剔除后,因为机器数减少,机器哈希位置变化,会造成部分key无法命中,但是不剔除程序连接就会报错;

server_retry_timeout:控制服务器连接的时间间隔,单位是毫秒,在auto_eject_host被设置为true的时候产生作用,默认是30000毫秒;

server_failure_limit:Redis连续超时的次数,超过这个次数就视其为无法连接,如果auto_eject_hosts设置为true,那么此Redis会被移除;

servers:一个pool中的服务器的地址、端口和权重的列表,包括一个可选的服务器的名字,如果提供服务器的名字,将会使用它决定server的次序,从而提供对应的一致性hash的hash ring。否则,将使用server被定义的次序,可以通过两种字符串格式指定’host:port:weight’或者’host:port:weight name’。一般都是使用第二种别名的方式,这样当其中某个Redis节点出现问题时,可以直接添加一个新的Redis节点但服务器名字不要改变,这样twemproxy还是使用相同的服务器名称进行hash ring,所以其他数据节点的数据不会出现问题(只有挂点的机器数据丢失)。

PS:要严格按照Twemproxy配置文件的格式来,不然就会有语法错误;另外,在Twemproxy的配置文件中可以同时设置代理Redis集群或Memcached集群,只需要定义不同的配置段即可。

启动twemproxy (nutcracker)

刚已经加好了配置文件,现在测试下配置文件:

[root@www twemproxy]# /etc/twemproxy/sbin/nutcracker -tnutcracker: configuration file 'conf/nutcracker.yml' syntax is ok

说明配置文件已经成功,现在开始运行nutcracker:

[root@www ~]# /etc/twemproxy/sbin/nutcracker -c /etc/twemproxy/conf/nutcracker.yml -p /var/run/nutcracker.pid -o /var/log/nutcracker.log -d选项说明:-h, –help                #查看帮助文档,显示命令选项;-V, –version             #查看nutcracker版本;-c, –conf-file=S         #指定配置文件路径 (default: conf/nutcracker.yml);-p, –pid-file=S          #指定进程pid文件路径,默认关闭 (default: off);-o, –output=S            #设置日志输出路径,默认为标准错误输出 (default: stderr);-d, –daemonize           #以守护进程运行;-t, –test-conf           #测试配置脚本的正确性;-D, –describe-stats      #打印状态描述;-v, –verbosity=N         #设置日志级别 (default: 5, min: 0, max: 11);-s, –stats-port=N        #设置状态监控端口,默认22222 (default: 22222);-a, –stats-addr=S        #设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0);-i, –stats-interval=N    #设置状态聚合间隔 (default: 30000 msec);-m, –mbuf-size=N         #设置mbuf块大小,以bytes单位 (default: 16384 bytes);

PS:一般在生产环境中,都是使用进程管理工具来进行twemproxy的启动管理,如supervisor或pm2工具,避免当进程挂掉的时候能够自动拉起进程。

验证是否正常启动

[root@www ~]# ps aux | grep nutcrackerroot     20002  0.0  0.0  19312   916 ?        Sl   18:48   0:00 /etc/twemproxy/sbin/nutcracker -c /etc/twemproxy/conf/nutcracker.yml -p /var/run/nutcracker.pid -o /var/log/nutcracker.log -droot     20006  0.0  0.0 103252   832 pts/0    S+   18:48   0:00 grep nutcracker[root@www ~]# netstat -nplt | grep 22122tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      20002/nutcracker

Twemproxy代理Redis集群

这里我们使用第一种方案在同一台主机上测试Twemproxy代理Redis集群,一个twemproxy和两个Redis节点(想添加更多的也可以)。Twemproxy就是用上面的配置了,下面只需要增加两个Redis节点。

安装配置Redis

在安装Redis之前,需要安装Redis的依赖程序tcl,如果不安装tcl在Redis执行make test的时候就会报错的哦。

[root@www ~]# yum install -y tcl[root@www ~]# wget https://github.com/antirez/redis/archive/3.2.0.tar.gz[root@www ~]# tar xvf 3.2.0.tar.gz -C /usr/local[root@www ~]# cd /usr/local/[root@www local]# mv redis-3.2.0 redis[root@www local]# cd redis[root@www redis]# make[root@www redis]# make test[root@www redis]# make install

配置两个Redis节点

[root@www ~]# mkdir /data/redis-6546[root@www ~]# mkdir /data/redis-6547[root@www ~]# cat /data/redis-6546/redis.confdaemonize yespidfile /var/run/redis/redis-server.pidport 6546bind 0.0.0.0loglevel noticelogfile /var/log/redis/redis-6546.log[root@www ~]# cat /data/redis-6547/redis.confdaemonize yespidfile /var/run/redis/redis-server.pidport 6547bind 0.0.0.0loglevel noticelogfile /var/log/redis/redis-6547.log

PS:简单提供两个Redis配置文件,如果开启了Redis认证,那么在twemproxy中也需要填写Redis密码。

启动两个Redis节点

[root@www ~]# /usr/local/redis/class="lazy" data-src/redis-server /data/redis-6546/redis.conf[root@www ~]# /usr/local/redis/class="lazy" data-src/redis-server /data/redis-6547/redis.conf[root@www ~]# ps aux | grep redisroot     23656  0.0  0.0  40204  3332 ?        Ssl  20:14   0:00 redis-server 0.0.0.0:6546              root     24263  0.0  0.0  40204  3332 ?        Ssl  20:16   0:00 redis-server 0.0.0.0:6547

验证Twemproxy读写数据

首先twemproxy配置项中servers的主机要配置正确,然后连接Twemproxy的22122端口即可测试。

[root@www ~]# redis-cli -p 22122127.0.0.1:22122> set key vlaueOK127.0.0.1:22122> get key"vlaue"127.0.0.1:22122> FLUSHALLError: Server closed the connection127.0.0.1:22122> quit

上面我们set一个key,然后通过twemproxy也可以获取到数据,一切正常。但是在twemproxy中使用flushall命令就不行了,不支持。

然后我们去找分别连接两个redis节点,看看数据是否出现在某一个节点上了,如果有,就说明twemproxy正常运行了。

[root@www ~]# redis-cli -p 6546127.0.0.1:6546> get key(nil)127.0.0.1:6546>

由上面的结果我们可以看到,数据存储到6547节点上了。目前没有很好的办法明确知道某个key存储到某个后端节点了。

如何Reload twemproxy?

由于twemproxy没有提供启动脚本,都是命令行参数启动的。所以,无法使用对twemproxy进行reload的操作,在生产环境中,一个应用无法reload(重载配置文件)是一个灾难。当你对twemproxy进行增删节点时如果直接使用restart的话势必会影响线上的业务。所以最好的办法还是reload,既然twemproxy没有提供,那么可以使用kill命令带一个信号,然后跟上twemproxy主进程的进行号即可。

kill -SIGHUP PID

注意,PID就是twemproxy master进程。

以上就是“Redis数据分片如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis数据分片如何实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis数据分片如何实现

今天小编给大家分享一下Redis数据分片如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Twemproxy的介绍Twi
2023-06-27

Redis如何实现数据分片扩展功能

Redis是一款被广泛应用的开源Key-Value数据库,以其高性能、低延迟、高并发等优点深受开发者的青睐。然而随着数据量的不断增加,单节点的Redis已经无法满足业务需求。为了解决这个问题,Redis引入了数据分片(Sharding)功能
Redis如何实现数据分片扩展功能
2023-11-07

java如何实现redis分片存储

Java中实现Redis分片存储可提高性能和可扩展性。主要步骤包括:创建连接池、分配分片、创建分片客户端、实现分片操作、使用代理类、确保数据一致性和负载均衡。分片存储的优势包括:提高性能、增强可扩展性、故障隔离和数据隔离。
java如何实现redis分片存储
2024-04-02

如何利用 Java 集合框架实现数据分片?(Java集合框架如何实现数据分片)

在Java开发中,数据分片是一个重要的技术概念,它可以帮助我们将大量的数据分散存储在多个部分中,以提高系统的性能和可扩展性。而Java集合框架提供了丰富的类和接口,使得实现数据分片变得相对容易。本文将详细介绍如何利用Java集合框架实现数据分片。一、
如何利用 Java 集合框架实现数据分片?(Java集合框架如何实现数据分片)
Java2024-12-19

Redis的集群模式怎么实现数据分片

在Redis集群模式中,数据分片是通过将数据分散存储在多个节点上来实现的。具体实现数据分片的步骤如下:哈希槽分配:Redis集群将所有数据分成16384个哈希槽,每个槽对应一个整数值。当一个键需要存储到集群中时,Redis会根据键的哈希值来
Redis的集群模式怎么实现数据分片
2024-05-07

如何在AmazonAurora中实现数据的分片和分区

在Amazon Aurora中,数据的分片和分区是通过创建和管理数据库表的方式来实现的。以下是在Amazon Aurora中实现数据的分片和分区的步骤:创建表时使用分区键:在创建表时,可以指定一个或多个列作为分区键。分区键将数据按照指定的列
如何在AmazonAurora中实现数据的分片和分区
2024-04-09

如何使用Redis实现分布式数据同步

如何使用Redis实现分布式数据同步随着互联网技术的发展和应用场景的日益复杂,分布式系统的概念越来越被广泛采用。在分布式系统中,数据同步是一个重要的问题。Redis作为一个高性能的内存数据库,不仅可以用来存储数据,还可以用来实现分布式数据同
如何使用Redis实现分布式数据同步
2023-11-07

Redis 分片集群的实现

目录1 搭建分片集群1.1 集群结构1.2 准备实例和配置1.3 启动1.4 创建集群1.5 测试2 散列插槽3 集群伸缩3.1 创建节点并添加到集群3.2 转移插槽4 故障转移4.1.自动故障转移4.2 手动故障转移5 RedisTemp
2023-01-30

Redis分片集群的实现

本文主要介绍了Redis分片集群的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-30

如何使用Redis实现分布式数据一致性

如何使用Redis实现分布式数据一致性引言:随着互联网的快速发展,分布式系统已成为许多企业的首选架构。在分布式系统中,数据的一致性是非常关键的。Redis作为一种高性能、可扩展的键值存储系统,被广泛应用于分布式系统中,下面将介绍如何使用Re
如何使用Redis实现分布式数据一致性
2023-11-07

如何实现redis数据一致性

小编给大家分享一下如何实现redis数据一致性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、缓存一致的必要性还是接上篇来说,我们已经解决了redis缓存穿透的
2023-06-29

Redis中如何利用序列化进行数据分片

Redis中可以使用序列化来对数据进行分片。在分片时,可以根据数据键名进行序列化处理,然后根据序列化后的数据进行分片操作。具体步骤如下:自定义序列化方法:首先需要自定义一个序列化方法,将数据进行序列化处理。常用的序列化方法有JSON、Me
Redis中如何利用序列化进行数据分片
2024-04-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录