Redis总结(八)如何搭建高可用的Redis集群

Redis高可用群集---搭建(主从、哨兵、Cluster) ①主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。②核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。 阅读详情

以前总结Redis 的一些基本的安装和使用,大家可以这这里查看Redis 系列文章:https://www.cnblogs.com/zhangweizhong/category/771056.html。

今天补一下redis集群功能吧。需要注意,Redis 3.0 以后才有集群的功能,下载Redis的时候注意下版本。 

1. Redis集群原理

先看看redis-cluster架构图:

 

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效。

(3)客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

(4)redis-cluster把所有的物理节点映射到[0-16383]slot(哈希槽)上,cluster 负责维护node<->slot<->value。

Redis 集群中内置了 16384 个slot(哈希槽),当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

 

容错机制: redis-cluster投票

 

 

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

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

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

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

  注意:1. 当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。

     2. redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开改配置,允许集群兼容部分失败。

 

2. 安装Redis

redis 的单机安装之前已经讲过,网络上也有很多教程,这里就不重复了。

文章最后提供了Redis 3.0 的源码,Redis集群脚本等资源。大家可以用我提供的版本来测试。

 

3. 安装ruby环境

redis3.0 源码中自带的集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:

1. 安装ruby环境

yum install ruby

yum install rubygems   

 

2. 安装ruby和redis的接口程序

拷贝redis-3.0.0.gem至/usr/local下

执行:gem install /usr/local/redis-3.0.0.gem

 

4. 创建集群

集群结点规划

一般Redis集群的实例,都安装在各个主从服务器上,这里为了演示方便,只是在同一台服务器用不同的端口表示不同的redis服务器,如下:

主节点:172.16.0.17:7001,172.16.0.17.3:7002,172.16.0.17:7003

从节点:172.16.0.17:7004,172.16.0.17:7005,172.16.0.17:7006

1. 在/usr/local下创建redis-cluster目录,其下创建Redis01到Redis06等6个redis实例,端口号为:7001-7006,具体目录如下:

 

 

2. 将redis源码目录src下的redis-trib.rb拷贝到redis-cluster目录下。

 

3. 修改每个redis实例的redis.conf配置文件:

port 7001  //这里要改成各个实例对应的端口,7001-7006
#bind 172.16.0.17
cluster-enabled yes

 

启动每个结点redis服务

分别进入Redis01、Redis02、...Redis06目录,执行:

./redis-server ./redis.conf

 

查看redis进程:ps aux|grep redis

 

以上,Redis 的6个实例,就已经启动了。

 

执行创建集群命令

执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。

./redis-trib.rb create --replicas 1 172.16.0.17:7001 172.16.0.17:7002 172.16.0.17:7003 172.16.0.17:7004 172.16.0.17:7005  172.16.0.17:7006

说明:

redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

replicas指定为1表示每个主节点有一个从节点

 

注意:

如果执行时报如下错误:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb

 

创建集群输出如下:

>>> Creating cluster

Connecting to node 172.16.0.17:7001: OK

Connecting to node 172.16.0.17:7002: OK

Connecting to node 172.16.0.17:7003: OK

Connecting to node 172.16.0.17:7004: OK

Connecting to node 172.16.0.17:7005: OK

Connecting to node 172.16.0.17:7006: OK

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

172.16.0.17:7001

172.16.0.17:7002

172.16.0.17:7003

Adding replica 172.16.0.17:7004 to 172.16.0.17:7001

Adding replica 172.16.0.17:7005 to 172.16.0.17:7002

Adding replica 172.16.0.17:7006 to 172.16.0.17:7003

M: cad9f7413ec6842c971dbcc2c48b4ca959eb5db4 172.16.0.17:7001

   slots:0-5460 (5461 slots) master

M: 4e7c2b02f0c4f4cfe306d6ad13e0cfee90bf5841 172.16.0.17:7002

   slots:5461-10922 (5462 slots) master

M: 1a8420896c3ff60b70c716e8480de8e50749ee65 172.16.0.17:7003

   slots:10923-16383 (5461 slots) master

S: 69d94b4963fd94f315fba2b9f12fae1278184fe8 172.16.0.17:7004

   replicates cad9f7413ec6842c971dbcc2c48b4ca959eb5db4

