一、 Redis 介绍

1 Redis 简介

Remote Dictionary Server(Redis)是一个开源的使用 ANSI C 语言编写、支持网络、可

基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),

列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2 Redis 的特点

2.1 优点:

1. 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash 表)、set(集合)、 zset(排序 set)、hyperloglog(基数估算) 2. 支持持久化操作,可以进行 aof 及 rdb 数据持久化到磁盘,从而进行数据备份或数 据恢复等操作,较好的防止数据丢失的手段。 3. 支持通过 Replication 进行数据复制,通过 master-slave 机制,可以实时进行数据的 同步复制,支持多级复制和增量复制,master-slave 机制是 Redis 进行 HA 的重要手段。 4. 单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

二、 安装 Redis 单机版

第一步 需要在 linux 系统中安装 gcc 命令:yum install -y gcc-c++

第二步 需要将下载好的 redis 压缩包添加到 linux 服务器中 版本:redis-3.0.0.tar.gz redis 的版本:副版本号奇数版本号是测试版,不建议在生产环境中使用。 偶数版本时稳定版建议在生产环境中使用。 3.0 版本更新比较大。集成了集群技术

三步 解压压缩包 命令:tar -zxvf redis......

第四步 编译 redis 命令:进入 redis 的解压完毕的根目录下 执行命令:make

第五步 安装 redis 命 令 : 进 入 redis 的 解 压 完 毕 的 根 目 录 下 , 执 行 命 令 : make install PREFIX=/usr/local/redis

第六步:启动 redis 1,前端启动 在 bin 目录下执行命令: ./redis-server (ctrl+c)退出 redis

2.后端启动 (1)先将 redis 解压目录下的 redis.conf 文件拷贝到 安装好的 redis 的 bin 目录下 命令:cp redis.conf /usr/local/redis/bin

(2)修改拷贝过来的 redis.conf 配置文件 命令:vim redis.conf 将 daemonize no 改为 yes

(3)启动 redis 在 bin 目录下执行命令:./redis-server redis.conf

(4)查看 redis 启动是否成功 输入命令:ps aux|grep redis

(5) 关闭 redis 的命令 ./redis-cli shutdown

第七步:测试 redis 在 bin 目录下启动 redis 自带的客户端 ./redis-cli 常见 redis 命令: ping--->pong

三、 Redis 数据类型

1 String(字符串)

Redis 字符串是字节序列。Redis 字符串是二进制安全的,这意味着他们有一个已知的 长度没有任何特殊字符终止,所以你可以存储任何东西,512 兆为上限

示例: redis 127.0.0.1:6379> SET name kevin OKredis 127.0.0.1:6379> GET name "kevin" incr 让当前键值以 1 的数量递增,并返回递增后的值incrby  可以指定参数一次增加的数值,并返回递增后的值
decr 让当前键值以 1 的数量递减 并返回递减后的值
decrby 可以指定参数一次递减的数值,并返回递减后的值
incrbyfloat 可以递增一个双精度浮点数
append 作用是向键值的末尾追加 value。如果键不存在则将该键的值设置为 value。返 回值是追加后字符串的总长度。
mget/mset 作用与 get/set 相似,不过 mget/mset 可以同时获得/设置多个键的键值
del 根据 key 来删除 value flushdb 清除当前库的所有数据 

2 Hash(hash 表)

Redis 的哈希是键值对的集合。 Redis 的哈希值是字符串字段和字符串值之间的映射, 因此它们被用来表示对象

示例: redis 127.0.0.1:6379> HSET key field valueOKredis 127.0.0.1:6379> HGET key field valuehset 存储一个哈希键值对的集合 hset key field value hget 获取一个哈希键的值 hget key field hmset 存储一个或多个哈希是键值对的集合 hmset key field1 value1 ......fieldN keyN hmget 获取多个指定的键的值 hmget key field1 ... fieldN hexists 判断哈希表中的字段名是否存在 如果存在返回 1 否则返回 0 hexists key field hdel 删除一个或多个字段 hdel key field hgetall 获取一个哈希是键值对的集合 hgetall key hvals 只返回字段值 hvals key hkeys 只返回字段名 hkeys key hlen 返回 key 的 hash 的元素个数 hlen key
3 

