1、前言

我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 Redis 集群环境的介绍,并不是很多或者说还不够详细。

那么,本文会手把手带着大家搭建一套 Redis 集群环境,Redis 集群在公司内部生产环境,大都是使用 Linux 操作系统搭建的。

所以,本文也带领大家搭建一套虚拟机环境,虚拟机中安装 Linux,常用的 Linux 操作系统如 Ubuntu、CentOS、Redhat等等。

正好我的笔记本上以前下载过 CentOS 镜像,所以咱们就使用 CentOS 来安装操作系统,步骤也很简单,下面会具体介绍。

2、虚拟机环境搭建

如果你在公司,也可以使用公司内部现成的虚拟机来安装,但是如果你不在公司了,因为公司环境本身的限制,可能你得连接公司的VPN才可以访问公司内的服务器,并不是很方便。

所以,不如自己本机搭建个虚拟机环境,只要有操作系统镜像,任由你安装,使用和管理起来都比较方便。

本人使用的 MAC OS,MAC OS 本身就是 Unix 内核的桌面版操作系统,所以如果你的电脑是 MAC,也可以直接搭建 Redis 集群了,但是目前来看大部分同学还是使用 Windows 操作系统的居多,考虑到这一点,还是安装个虚拟机更为方便。

虚拟机可以选择 Oracle 开源的免费虚拟机软件 VirtualBox,我在使用过程中目前暂时没有发现 MAC OS 上有什么问题。

下面介绍下 VirtualBox 的安装和配置步骤:

VirtualBox 很傻瓜式,非常简单的,鉴于有的人并不是都用过,所以这里也一并介绍下。

1)官网下载并安装

到官网下载对应你电脑操作系统的 VirtualBox 软件。

下载地址:https://www.virtualbox.org/wiki/Downloads

目前 OS X 的最新版本:VirtualBox-6.0.14-133895-OSX.dmg

下载后双击直接安装。

2)新建虚拟机

这里选择的「专家模式」创建,如果选择「向导模式」(默认),安装过程会有很多提示信息。

内存按照默认选择 1024M 创建,虚拟硬盘默认 VDI,指使用 VirtualBox 的磁盘镜像。

Linux 镜像默认虚拟硬盘大小为 8g,如果要安装 windows 虚拟机,虚拟硬盘大小默认建议申请 32g 的磁盘空间。

点击「创建」完成虚拟机的创建,此时还没有提示选择操作系统镜像的安装。

3)配置虚拟机

显示缩放率调整:

本人的电脑使用默认缩放率 100%,窗口很小,进入到全局设置中,点击「显示」调整缩放率如 200% 左右,你可以根据窗口大小自行调整。

虚拟机网卡配置:

进入「网络」,连接方式选择「桥接网卡」,注意当你换了 wifi 环境,需要重新配置网络 IP 等。

4)安装操作系统

新建完虚拟机,右侧界面上点击「启动」,界面如下所示:

选择本地准备好的 CentOS Linux 操作系统镜像文件,点击「创建」开始安装过程。

安装过程的注意点,选择语言,默认 English,时区选择 Asia Shanghai,选择 INSTALLATION DESTINATION 默认自动分区。

以上确定后,点击「Begin Installation」开始安装,下一步可以设置 root 账号密码。

完成安装后系统会自动重启,重启后输入刚刚设置的 root 密码登录,进入到虚拟机中。

5)虚拟机环境配置

编辑 ifcfg-enp0s3 文件:

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

# 修改ONBOOT为yesONBOOT=yes

设置静态 IP 地址:

# 默认dhcp修改为staticBOOTPROTO=static# 静态IP地址IPADDR=192.168.0.111# 你的wifi网络子网掩码NETMASK=255.255.255.0 # 你的wifi网络网关地址GATEWAY=192.168.0.1

重启网络:

service network restart

配置 DNS:

# 检查 NetManager 状态:systemctl status NetworkManager.service# 检查 NetManager 管理的网络接口:nmcli dev status# 检查 NetManager 管理的网络连接:nmcli connection show# 设置 dns:nmcli con mod enp0s3 ipv4.dns "114.114.114.114 8.8.8.8"# 让 dns 配置生效:nmcli con up enp0s3

配置 hosts:

编辑 hosts 文件,可以用于 ssh 免密配置。