S: d2421a820cc23e17a01b597866fd0f750b698ac5 172.16.0.17:7005

   replicates 4e7c2b02f0c4f4cfe306d6ad13e0cfee90bf5841

S: 444e7bedbdfa40714ee55cd3086b8f0d5511fe54 172.16.0.17:7006

   replicates 1a8420896c3ff60b70c716e8480de8e50749ee65

Can I set the above configuration? (type 'yes' to accept): yes

>>> 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 172.16.0.17:7001)

M: cad9f7413ec6842c971dbcc2c48b4ca959eb5db4 172.16.0.17:7001

   slots:0-5460 (5461 slots) master

M: 4e7c2b02f0c4f4cfe306d6ad13e0cfee90bf5841 172.16.0.17:7002

   slots:5461-10922 (5462 slots) master

M: 1a8420896c3ff60b70c716e8480de8e50749ee65 172.16.0.17:7003

   slots:10923-16383 (5461 slots) master

M: 69d94b4963fd94f315fba2b9f12fae1278184fe8 172.16.0.17:7004

   slots: (0 slots) master

   replicates cad9f7413ec6842c971dbcc2c48b4ca959eb5db4

M: d2421a820cc23e17a01b597866fd0f750b698ac5 172.16.0.17:7005

   slots: (0 slots) master

   replicates 4e7c2b02f0c4f4cfe306d6ad13e0cfee90bf5841

M: 444e7bedbdfa40714ee55cd3086b8f0d5511fe54 172.16.0.17:7006

   slots: (0 slots) master

   replicates 1a8420896c3ff60b70c716e8480de8e50749ee65

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

5. 查询集群信息

集群创建成功登陆任意redis结点查询集群中的节点情况。

客户端以集群方式登陆:

./redis-cli -c -h 172.16.0.17 -p 7001 -c //其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号

 

查询集群信息

cluster nodes 查询集群结点信息

 

cluster info 查询集群状态信息

 

 

 

6. 添加主节点

集群创建成功后可以向集群中添加节点,下面是添加一个master主节点

1. 增加Redis07实例,参考集群结点规划章节添加一个“7007”目录作为新节点。

 

2. 将Redis07实例添加到集群中,执行下边命令:

./redis-trib.rb add-node  172.16.0.17:7007 172.16.0.17:7001

 

3. 查看集群结点发现7007已添加到集群中:

[root@VM_0_17_centos redis-cluster]# ./redis-trib.rb add-node  172.16.0.17:7007 172.16.0.17:7001
>>> Adding node 172.16.0.17:7007 to cluster 172.16.0.17:7001
Connecting to node 172.16.0.17:7001: OK
.
.
.
Connecting to node
172.16.0.17:7003: OK Connecting to node 172.16.0.17:7005: OK Connecting to node 172.16.0.17:7002: OK Connecting to node 172.16.0.17:7006: OK Connecting to node 172.16.0.17:7004: OK >>> Performing Cluster Check (using node 172.16.0.17:7001) M: 977962f18ec51f363747961137dc903f0078b248 172.16.0.17:7001 slots:0-5460 (5461 slots) master 1 additional replica(s) M: defe4ce0421ee6b50bdab3da58754e98cc80fca3 172.16.0.17:7003 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: a64fc273c0b90700397f5bac2b393dc5587d8ba8 172.16.0.17:7005 slots: (0 slots) slave replicates f277758189eba36c5b5732e9189d8554bf4385cb M: f277758189eba36c5b5732e9189d8554bf4385cb 172.16.0.17:7002 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 4f16e5adcc141ca284d4a9ec6d04f455aee84a48 172.16.0.17:7006 slots: (0 slots) slave replicates defe4ce0421ee6b50bdab3da58754e98cc80fca3 S: 479d5a077893184cd0b05a8e1b6cb5c0625215f4 172.16.0.17:7004 slots: (0 slots) slave replicates 977962f18ec51f363747961137dc903f0078b248 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. Connecting to node 172.16.0.17:7007: OK
.
.
.
>>> Send CLUSTER MEET to node 172.16.0.17:7007 to make it join the cluster. [OK] New node added correctly.

 

哈希槽重新分配