3 List(链表)

Redis 的链表是简单的字符串列表,排序插入顺序。您可以添加元素到 Redis 的列表的 头部或尾部

示例: redis 127.0.0.1:6379> lpush tutoriallist redis(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 101) "rabitmq"
2) "mongodb"
3) "redis lpush key value 向链表左侧添加rpush  key value 向链表右侧添加 lpop  key 从左边移出一个元素rpop  key 从右边移出一个元素llen key 返回链表中元素的个数 相当于关系型数据库中 select count(*) lrange key start end
lrange 命令将返回索引从 start 到 stop 之间的所有元素。Redis 的列 表起始索引为 0。
lrange 也支持负索引 lrange nn -2 -1  如 -1 表示最右边第一个元素 -2 表示最右边第二 个元素,依次类推。lindex key indexnumber 如果要将列表类型当做数组来用,lindex 命令是必不可少的。lindex 命令用来返回指定索引的元素,索引从 0 开始        如果是负数表示从右边开始计算的索引,最右边元素的索引是-1。Lset key indexnumber value   是另一个通过索引操作列表的命令,它会将索引为 index 的元素赋值为 value。

4 Set(集合)

Redis 的集合是字符串的无序集合。

示例:
redis 127.0.0.1:6379> sadd tutoriallist redis(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb(integer) 1redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer)
1 redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist1) "rabitmq"
2) "mongodb"
3) "redis"

sadd key value 添加一个 string 元素到,key 对应的 set 集合中,成功返回 1,如果元素已在集合中返回 0

scard key 返回 set 的元素个数,如果 set 是空或者 key 不存在返回 0

smembers key 返回 key 对应 set 的所有元素,结果是无序的

sismember key value 判断 value 是否在 set 中,存在返回 1,0 表示不存在或者 key 不存 在

srem key value 从 key 对应 set 中移除给定元素,成功返回 1,如果 value 在集合中不存 在或者 key 不存在返回 0

5 SortedSet(有序集合)zset

Redis 的有序集合类似于 Redis 的集合,字符串不重复的集合。

示例:redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000
1) "redis"2) "mongodb"3) "rabitmq" zadd key score value 将一个或多个 value 及其 socre 加入到 set 中zrange key start end  0 和-1 表示从索引为 0 的元素到最后一个元素(同 LRANGE 命令 相似)zrange key 0 -1 withscores 也可以连同 score 一块输出,使用 WITHSCORES 参数
zremrangebyscore key start end 可用于范围删除操作 

6 Redis 中的其他命令

ping 测试 redis 是否链接 如果已链接返回 PONG

echo value 测试 redis 是否链接 如果已链接返回 echo 命令后给定的值 keys * 返回所有的 key 可以加*通配 exists key 判断 string 类型一个 key 是否存在 如果存在返回 1 否则返回 0

expire key time(s) 设置一个 key 的过期时间 单位秒。时间到达后会删除 key 及 value

ttl key 查询已设置过期时间的 key 的剩余时间 如果返回-2 表示该键值对已经被删除

persist 移除给定 key 的过期时间

select dbindex 选择数据库(0-15)

move key dbIndex 将当前数据库中的 key 转移到其他数据库中

dbsize 返回当前数据库中的 key 的数目

info 获取服务器的信息和统计

flushdb 删除当前选择的数据库中的 key

flushall 删除所有数据库中的所有 key

quit 退出连接

四、 Redis 的配置以及持久化方案

1 redis.conf 文件

2 Redis 的数据持久化

2.1 RDB 方式

对内存中数据库状态进行快照 RDB 方式:将 Redis 在内存中的数据库状态保存到磁盘里面,RDB 文件是一个经过压 缩的二进制文件,通过该文件可以还原生成 RDB 文件时的数据库状态(默认下,持久化到 dump.rdb 文件,并且在 redis 重启后,自动读取其中文件,据悉,通常情况下一千万的字 符串类型键,1GB 的快照文件,同步到内存中的 时间是 20-30 秒) RDB 的生成方式:

1)执行命令手动生成 有两个 Redis 命令可以用于生成 RDB 文件,一个是 SAVE,另一个是 BGSAVE SAVE 命令会阻塞 Redis 服务器进程,直到 RDB 文件创建完毕为止,在服务器进程阻塞期间,服 务器不能处理任何命令请求,BGSAVE 命令会派生出一个子进程,然后由子进程负责创建 RDB 文件,服务器进程(父进程)继续处理命令请求,创建 RDB 文件结束之前,客户端发 送的 BGSAVE 和 SAVE 命令会被服务器拒绝

2)通过配置自动生成 可以设置服务器配置的 save 选项,让服务器每隔一段时间自动执行一次 BGSAVE 命 令,可以通过 save 选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会 执行 BGSAVE 命令

例如:

save 900 1

save 300 10

save 60 10000

那么只要满足以下三个条件中的任意一个,BGSAVE 命令就会被执行 服务器在 900 秒之内,对数据库进行了至少 1 次修改 服务器在 300 秒之内,对数据库进行了至少 10 次修改 服务器在 60 秒之内,对数据库进行了至少 10000 次修改

2.2 AOF 方式

AOF 持久化方式在 redis 中默认是关闭的,需要修改配置文件开启该方式。 AOF:把每条命令都写入文件,类似 mysql 的 binlog 日志 AOF 方式:是通过保存 Redis 服务器所执行的写命令来记录数据库状态的文件。 AOF 文件刷新的方式,有三种:

appendfsync always - 每提交一个修改命令都调用 fsync 刷新到 AOF 文件,非常非常 慢,但也非常安全 appendfsync everysec - 每秒钟都调用 fsync 刷新到 AOF 文件,很快,但可能会丢失 一秒以内的数据 appendfsync no - 依靠 OS 进行刷新,redis 不主动刷新 AOF,这样最快,但安全性就 差

默认并推荐每秒刷新,这样在速度和安全上都做到了兼顾

AOF 数据恢复方式

服务器在启动时,通过载入和执行 AOF 文件中保存的命令来还原服务器关闭之前的数 据库状态,具体过程: 载入 AOF 文件

创建模拟客户端

从 AOF 文件中读取一条命令

使用模拟客户端执行命令

循环读取并执行命令,直到全部完成

如果同时启用了 RDB 和 AOF 方式,AOF 优先,启动时只加载 AOF 文件恢复数据

五、 安装 Redis 集群

1 Redis 集群介绍

Redis3.0 版本之后支持 Cluster。集群要求集群节点中必须要支持主备模式,也就说集 中的主节点(Master)至少要有一个从节点(Slave) 每一个蓝色的圈都代表着一个 redis 集群中的主节点。它们任何两个节点之间都是相互 连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其 进行存取和其他操作

1.1 Redis-Cluster 架构图

1.2 Redis-Cluster 选举:容错

Redis 之间通过互相的 ping-pong 判断是否节点可以连接上。如果有一半以上的节点去 ping 一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的从节点。如 果某个节点和所有从节点全部挂掉,我们集群就进入 fail 状态。还有就是如果有一半以上的 主节点宕机,那么我们集群同样进入 fail 了状态。这就是我们的 redis 的投票机制,具体原 理如下图所示:

投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时 (cluster-node-timeout),认为当前 master 节点挂掉.

什么时候整个集群不可用(cluster_state:fail)?

1) 如果集群任意 master 挂掉,且当前 master 没有 slave。此时集群进入 fail 状态,也可 以理解成集群的 slot 映射[0-16383]不完整时进入 fail 状态。

2) 如果集群超过半数以上 master 挂掉,无论是否有 slave,集群进入 fail 状态.

1.3 Redis-Cluster 数据存储

当我们的存取的 key 到达的时候,redis 会根据 crc16 的算法得出一个结果,然后把 结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通 过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存 取操作。

在 Node1 执行 set name kevin

1. 使用 CRC16 算法对 key 进行计算,得到一个数字,然后对数字进行取余。