vi /etc/hosts

# 本机 hosts 配置192.168.0.111 host01# 其他主机 hosts 配置192.168.0.112 host02

关闭防火墙:默认开启,启动一些软件会导致网络无法互通

systemctl stop firewalld.servicesystemctl disable firewalld.service

配置 yum:

yum 为软件包管理工具

yum clean all# 服务器的包下载的本地缓存yum makecacheyum install -y wget

此时,你登录到虚拟机中,执行 ifconfig 看不到网卡信息,net-tools 工具包安装一下。

yum install -y net-tools

安装 JDK:

安装方式很多,如果有 rpm 包,可以 wget 下载下来。

执行 rpm 安装命令:

rpm -ivh jdk-8u131-linux-x64.rpm

配置好 JDK 环境:

vi ~/ .bashrcexport JAVA_HOME=/usr/java/latestexport PATH=$PATH:$JAVA_HOME/binsource .bashrc

检查安装是否成功:java -version 正常显示JDK版本信息表示安装正常。

6)其他虚拟机节点安装

VirtualBox 提供了虚拟机克隆功能,安装好一台虚拟机操作系统,通过「复制」快速的创建多台相同操作系统的虚拟机。

复制后修改下虚拟机名称,正常启动后,修改下静态 IP 地址和 hosts 配置,参考步骤5。

7)ssh 免密互信配置

ssh 互信配置后,可以通过 ssh 后跟 IP 或 主机名无需输入密码就能登录到服务器上去,运维过程中非常常用的一个配置。

执行命令:

# 生成本机的公私秘钥对ssh-keygen -t rsa

将公钥复制为 authorized_keys 文件,此时使用 ssh 连接本机就不需要输入密码了。

cd /root/.sshcp id_rsa.pub authorized_keys

使用 ssh-copy-id -i hostname 命令将本机的公钥拷贝到指定机器的 authorized_keys 文件中。

比如你在 host01 机器上,以后就可以直接通过 ssh host02 命令登录到 host02 机器上了,不需要再次输入密码了。

3、Redis集群环境搭建

Redis 集群简介:

Redis 是一个开源的 key-value 分布式存储系统,由于其出众的性能,大部分互联网企业将其用来作为服务端分布式缓存使用。Redis 在 3.0 以前仅支持单实例模式,也支持主从模式、哨兵模式来达到高可用,避免单点故障。在 3.0 版本以后推出了集群模式,更好的满足业务需求。

Redis 集群采用 P2P 模式,完全去中心化。将所有 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot。集群节点之间定期同步数据保持数据一致性。然后,Redis 客户端可以向任一 Redis 实例发起请求,如果所需数据在该实例中不存在,则会通过重定向命令引导客户端访问所需的其他实例。

本文基于 Redis4.0.1 版本搭建集群。

当然,如果你有 Docker 或 K8S 环境,直接从镜像仓库拉取现成的 Redis 镜像后,通过一些参数配置启动后,就可以很快的搭建一套集群环境。

但这种方式使用对你来说是黑盒的,也就是安装过程你是了解不到的。

为了大家方便学习了解,我们还是使用原始的,通过安装包的形式来部署 Redis。

我们准备三台虚拟机,搭建一个三主三从的 Redis 集群。

Redis 目前最新版本到了 5.0.6,本次安装使用了 Redis4.0.1 版本,Redis4.0 版本也是目前很多企业在用的,经过生产环境大量验证的版本,比较稳定。

搭建集群过程如下:

1)下载并安装

下载安装包:

# wget下载安装包wget http://download.redis.io/releases/redis-4.0.14.tar.gz# 解压缩tar xzf redis-4.0.14.tar.gz# 重命名为redis,并拷贝到/usr/local目录mv redis-4.0.14 rediscp -r redis /usr/local

安装依赖包:

yum install -y tcl gcc zlib-devel openssl-devel

编译:

make MALLOC=libc

将常用命令添加到系统PATH:

cp -a /usr/local/redis/src/redis-server/usr/local/redis/src/redis-cli/usr/local/redis/src/redis-sentinel/usr/local/redis/src/redis-trib.rb/usr/local/redis/src/redis-check-aof/usr/local/redis/src/redis-check-rdb/usr/local/redis/src/redis-benchmark/usr/local/bin/