添加完主节点后,集群并不会自动给新添加的节点分配哈希槽,需要我们手动对主节点进行hash槽分配重新分配,这样该主节才可以存储数据。

redis集群有16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占用情况。可以看到刚才添加的主节点Redis07,没有分配哈希槽(slot)。

 

 

 下面就来说说如何给刚添加的Redis01结点分配槽:

第一步:连接上集群

./redis-trib.rb reshard 172.16.0.17:7001   //(连接集群中任意一个可用结点都行)

 

第二步:输入要分配的槽数量

 

 

第三步:输入接收槽的结点id

这里准备给Redis07分配哈希槽,通过cluster nodes查看Redis07节点id为:e8461f9743e186ae8f67ed301d2d971186b1cc93

输入:e8461f9743e186ae8f67ed301d2d971186b1cc93,

 

第四步:输入源结点id

 

如果只是想从单个主节点获取哈希槽,那直接输入相应的节点id即可。

如果想从所有的主节点获取输入:all,

 

第五步:输入yes开始移动槽到目标结点id

 

 

第六步:分配完成之后,可以查询集群节点信息,查看哈希槽是否分配成功。

 

 

 

7. 添加从节点

集群创建成功后可以向集群中添加节点,下面是添加一个slave从节点的命令。

./redis-trib.rb add-node --slave --master-id 主节点id 添加节点的ip和端口 集群中已存在节点ip和端口

 

1. 添加Redis08实例为从结点,将Redis08作为Redis07的从结点。

执行如下命令:

./redis-trib.rb add-node --slave --master-id e8461f9743e186ae8f67ed301d2d971186b1cc93  172.16.0.17:7008 172.16.0.17:7001

e8461f9743e186ae8f67ed301d2d971186b1cc93  是Redis07实例的节点id,可通过cluster nodes查看。

 

注意:如果原来该结点在集群中的配置信息已经生成集群节点的配置文件(如果集群配置cluster-config-file默认指定则为nodes.conf),这时可能会报错:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是:删除生成的配置文件nodes.conf,删除后再执行./redis-trib.rb add-node指令

 

2. 查看集群中的结点,刚添加的Redis08已经成为Redis07的从节点:

 

 

8. 删除结点:

集群创建成功后可以向集群中删除其中的一个节点,应该怎么删除呢?

执行如下命令即可:

./redis-trib.rb del-node 172.16.0.17 :7005 e8461f9743e186ae8f67ed301d2d971186b1cc93

注意:删除已经分配了有hash槽的节点会失败,报错如下:

[ERR] Node 172.16.0.17:7007 is not empty! Reshard data away and try again.

解决办法就是:将该结点占用的hash槽分配出去,请参考前面哈希槽重新分配的操作,这里就不重复了。

 

最后

以上就已经将如何搭建redis的集群讲完了。

redis3.0源码和ruby脚本,点击这里下载。

 

乌班图22.04编译安装最新Redis8.0教程 除字符串(String)外,提供哈希(Hash)、列表(List)、集合(Set)、有序集合(ZSet)等结构,适应复杂业务需求[2][6]。采用单线程避免多线程竞态问题,通过 I/O 多路复用保持高性能,仅 CPU 密集型操作在 6.0 版本后引入多线程优化[4][11]。所有数据操作在内存中完成,支持每秒超过十万次读写,尤其适合高并发场景[4][7]。支持将内存数据保存到磁盘,重启后可恢复,平衡了速度与可靠性[3][7]。缓存加速:降低数据库压力,提升 API 响应速度[6][7]。 阅读详情

相关推荐

Redis搭建集群模式

Redis 搭建集群的优缺点优点:支持数据的水平扩展,可以处理大规模数据提供高可用性,节点失效时能够自动进行故障转移高并发性能缺点:配置和管理复杂度较高不支持多键操作,某些命令在集群模式下受到限制需要更多的资源和节点来维持高可用性和性能。

小李同学的博客 1万+

Redis高可用集群

目录 1、 前言 2、初识TwemProxy 2.1 什么是TwemProxy 2.2 安装TwemProxy 2.3 配置TwemProxy 2.4 测试TwemProxy 3、初识Keepalived 3.1 什么Keepalived 3.2 安装keepalive 3.3 配置keepalive启动测试 3.4 启动测试 4 、高可用多哨兵集群 4.1 哨兵监控脚本配置 4.2 哨兵集群启动 1、 前言 本章节我们使用:Sentinel+Twemproxy+..