CRC16 : name = 26384

26384%16384 = 10000

2. 查找到包含 10000 插槽的节点,比如是 node2,自动跳转到 node2

3. 在 node2 上执行 set name kevin 命令完成数据的插入

4. 如果在 node1 上执行 get name,先使用 CRC16 算法对 key 进行计算,在使用 16384 取余,得到插槽的下标,然后跳到拥有该插槽的 node2 中执行 get name 命令, 并返回结果。

2 安装集群

2.1 需求:

搭建一个 Redis 的最小集群,使用伪集群方式。 Redis 中最小的集群三对主从。 在 192.168.70.145 中安装 6 个 redis 实例。 如果使用已经使用过的单机版创建集群时,需要删除 dump.rdb 与 apeendonly.aof 文件。

6 个 redis 实例的端口分配:8001、8002、8003、8004、8005、8006

2.2 集群步骤:

redis 集群时需要使用一个 ruby 的脚本来完成集群。

第一步 安装 ruby 环境 命令: yum install ruby

第二步 安装 ruby 的包管理器 命令:yum install rubygems

第三步 进入到 redis 的安装目录下的 src 目录下找到到 redis-trib.rb 这个文件 这是集群 时需要的脚本

第四步 这个脚本的执行需要依赖于一些其他的 ruby 包 所以我们还要下载一个 redis-3.0.0.gem 将这个文件上传到 linux 服务器中

第五步 安装这个 ruby 包 命令:gem install redis-3.0.0.gem

第六步 先启动 redis 的 6 个实例 先在 local 目录下创建一个目录名称为:redis-cluster 命令:mkdir redis-cluster

第七步 将安装好的 redis 下的 bin 目录拷贝到 redis-cluster 目录下 并起名为 redis01 命令:进入到 redis 目录下执行:cp -r bin ../redis-cluster/redis01

第九步、 修改 redis.conf 配置文件 命令:vim redis.conf (1)修改端口:默认的为 6379 将六个 redis 实例的端口改成从 7001-7006 在配置文件 的 port 属性中。 (2)修改开启集群 在配置文件中搜索 cluster 找到后 将默认为注释的 cluster-enabled yes 去掉注释

第十步 将这个 redis01 拷贝 6 份到当前这个目录下 命令:

cp -r redis01/ redis02

cp -r redis01/ redis03

cp -r redis01/ redis04

cp -r redis01/ redis05

cp -r redis01/ redis06

第十一步 修改拷贝的这些 redis 的端口 命令:

[root@localhost redis-cluster]# vim redis02/redis.conf

[root@localhost redis-cluster]# vim redis03/redis.conf

[root@localhost redis-cluster]# vim redis04/redis.conf

[root@localhost redis-cluster]# vim redis05/redis.conf

[root@localhost redis-cluster]# vim redis06/redis.conf

第十二步 把创建集群的 ruby 脚本复制到 redis-cluster 中 命令:

[root@localhost src]# cp *.rb /usr/local/redis-cluster/

第十二步 创建一个能够批量启动的脚本程序 命令:

vim startall.sh

第十三步 在脚本文件中添加命令

命令:cd redis01
./redis.server redis.conf
cd ..
cd redis02      ./redis.server redis.conf      cd ..        cd redis03   ./redis.server redis.conf     cd ..        cd redis04    ./redis.server redis.conf     cd ..       cd redis05     ./redis.server redis.conf      cd ..       cd redis06      ./redis.server redis.conf      cd .. 

第十四步 将批量启动脚本设置为可执行权限 、

命令:chmod +x startall.sh

第十五步 执行这个批量启动的脚本 命令:[root@localhost redis-cluster]# ./startall.sh

第十六步 查看 redis 是否启动成功 命令:ps aux|grep redis

第十七步 创建集群 命令:./redis-trib.rb create --replicas 1 192.168.70.145:8001 192.168.70.145:8002 192.168.70.145:8003 192.168.70.145:8004 192.168.70.145:8005 192.168.70.145:8006

 控制台会显示如下信息 输入 yes >>> Creating cluster Connecting to node 192.168.10.128:7001: OK