这样就可以直接在服务器上任意目录使用命令了。

2)集群目录创建并添加配置

创建 Redis 集群目录:

mkdir -p /opt/redis-cluster/nodes-{7001,7002}

执行命令后,在 /opt/redis-cluster 目录会创建 nodes-7001 和 nodes-7002 两个目录。

在上述两个目录下新建 redis.conf 文件,添加文件内容:

# 当前机器IP地址绑定设置portbind 192.168.0.111# redis 监听端口port 7001# 使用 yes 启用守护进程daemonize yes# 当 Redis 以守护进程方式运行时,Redis 默认会把 pidpidfile redis_7001.pid# 日志记录级别,共4个级别:debug、verbose、notice(默认)、warningloglevel notice# 日志目录logfile "/opt/redis-cluster/nodes-7001/redis_7001.log"# 本地数据库存放目录dir /opt/redis-cluster/nodes-7001/# 保存节点配置,自动创建,自动更新cluster-config-file nodes-7001.conf# 通过upstart和systemd管理Redis守护进程,与具体的操作系统相关的supervised no# 每次更新操作后进行日志记录,默认:noappendonly yes# 开启集群模式cluster-enabled yes# 集群超时时间,节点超过这个时间没反应就断定是宕机cluster-node-timeout 15000# 多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合save 900 1save 300 10save 60 10000# 本地数据库的名字dbfilename dump.rdb# 存储到本地文件开启压缩,默认:yesrdbcompression yes# 更新日志文件名appendfilename "appendonly.aof"# 指定更新日志条件:# no: 等操作系统进行数据缓存同步到磁盘(快)# always: 每次更新操作后手动调用 fsync() 将数据写磁盘(慢,安全)# everysec: 每秒同步一次(折中,默认值)appendfsync everysec# 密码暂未设置,给出配置# 当 master 服务设置了密码保护时,slav 服务连接 master 的密码#masterauth# 连接密码,客户端需使用AUTH <password>命令连接#requirepass

此外,还有很多配置项,可自行查阅官网文档。

3)下载并安装 ruby

搭建 Redis 集群会使用到 redis-trib.rb 脚本来协助创建,所以需要依赖 ruby。

当然,三台虚拟机都可以安装,或者你选择其中一台虚拟机安装,并记住它,到时就从这台机器上执行命令来创建 Redis 集群。

我们使用的 Centos 7 操作系统,默认没有带 ruby,所以需要单独下载安装。

下载并安装 ruby:

# wget下载ruby安装包wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.4.tar.gz# 解压缩tar xzf ruby-2.3.4.tar.gz# 拷贝到/usr/local目录下,重命名为ruby目录mv ruby-2.3.4 /usr/local/ruby# 编译cd /usr/local/ruby/ && ./configure && mark && make install# 查看下安装的版本ruby -v

如果你的 ruby 版本过低,卸载重装:

ruby -vrpm -qa | grep rubyyum erase ruby

安装 ruby-redis.gem:

# 安装 ruby-redis.gemcd /usr/local/redis && gem install redis

安装过程如果报错如下:

ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NoMethodError) undefined method invoke_with_build_args for nil:NilClass

解决办法:

cd /usr/local/ruby/ext/zlibruby extconf.rbmake && make install

再次执行 gem install redis,如果报错如下:

ERROR: While executing gem ... (Gem::Exception) Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

解决办法:

cd /usr/local/ruby/ext/opensslruby extconf.rb将上个步骤生成的MakeFile文件中的${top_srcdir}都替换为../..make && make install

3)其他两台虚拟机上重复上述步骤1和2

请记得修改下 redis.conf 文件的端口:

不需要一个个端口修改,编辑文件

vi redis.conf

直接输入如下命令:

:%s/7001/7002/g

就可以批量将 7001 修改为 7002,然后输入 :wq! 退出保存。

4)创建 Redis 集群

使用 redis-trib.rb 脚本创建 Redis 集群,执行如下命令后,会自动分配集群中的 3 个 master 和 3 个 slave。

cd /usr/local/redis/src./redis-trib.rb create --replicas 1 192.168.0.111:7001 192.168.0.111:7002 192.168.0.112:7001 192.168.0.112:7002 192.168.0.113:7001 192.168.0.113:7002

创建集群过程中遇到:

>>>Creating cluster [ERR] Sorry, can't connect to node 192.168.0.111:7001

解决办法:

关闭防火墙,上文中也已提到过。

安装集群执行结果示例:

输入yes,回车,如下示例:

我们从图中看到了,三个 M(Master)分配了三台虚拟机的 7001 端口,三个 S(Slave)分配了三台虚拟机的 7002 端口。

如果虚拟机重启后,需要再次创建 Redis 集群或者集群中新增节点,可能遇到如下问题:

 ./redis-trib.rb create --replicas 1 192.168.0.111:7001 192.168.0.111:7002 192.168.0.112:7001 192.168.0.112:7002 192.168.0.113:7001 192.168.0.113:7002>>> Creating cluster[ERR] Node 192.168.0.111:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决方法:

删除节点下面的 dump.rdb、appendonly.aof、nodes-7001.conf 文件,并重启 Redis。

cd /opt/redis-cluster/nodes-7001 && rm -rf dump.rdb appendonly.aof nodes-7001.conf cd /opt/redis-cluster/nodes-7002 && rm -rf dump.rdb appendonly.aof nodes-7002.conf # 重启redis,开机自启动,下文中会有详细描述service redis restart

如果是新增节点,除执行上述命令外,可能会需要登录到节点上删除数据库。

redis-cli -c -h 192.168.0.114 -p 7001192.168.0.114:7001> flushallOK

5)测试 Redis 集群

为了测试方便,暂时没有设置集群密码,在上文配置中也有提到了密码设置参数。

使用 redis-cli 客户端登录:

# 直接通过redis-cli命令连接redis-cli -c -h 192.168.0.111 -p 7001192.168.0.111:7001> set name zhangsan-> Redirected to slot [5798] located at 192.168.0.112:7001OK192.168.0.112:7001> get name"zhangsan"

找到其他节点任一 IP 和端口连接查询这个 key:

redis-cli -c -h 192.168.0.113 -p 7001192.168.0.113:7001> get name-> Redirected to slot [5798] located at 192.168.0.112:7001"zhangsan"

说明我们测试的数据在集群之间同步完成了。

查看下集群配置信息:

# redis-cli命令连接节点redis-cli -c -h 192.168.0.111 -p 7001# 执行 CLUSTER nodes,看到了集群节点分配的信息192.168.0.112:7001> CLUSTER nodesf3b21c6377853c8da63ac6a55fecb1937715ec3b 192.168.0.111:7002@17002 slave 6e81b09991104bf09129aa2bbd226d94d3fcdbe7 0 1574004839302 3 connected75dec349e2b7fcbcad4d5f5d7979aadefdf69514 192.168.0.113:7002@17002 slave d32ab53d8f93661b09a3c31513fce8c4ed6cbf2b 0 1574004838284 6 connected6388d80cd9f0a1fbf03d0ac2a309cfedfdb79dc4 192.168.0.111:7001@17001 master - 0 1574004836251 1 connected 0-546059f25e64a8ab1fc3309e15d51ea630f439793a94 192.168.0.112:7002@17002 slave 6388d80cd9f0a1fbf03d0ac2a309cfedfdb79dc4 0 1574004840322 1 connectedd32ab53d8f93661b09a3c31513fce8c4ed6cbf2b 192.168.0.113:7001@17001 master - 0 1574004839000 5 connected 10923-163836e81b09991104bf09129aa2bbd226d94d3fcdbe7 192.168.0.112:7001@17001 myself,master - 0 1574004837000 3 connected 5461-10922# 执行 CLUSTER info,看到集群自身的信息192.168.0.112:7001> CLUSTER infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:3cluster_stats_messages_ping_sent:1256cluster_stats_messages_pong_sent:1275cluster_stats_messages_meet_sent:3cluster_stats_messages_sent:2534cluster_stats_messages_ping_received:1273cluster_stats_messages_pong_received:1259cluster_stats_messages_meet_received:2cluster_stats_messages_received:2534

6)设置开机自启动

由于咱们使用的虚拟机,不用的时候可以直接关机,避免一直占用着系统的资源。

当重启虚拟机的时候,如果你不嫌繁琐,可以登录到虚拟机里,直接运行 redis-server 命令启动服务。