长沙老码农 879

Redis 高可用集群搭建与优化实践

Redis 作为一款高性能的键值存储系统,广泛应用于缓存、消息队列和会话管理等场景。随着业务规模的扩大,单机 Redis 的性能和可用性逐渐无法满足需求。Redis 集群通过槽位机制和 Gossip 协议,实现了高性能、高可用的分布式存储架构。相比哨兵模式,集群模式在扩展性和并发能力上具有显著优势。

2401_83358720的博客 1402

redis集群(总体第四篇)

上一篇中已经学习到了redis持久化,主从复制等一系列内容,接下来学习redis集群,不出意外的话,应该是redis的最后一篇文章。 一、集群 1、redis集群概念 (1)单看概念 Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。 Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。 (2)为什

热爱编写程序的药学在读书 1415

redis6高可用集群搭建

最近发现redis的内存空间不够实用了,发现是服务器太旧了导致乱七八糟的都占了不少存储和内存。而且服务器的性能也比较差。但是服务器还是蛮多的(5台左右),如果说换新的又可惜。所以找了一种redis集群的搭建方式来部署redis高可用集群环境。以下就是搭建的过程。给自己做一个总结和笔记。 准备环境 1.redis-6.0.5 2.三台服务器 10.172.246.231、10.172.246.232、10.172.246.233 (231、232、233) 一、下载redis到服务器 可以自行去官网下载r.

zhouyf 3824

redis一主多从高可用集群搭建

Redis 一主两从高可用环境搭建 Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据。特殊的,一个从机同样可以设置为一个 Redis Server 的主机,这样一来 Master-Slave 的分布看起来就是一个有向无环图 DAG,如此形成 Redis Server 集群,无论是主机...

Crayon 5251

基于Docker搭建redis集群

文章目录前言Redis集群原理准备工作Redis基础镜像创建创建Redis节点镜像配置集群集群操作说明启动镜像节点配置配置槽点主从高可用高可用测试读写测试 前言 最新在学习Docker,不由自主的深深爱上了它,同时在整理SpringBoot相关资料的时候,整理到redis这块儿,就想搭建个redis的集群,做做相关的测试,写写记录;然后就把Docker给拽进来搭建一个用于测试使用的redis集群,...

一行Java的博客 5万+

Redis高可用三主三从集群部署(三种方式部署/18个节点的Redis Cluster模式)

🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、优快云博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文专业写手、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、🚀徒步爬过衡山、🔥有过三个月减肥20斤的经历、是个喜欢躺平的狠人。

我是Java程序员廖志伟,感谢朋友们的支持! 4662

03-Redis缓存高可用集群

Redis缓存高可用集群

野心与梦 1万+

ESP32+MAX7219二进制时钟设计与嵌入式时间映射实践

二进制时钟是嵌入式系统中数据表示与物理呈现深度耦合的典型范例,其核心在于将时间语义(年月日时分秒)解构为比特位,并通过LED点阵的空间权重布局实现直观识别。该设计依托RTC模块提供时间基准,依赖SPI协议完成微控制器与专用驱动芯片(如MAX7219)的可靠通信,涉及寄存器级配置、位图坐标变换、软硬件时序对齐等关键原理。技术价值体现在低资源占用下的高可读性人机交互,适用于教学演示、极客项目及嵌入式UI原型开发。本文聚焦ESP32平台在MicroPython环境下,结合MAX7219驱动8×8点阵实现高可靠性二

weixin_42160645的博客 301

FDTD材料nk值拟合优化指南:利用材料资源管理器提升光学模型精度

本文详细介绍了如何利用FDTD仿真软件中的材料资源管理器,对材料nk值进行精确拟合与优化,从而提升光学模型的仿真精度。文章通过实战案例,解析了拟合参数调整、报告解读以及针对varFDTD求解器的特殊注意事项,帮助用户从根本上解决仿真结果不准的常见问题。

weixin_29196891的博客 352

Redis Cluster 高可用集群(Docker 实现)