Connecting to node 192.168.10.128:7002: OK
Connecting to node 192.168.10.128:7003: OK
Connecting to node 192.168.10.128:7004: OK
Connecting to node 192.168.10.128:7005: OK
Connecting to node 192.168.10.128:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3  masters:
192.168.10.128:7001
192.168.10.128:7002
192.168.10.128:7003
Adding replica 192.168.10.128:7004 to 192.168.10.128:7001Adding replica 192.168.10.128:7005 to 192.168.10.128:7002Adding replica 192.168.10.128:7006 to 192.168.10.128:7003
M: 8cf30cb6141b5d5db1fce2c8bdabe32666bbb1e7 192.168.10.128:7001    slots:0-5460 (5461 slots) master
M: e8038d0965377ff0793911a10984174b57ddbaaf 192.168.10.128:7002    slots:5461-10922 (5462 slots) masterM: be58583284fd2f26f03f2fce6c4e38de240eb841 192.168.10.128:7003    slots:10923-16383 (5461 slots) master
S: e66b85a7e72913f1ca4657600a0113d2cb0ece8e 192.168.10.128:7004    replicates 8cf30cb6141b5d5db1fce2c8bdabe32666bbb1e7
S: 9f1897cb9c570487685c467b7b4b53f4c0c9f556 192.168.10.128:7005    replicates e8038d0965377ff0793911a10984174b57ddbaafS: 1966b2674ce141da372438a29e9e84bfad266da3 192.168.10.128:7006    replicates be58583284fd2f26f03f2fce6c4e38de240eb841
Can I set the above configuration? (type 'yes' to accept):  

如果控制台输出如下信息表集群成功

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.......

>>> Performing Cluster Check (using node 192.168.10.128:7001)

M: 8cf30cb6141b5d5db1fce2c8bdabe32666bbb1e7 192.168.10.128:7001 slots:0-5460 (5461 slots) master

M: e8038d0965377ff0793911a10984174b57ddbaaf 192.168.10.128:7002 slots:5461-10922 (5462 slots) master M: be58583284fd2f26f03f2fce6c4e38de240eb841 192.168.10.128:7003 slots:10923-16383 (5461 slots) master

M: e66b85a7e72913f1ca4657600a0113d2cb0ece8e 192.168.10.128:7004 slots: (0 slots) master replicates 8cf30cb6141b5d5db1fce2c8bdabe32666bbb1e7

M: 9f1897cb9c570487685c467b7b4b53f4c0c9f556 192.168.10.128:7005 slots: (0 slots) master replicates e8038d0965377ff0793911a10984174b57ddbaaf

M: 1966b2674ce141da372438a29e9e84bfad266da3 192.168.10.128:7006 slots: (0 slots) master replicates be58583284fd2f26f03f2fce6c4e38de240eb841

[OK]

All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK]

All 16384 slots covered.

测试 Redis 集群 测试 Redis 集群:可以连接集群中的任意一个节点进行测试 注意一定要有-c 参数,否 则能连上,但是无法操作 redis 集群 命令:[root@localhost redis-cluster]# ./redis01/redis-cli -h 192.168.10.128 -p 7001 -c

关闭 Redis 集群 命令:bin/redis-cli -p 7001 shutdown

也可以编写一个批量关闭的脚本
命令:vim shutdown.sh    redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown      redis01/redis-cli -p 7004 shutdown      redis01/redis-cli -p 7005 shutdown      redis01/redis-cli -p 7006 shutdown 