更为优雅的方式,当然是开机后自动启动 Redis 服务,这也是生产环境上,研发或运维都必须要关注的,服务器重启,对应的服务也要跟着自动启动,而不需要人为手动干预了。

进入 /etc/init.d/ 目录,创建并编辑 redis 文件:

#!/bin/bash#chkconfig: 22345 10 90#description: Start and Stop redis

IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d '/'`

REDISPORT_1=7001REDISPORT_2=7002

PIDFILE_1=/opt/redis-cluster/nodes-7001/redis_7001.pidPIDFILE_2=/opt/redis-cluster/nodes-7002/redis_7002.pidCONF_1="/opt/redis-cluster/nodes-7001/redis.conf"CONF_2="/opt/redis-cluster/nodes-7002/redis.conf"

EXEC=/usr/local/redis/src/redis-serverCLIEXEC=/usr/local/redis/src/redis-cli

case "$1" in    start)        if [ -f $PIDFILE_1 ];then            echo "$PIDFILE_1 exists,process is already running or crashed"        else            echo "Starting Redis server... $CONF_1"            $EXEC $CONF_1        fi        if [ -f $PIDFILE_2 ];then            echo "$PIDFILE_2 exists,process is already running or crashed"        else            echo "Starting Redis server... $CONF_2"            $EXEC $CONF_2        fi        ;;    stop)        if [ ! -f $PIDFILE_1 ];then            echo "$PIDFILE_1 does not exist,process is not running"        else            PID=$(cat $PIDFILE_1)            echo "Stopping..."            $CLIEXEC -h $IP -p $REDISPORT_1 shutdown            while [ -x /proc/${PID} ]                do                    echo "Waiting for Redis to shutdown..."                    sleep 1                done                echo "Redis stopped $CONF_1"        fi

        if [ ! -f $PIDFILE_2 ];then            echo "$PIDFILE_2 does not exist,process is not running"        else            PID=$(cat $PIDFILE_2)            echo "Stopping..."            $CLIEXEC -h $IP -p $REDISPORT_2 shutdown            while [ -x /proc/${PID} ]                do                    echo "Waiting for Redis to shutdown..."                    sleep 1                done                echo "Redis stopped $CONF_2"        fi        ;;    restart)        "$0" stop        sleep 3        "$0" start        ;;    *)       echo "Please use start or stop or restart as first argument"        ;;esac

每台虚拟机有两个 Redis 端口 7001 和 7002,所以对上述脚本做了修改,如果一台机器就一个 Redis 服务就简单多了,大家可自行拷贝脚本修改。

Redis 文件修改为可执行文件:

chmod +x /etc/init.d/redis

添加到系统服务列表:

# 将 /etc/init.d/redis 添加到系统服务列表chkconfig --add redis# 设置开机自启动chkconfig redis on# 查看所有注册的脚本文件chkconfig --list

然后,你就不需要去找 Redis 启动命令和配置文件了,方便管理和运维。

有点 low 的启动方式:

/usr/local/redis/src/redis-server /opt/redis-cluster/nodes-7001/redis.conf/usr/local/redis/src/redis-server /opt/redis-cluster/nodes-7002/redis.conf

比较优雅的启动方式:

# 启动服务service redis start# 停止服务service redis stop# 重启服务service redis restart

另外一种开机自启动方式:

将启动命令直接添加到 /etc/rc.d/rc.local 文件中。

修改 rc.local 文件为可执行文件,否则重启后不执行:

chmod +x /etc/rc.d/rc.local

4、小结

本文使用 VirtualBox 免费开源的虚拟机软件,一步一步来完成虚拟机环境的搭建。

然后基于三台虚拟机环境,搭建了一套 Redis 集群环境。

通过 redis-trib.rb 脚本来创建 Redis 集群环境,三台机器,6个通讯端口,自动构建为三主三从的集群架构。

根据执行 redis-trib.rb 脚本日志结果,自动分配IP的 Redis 集群架构如下所示:

对虚拟机安装配置和 Redis 集群安装配置过程中,遇到的问题给出了相应的解决办法,如果你安装过程中还遇到一些新的问题,也可以自行查询相关资料解决。

并且,从上述安装实践过程中,也能学习到很多常用的 Linux 命令。

大家自行搭建虚拟机或 Redis 集群环境时,可以#收藏#本文作为参考!

END

Java面试题专栏

【20期】你知道为什么HashMap是线程不安全的吗?

【19期】为什么Java线程没有Running状态?

【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?

【17期】什么情况用ArrayList or LinkedList呢?

【16期】你能谈谈HashMap怎样解决hash冲突吗

【15期】谈谈这几个常见的多线程面试题

【14期】你能说说进程与线程的区别吗

【13期】谈谈 Redis 的过期策略

【12期】谈谈项目中单点登录的实现原理?

【11期】分布式系统接口,如何避免表单的重复提交?

欢迎长按下图关注公众号后端技术精选

带你来搭建虚拟机和Redis集群,记得收藏相关推荐

  1. centos redis 升级版本_带你来搭建虚拟机和Redis集群,记得收藏

    来源于公众号Java爱好者社区 , 作者东升的思考 1.前言 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 Redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本 ...

  2. 带你搭建一下虚拟机和Redis集群,记得收藏

    前言: 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本文会手把手带着大家搭建一套 Redis 集群环境,Re ...

  3. 华为三台服务器虚拟化做集群怎样做,使用三台云服务器搭建真正的Redis集群

    三台云服务器搭建redis集群# 今天花了一天的时间弄集群redis:遇到了很多坑,从头开始吧 环境讲解: 两台配置:1核2G,另一台:1核1G: 操作系统:Centos 7.6 Redis:3.2. ...

  4. Linux系统搭建Solr和Redis集群详细步骤

    1 搭建Solr集群(SolrCloud) 1.1 Zookeeper介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoo ...

  5. redis集群搭建(非常详细,适合新手)

    redis集群搭建 在开始redis集群搭建之前,我们先简单回顾一下redis单机版的搭建过程 下载redis压缩包,然后解压压缩文件: 进入到解压缩后的redis文件目录(此时可以看到Makefil ...

  6. Redis集群搭建(非常详细)

    https://blog.csdn.net/qq_42815754/article/details/82912130 redis集群搭建 在开始redis集群搭建之前,我们先简单回顾一下redis单机 ...

  7. 一次搞定:分布式缓存 Redis 集群搭建!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Esofar 来源 | cnblogs.com ...

  8. redis 集群搭建_一文轻松搞懂redis集群原理及搭建与使用

    转载:https://juejin.im/post/5ad54d76f265da23970759d3 作者:SnailClimb 这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. ...

  9. 分布式缓存 Redis 集群搭建,这里一次性帮你搞定!

    作者:Esofar cnblogs.com/esofar/p/10486621.html Redis 集群简介 Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推 ...

最新文章

  1. 机器学习与统计学的争论,有意义吗?
  2. 算法----选择排序(select sort)
  3. linux shell base64 加解密 编码字符串
  4. boost::random模块使用多精度类型测试所有与浮点相关的生成器和分布的测试程序
  5. 安装MongoDB(做成Windows服务)并加载C#驱动程序
  6. vue 项目的I18n国际化之路
  7. [Redux/Mobx] Redux中异步action和同步action最大的区别是什么?
  8. MySQL-回表查询与索引覆盖
  9. 【SpringBoot 】 组件管理 + 属性注入
  10. CAT - 监控平台之装配篇
  11. Bailian4081 树的转换【DFS】
  12. C#把Xml转换为DataSet的两种方法
  13. linux ps auxf,ps -aux命令详解
  14. 算法系列:基于 FPGA 的图像边缘检测系统设计(sobel算法)
  15. html可以播放所有本地视频播放器,VR播放器有哪些 能播放本地视频的VR播放器推荐...
  16. SATA电源线的作用
  17. Java 面试题大全(一篇足以,建议收藏)
  18. 怎样把gis锯齿边_在arcgis中如何消除锯齿状边缘
  19. python空间点赞_用Python登录好友QQ空间点赞的示例代码
  20. App Inventor 2连接模拟器一直失败的问题解决

热门文章

  1. xxl-job 调度中心/执行器/Springboot
  2. 归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)...
  3. linux下搭建golang开发环境
  4. Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战
  5. 远程安装Linux操作系统
  6. 008-绘制三角函数图像(二)
  7. 计算机毕业设计之java+springboot基于vue的智慧食堂点餐系统设计与实现
  8. python----实战训练100例
  9. 为什么买基金总是亏钱?
  10. leetcode-827:最大人工岛