本文使用Docker部署实现于同一台服务器,Redis 版本 5.0.3 单机存在的问题 机器故障:导致Redis失效 容量瓶颈:容量不能水平扩展 OPS( operation per second 每秒处理指令数):一台及其的网络带宽是有限的,如果有多台机器,可以有效解决QOS Redis Cluster Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施install...

矢落叶の博客 1万+

Stata极简生存分析

1. 导入数据 webuse drugtr,clear *webuse -- Use dataset from Stata website stset,clear *上一行命令导入进来的数据是“生存时间数据”,会比最原始的数据多四列,这一行命令的目的是重置为原始数据,之所以这样做,是为了显示数据处理的全部过程 codebook drug codebook studytime codebook died codebook age *codebook -- Describe data contents 2.

TOP生物信息 2336

Redis集群搭建

Redis集群实现

安逸llllll的博客 5276

滑模控制实战:用Python从零实现SMC算法(附完整代码)

本文通过Python实战,从零详解滑模控制(SMC)算法的核心原理与代码实现。文章聚焦于一阶系统,使用NumPy和Matplotlib逐步构建控制器,并针对SMC固有的抖振问题,详细讲解了边界层法的原理与实现,提供了完整的代码和参数调优指南,帮助读者直观理解并掌握这一鲁棒性极强的非线性控制方法。

weixin_29285605的博客 465

几款开源的自动驾驶仿真平台项目

它被开发为一个虚幻的插件,可以简单地放到任何你想要的虚幻环境中。第一类是基于合成的数据,对环境、感知及车辆进行模拟,这里的感知大多数是图像层面的感知,这类模拟器主要用于感知、规划算法的初步开发上,Carla、AirSim、Udacity self-driving car simulator就属于这类;第二类是基于真实数据的回放,这里的真实数据包括图像、lidar、radar等各种传感器的数据,这类模拟器主要用于测试无人驾驶中信息融合算法以及车辆不同部件的性能,Apollo和Autoware就属于这类。

南七小僧的学海无涯 2849

【Linux】搭建 Redis 集群 实现高可用

本文详细介绍了在Linux环境下搭建Redis集群的全过程,从环境准备、配置文件生成到集群创建与验证。主要内容包括: Redis集群的必要性:解决单点故障、容量瓶颈等问题 环境准备:系统要求、Redis安装步骤 集群配置:创建6节点(3主3从)目录结构,提供配置模板和批量生成脚本 集群启动:实例启动和集群创建命令 集群验证:状态检查和节点信息查看 分片原理:通过CRC16算法实现数据分布 Java客户端连接:推荐使用Lettuce客户端 该方案实现了Redis的高可用性,支持自动故障转移和数据分片,适合生产

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

符合DO-178C和DO-331的机载软件研制体系

DO-178C的核心要求软件开发生命周期:DO-178C定义了软件开发的生命周期过程,包括需求获取、设计、实现、验证和确认等。它为机载软件开发提供了一套系统化的指导,确保在开发过程中考虑安全性和可靠性。安全等级(DAL):根据系统的重要性,DO-178C将软件划分为不同的开发保障等级(DAL A到E),DAL A的要求最为严格,适用于关键安全功能,而DAL E的要求较低,适用于非关键功能。DO-178C在非基于模型软件开发中的应用。

qq_41854911的博客 978

redis高可用集群搭建

redis高可用集群搭建

weixin_43860634的博客 1556

手把手教你玩转RISC-V指令集​​​专栏--​​1.2 对比x86/ARM:RISC-V的三大核心优势(开放、灵活、可扩展)​

​:RISC-V以“开放打破垄断、灵活适配场景、扩展定义未来”的三大优势,正在重塑计算架构格局。其核心价值不仅是技术革新,更是对全球半导体产业链话语权的重新分配。

amy_mhd的博客 130

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Redis 5 之后版本的高可用集群搭建

redis 5.0之后版本的高可用集群搭建。 集群方案比较: redis3.0版本的集群模式 哨兵模式: 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式...

挂机的阿洋zzZ 2378

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

redis-4 搭建redis集群

搭建redis集群,新增主从节点,删除主从节点

weixin_67865831的博客 2515

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: ASP.NET Core系列(三):启动类Startup
下一篇: Redis总结(九)Linux环境如何安装redis
afront
博客等级 码龄20年 29粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值