linux判断redis是否启动成功_redis的前生后世相关推荐

  1. linux判断redis是否启动成功_087、Redis

    一. Redis 介绍 1 Redis 简介 Remote Dictionary Server(Redis)是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-V ...

  2. linux判断redis是否启动成功_查看linux上面是否有安装redis,redis启动

    1.检测是否有安装redis-cli和redis-server; [root@localhost bin]# whereis redis-cli redis-cli: /usr/bin/redis-c ...

  3. cmd判断redis是否启动成功_软启动是否故障如何判断及不同故障检测维修办法

    万用表测量主回路3个输入端对外壳和相间的电阻值,正常为无穷大,测量每相输入端与输出端之间的电阻值大于100M欧正常,然后上电,显示屏没有故障报警即可. 1.在调试过程中出现起动报缺相故障,软起动器故障 ...

  4. Linux下Redis服务启动与关闭

    Linux下Redis服务启动与关闭 一.启动 二.关闭 三.远程连接Redis服务 四.Connection refused报错 五.其他报错 一.启动 注意:本人redis安装路径是:/usr/l ...

  5. Linux之Redis的启动、使用和停止

    1.检测是否有安装redis-cli和redis-server; [root@localhost bin]# whereis redis-cli redis-cli: /usr/bin/redis-c ...

  6. linux tomcat 启动 无法访问,Linux下 Tomcat 配置启动成功但是无法访问网页的问题【2019-09-25】...

    如同显示 Linux下 tomcat 已经成功启动,但是无法访问 http://ip:8080 网页 提供我解决过程中的四种方法,供大家参考! 逐个排查问题,首先检查端口使用情况  [root@zzc ...

  7. Linux运维人员的前生后世!

    运维工作尤其是linux运维,其实最考验你的能力,因为需要学习的东西实在太多, 你既要懂网络:思科华为设备的配置: 要懂性能调优:包括lamp或者lnmp的性能调优,也包括linux操作系统调优: 要 ...

  8. Linux下安装、启动、关闭 Redis服务详解

    1. Redis简介 Redis全名:Remote Dictionary Service Redis是广泛应用的NoSQL数据库,基于C开发的键值对存储数据库 Redis是一个使用ANSI C编写的开 ...

  9. linux redis退出命令行,linux的redis启动关闭命令

    Linux下redis的启动和关闭通过命令来实现.下面由学习啦小编为大家整理了linux下redis启动关闭命令的相关知识,希望对大家有帮助! linux的redis启动关闭命令 linux的redi ...

最新文章

  1. 对抗神经网络GAN到底学到了什么
  2. 第16届智能小车用AURIX™ 资料汇总
  3. 给SAP系统安装联机帮助(事务码SR13)
  4. mysql 组复制和传统复制_MySQL的GTID复制与传统复制的相互切换
  5. MySQL变量,存储过程,函数,流程控制详解(小白都能懂哦)
  6. svn强制注释 linux,svn强制要求提交注释
  7. Dubbo 高危漏洞!原来都是反序列化惹得祸
  8. 微课|Python编写代理服务器程序(48分钟)
  9. 黑马程序员 java了解和DOS命令
  10. Java实现大数操作
  11. 基于javaweb的前台展示+后台管理结合的在线购书系统(java+springboot+ssm+mysql)
  12. 【有限元分析】有限元仿真分析与解析解的结果对比——以简单悬臂梁的受力分析为例
  13. 华为面试题之洞穴逃生
  14. 禁用Insert按键
  15. 游戏出海越南,版号不容忽视
  16. CF大陆斗C战士(二)
  17. 【转】浅谈人类视觉系统与卷积神经网络(CNN)的联系和区别
  18. Springboot旅游管理系统 08841计算机毕业设计-课程设计-期末作业-毕设程序代做
  19. uva - 123 - Searching Quickly
  20. c++二叉树打印(只为美观)

热门文章

  1. 云图说|初识ModelArts开发者生态社区——AI Gallery
  2. 【Python成长之路】机器学习:10+分类算法汇总学习
  3. 【鲲鹏来了】手把手教你在鲲鹏上使用编程语言——C语言
  4. 和华为云一起做件“伟大的事”,24万奖金等你来!
  5. 【华为云实战开发】8.如何快速搭建C#网站并实现持续集成?
  6. 【华为云实战开发】2.Docker镜像部署怎么玩才酷炫?
  7. psv应用java_PSV内容管理功能详细说明
  8. Android笔记 theme主题
  9. C++ STL容器vector篇(五) vector容器常用初始化操作总结(一维/二维)
  10. MATLAB_平面几何_判断两平面矩形是否干涉