From a420df6840ebc966f89bfd57b16bc7f87ec72e84 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Wed, 21 Aug 2019 13:18:42 +0800 Subject: [PATCH] update docs --- README.md | 6 +- assets/eddx/redis.eddx | Bin 40233 -> 82593 bytes docs/README.md | 9 +- docs/nosql/redis/README.md | 2 +- docs/nosql/redis/redis-cluster.md | 265 ++++++++++++++++++ ...edis数据类型.md => redis-data-type.md} | 14 +- docs/nosql/redis/redis-ops.md | 96 ++++++- docs/nosql/redis/redis-quickstart.md | 173 ------------ .../{Redis复制.md => redis-replication.md} | 0 .../{Redis哨兵.md => redis-sentinel.md} | 0 docs/nosql/redis/redis.md | 13 +- scripts/gitpush.sh | 2 +- 12 files changed, 365 insertions(+), 215 deletions(-) create mode 100644 docs/nosql/redis/redis-cluster.md rename docs/nosql/redis/{Redis数据类型.md => redis-data-type.md} (98%) delete mode 100644 docs/nosql/redis/redis-quickstart.md rename docs/nosql/redis/{Redis复制.md => redis-replication.md} (100%) rename docs/nosql/redis/{Redis哨兵.md => redis-sentinel.md} (100%) diff --git a/README.md b/README.md index f74726b..26ed706 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,11 @@ - [Mysql 维护](docs/sql/mysql/mysql-ops.md) - [Mysql 原理](docs/sql/mysql/mysql-theory.md) - :four: [Redis](docs/nosql/redis/README.md) - - [Redis 快速入门](docs/nosql/redis/redis-quickstart.md) + - [Redis 快速入门](docs/nosql/redis/redis.md) + - [Redis 数据类型](docs/nosql/redis/redis-data-type.md) + - [Redis 复制](docs/nosql/redis/redis-replication.md) + - [Redis 哨兵](docs/nosql/redis/redis-sentinel.md) + - [Redis 集群](docs/nosql/redis/redis-cluster.md) ## :door: 传送门 diff --git a/assets/eddx/redis.eddx b/assets/eddx/redis.eddx index 3b47f34e17013410f0313a399a9cb2c494e1c05a..684540c6e2a2c5dc62bbbbc0b5b6ea8999d38ce4 100644 GIT binary patch delta 75482 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 ?| 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 delta 33315 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≺G805}GQg>q~?Q}3%=)41+<+|vcwoG);~+0=WQ5DR0+ z_bXYH8LWXSIP-|cD@_f_!#uOUjz^5LkA3wyRw5#lDv-~_v?Yq~v?=S*k$ExwRA)5! zM&$t{oBx_E%?fK3KaJ>ow zw0S(_;s-^Xo*ZNco3-;&D2T9#h@>luun=TMJIDXhXH>uZlJsSAs$%2qSy~Q5;k|i3 z$<9zH>veFfSA#v$tITkY_RNpY@w&Dr5kO!aSQMB0x~C7RKQJa(?@>WqqYBXB6832} zI+=^J@q3ba%`4U1h2~c>O%;ieHz~jg6b7=X&QUOSjvOdp=UQ=ybjkUiK#?t?oJyNH zfNlV{U-o3U#+DDgxMVGV+)S6hj0GFf;BiKeNmjAU;UQaq+PWTq2H8#QC3x$1{FW~k zsa#NHx4yeAs}YM{oKwkP4DeW$?BG*Tb8AZ$vPj5Qh(s$0Ys)LEp$L9XnutV;RFo9A z%$RNQ{Oh5vtV{#NBV$Isc2I39DAEbS z;oG}+3+f1yg)&p9F~T5DC^LbKngB!O%l9u&m9gPh{>uFMi^_Ka6aXYvna2HR4Op9` zeLkfi0`=P>bqJ!x#)@FcekU!7i7!xbyOJ&3kJR=zP6Shu!7)s`mKF;q*l@Y znHb*+oh11qA&qgBTLn-ckndO|R+033+h_3A=wov}^pd64ZYEPSsS}SV&|6Xmr_LYES(w6_k2$i>u znJ!`9E@=TAagb86_o-gBfbdZu=6ID65)sW7L3q%v8Tprj

md5b+Jyy-L$?_o-4+ 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 **[Redis 集群(Redis Cluster)](https://redis.io/topics/cluster-tutorial) 是 Redis 提供的分布式数据库方案**。 +> +> 既然是分布式,自然具备分布式系统的基本特性:可扩展、高可用、一致性。 +> +> - Redis 集群通过划分 hash 槽来分片,进行数据分享。 +> - Redis 集群采用主从模型,提供复制和故障转移功能,来保证 Redis 集群的高可用。 +> - 根据 CAP 理论,Consistency、Availability、Partition tolerance 三者不可兼得,而 Redis 集群的选择是 AP。Redis 集群节点间采用异步通信方式,不保证强一致性,尽力达到最终一致性。 + + + +- [节点](#节点) +- [Hash 槽](#hash-槽) +- [集群工作模式](#集群工作模式) + - [分片](#分片) + - [判断槽是否有当前节点负责处理](#判断槽是否有当前节点负责处理) + - [MOVED 错误](#moved-错误) + - [节点数据库](#节点数据库) +- [重新分片](#重新分片) + - [重新分片的实现原理](#重新分片的实现原理) +- [ASK](#ask) + - [ASK 错误](#ask-错误) + - [判断 ASK 错误的过程](#判断-ask-错误的过程) +- [复制与故障转移](#复制与故障转移) + - [复制](#复制) + - [故障检测](#故障检测) + - [故障转移](#故障转移) + - [选举新的主节点](#选举新的主节点) +- [消息](#消息) +- [**Redis 集群参数配置**](#redis-集群参数配置) +- [重点](#重点) +- [参考资料](#参考资料) + + + +## Redis 集群方案 + +### 客户端分区方案 + +**客户端** 就已经决定数据会被 **存储** 到哪个 `redis` 节点或者从哪个 `redis` 节点 **读取数据**。其主要思想是采用 **哈希算法** 将 `Redis` 数据的 `key` 进行散列,通过 `hash` 函数,特定的 `key`会 **映射** 到特定的 `Redis` 节点上。 + +![img](https://user-gold-cdn.xitu.io/2018/9/4/165a4f9e74a09b36?imageView2/0/w/1280/h/960/format/webp/ignore-error/1) + +**客户端分区方案** 的代表为 `Redis Sharding`,`Redis Sharding` 是 `Redis Cluster` 出来之前,业界普遍使用的 `Redis` **多实例集群** 方法。`Java` 的 `Redis` 客户端驱动库 `Jedis`,支持 `Redis Sharding` 功能,即 `ShardedJedis` 以及 **结合缓存池** 的 `ShardedJedisPool`。 + +- **优点** + +不使用 **第三方中间件**,**分区逻辑** 可控,**配置** 简单,节点之间无关联,容易 **线性扩展**,灵活性强。 + +- **缺点** + +**客户端** 无法 **动态增删** 服务节点,客户端需要自行维护 **分发逻辑**,客户端之间 **无连接共享**,会造成 **连接浪费**。 + +### 代理分区方案 + +**客户端** 发送请求到一个 **代理组件**,**代理** 解析 **客户端** 的数据,并将请求转发至正确的节点,最后将结果回复给客户端。 + +- **优点**:简化 **客户端** 的分布式逻辑,**客户端** 透明接入,切换成本低,代理的 **转发** 和 **存储** 分离。 +- **缺点**:多了一层 **代理层**,加重了 **架构部署复杂度** 和 **性能损耗**。 + +![img](https://user-gold-cdn.xitu.io/2018/9/4/165a4f9e6f8b3a44?imageView2/0/w/1280/h/960/format/webp/ignore-error/1) + +**代理分区** 主流实现的有方案有 `Twemproxy` 和 `Codis`。 + +#### Twemproxy + +`Twemproxy` 也叫 `nutcraker`,是 `twitter` 开源的一个 `redis` 和 `memcache` 的 **中间代理服务器** 程序。`Twemproxy` 作为 **代理**,可接受来自多个程序的访问,按照 **路由规则**,转发给后台的各个 `Redis` 服务器,再原路返回。`Twemproxy` 存在 **单点故障** 问题,需要结合 `Lvs` 和 `Keepalived` 做 **高可用方案**。 + +![img](https://user-gold-cdn.xitu.io/2018/9/4/165a4f9e751d0773?imageView2/0/w/1280/h/960/format/webp/ignore-error/1) + +- **优点**:应用范围广,稳定性较高,中间代理层 **高可用**。 +- **缺点**:无法平滑地 **水平扩容/缩容**,无 **可视化管理界面**,运维不友好,出现故障,不能 **自动转移**。 + +#### Codis + +`Codis` 是一个 **分布式** `Redis` 解决方案,对于上层应用来说,连接 `Codis-Proxy` 和直接连接 **原生的** `Redis-Server` 没有的区别。`Codis` 底层会 **处理请求的转发**,不停机的进行 **数据迁移** 等工作。`Codis` 采用了无状态的 **代理层**,对于 **客户端** 来说,一切都是透明的。 + +![img](https://user-gold-cdn.xitu.io/2018/9/4/165a4f9e7509b300?imageView2/0/w/1280/h/960/format/webp/ignore-error/1) + +- **优点** + +实现了上层 `Proxy` 和底层 `Redis` 的 **高可用**,**数据分片** 和 **自动平衡**,提供 **命令行接口** 和 `RESTful API`,提供 **监控** 和 **管理** 界面,可以动态 **添加** 和 **删除** `Redis` 节点。 + +- **缺点** + +**部署架构** 和 **配置** 复杂,不支持 **跨机房** 和 **多租户**,不支持 **鉴权管理**。 + +### 查询路由方案 + +**客户端随机地** 请求任意一个 `Redis` 实例,然后由 `Redis` 将请求 **转发** 给 **正确** 的 `Redis` 节点。`Redis Cluster` 实现了一种 **混合形式** 的 **查询路由**,但并不是 **直接** 将请求从一个 `Redis` 节点 **转发** 到另一个 `Redis` 节点,而是在 **客户端** 的帮助下直接 **重定向**( `redirected`)到正确的 `Redis` 节点。 + +![img](https://user-gold-cdn.xitu.io/2018/9/4/165a4f9e84b4b379?imageView2/0/w/1280/h/960/format/webp/ignore-error/1) + +- **优点** + +**无中心节点**,数据按照 **槽** 存储分布在多个 `Redis` 实例上,可以平滑的进行节点 **扩容/缩容**,支持 **高可用** 和 **自动故障转移**,运维成本低。 + +- **缺点** + +严重依赖 `Redis-trib` 工具,缺乏 **监控管理**,需要依赖 `Smart Client` (**维护连接**,**缓存路由表**,`MultiOp` 和 `Pipeline` 支持)。`Failover` 节点的 **检测过慢**,不如 **中心节点** `ZooKeeper` 及时。`Gossip` 消息具有一定开销。无法根据统计区分 **冷热数据**。 + +## Redis 集群的限制 + +`Redis` 集群相对 **单机** 在功能上存在一些限制,需要 **开发人员** 提前了解,在使用时做好规避。 + +- `key` **批量操作** 支持有限。 + +类似 `mset`、`mget` 操作,目前只支持对具有相同 `slot` 值的 `key` 执行 **批量操作**。对于 **映射为不同** `slot` 值的 `key` 由于执行 `mget`、`mget` 等操作可能存在于多个节点上,因此不被支持。 + +- `key` **事务操作** 支持有限。 + +只支持 **多** `key` 在 **同一节点上** 的 **事务操作**,当多个 `key` 分布在 **不同** 的节点上时 **无法** 使用事务功能。 + +- `key` 作为 **数据分区** 的最小粒度 + +不能将一个 **大的键值** 对象如 `hash`、`list` 等映射到 **不同的节点**。 + +- 不支持 **多数据库空间** + +**单机** 下的 `Redis` 可以支持 `16` 个数据库(`db0 ~ db15`),**集群模式** 下只能使用 **一个** 数据库空间,即 `db0`。 + +- **复制结构** 只支持一层 + +**从节点** 只能复制 **主节点**,不支持 **嵌套树状复制** 结构。 + +## 数据分区 + +### 分区策略 + +分布式存储需要解决的首要问题是把 **整个数据集** 按照 **分区规则** 映射到 **多个节点** 的问题,即把 **数据集** 划分到 **多个节点** 上,每个节点负责 **整体数据** 的一个 **子集**。 + +**Redis 集群通过划分 hash 槽来将数据分区**。 + +**整个 redis 集群有 16384 个哈希槽,决定一个 key 应该分配到那个槽的算法是:计算该 key 的 CRC16 结果再模 16834**。 + +集群中的每个节点负责一部分哈希槽,比如集群中有3个节点,则: + +- 节点A存储的哈希槽范围是:0 – 5500 +- 节点B存储的哈希槽范围是:5501 – 11000 +- 节点C存储的哈希槽范围是:11001 – 16384 + +> 注意 +> +> - **如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态**。 +> - 通过向节点发送 [`CLUSTER ADDSLOTS`](https://redis.io/commands/cluster-addslots) 命令,可以将一个或多个槽指派给节点负责。 + +### 集群节点 + +**集群节点保存键值对以及过期时间的方式与单机 Redis 服务完全相同**。 + +Redis 集群节点分为主节点(master)和从节点(slave),其中主节点用于处理槽,而从节点则用于复制某个主节点,并在被复制的主节点下线时,代替下线主节点继续处理命令请求。 + +#### 节点间通信 + +集群中的节点通过发送和接收消息来进行通信。 + +Redis 集群节点发送的消息主要有以下五种: + +- `MEET` - 请求接收方加入发送方所在的集群。 +- `PING` - 集群中每个节点每隔一段时间(默认为一秒)从已知节点列表中随机选出五个节点,然后对这五个节点中最久没联系的节点发送 PING 消息,以此检测被选中的节点是否在线。 +- `PONG` - 当接收方收到发送方发来的 MEET 消息或 PING 消息时,会返回一条 PONG 消息作为应答。 +- `FAIL` - 当一个主节点 A 判断另一个主节点 B 已经进入 FAIL 状态时,节点 A 会向集群广播一条关于节点 B 的 FAIL 消息,所有收到这条消息的节点都会立即将节点 B 标记为已下线。 +- `PUBLISH` - 当节点收到一个 PUBLISH 命令时,节点会执行这个命令,并向集群广播一条 PUBLISH 消息,所有接受到这条消息的节点都会执行相同的 PUBLISH 命令。 + +### 判断槽是否由当前节点负责处理 + +当节点计算出 key 所属的槽为 i 之后,节点会根据以下条件判断槽是否由自己负责: + +``` +clusterState.slots[i] == clusterState.myself +``` + +### MOVED 错误 + +当节点发现键所在的槽并非自己负责处理的时候,节点就会向客户端返回一个 MOVED 错误,指引客户端转向正在负责槽的节点。 + +MOVED 错误的格式为: + +``` +MOVED : +``` + +> 个人理解:MOVED 这种操作有点类似 HTTP 协议中的重定向。 + +## 集群高可用 + +### 重新分片 + +Redis 集群的重新分片操作可以将任意数量的已经指派给某个节点(源节点)的槽改为指派给另一个节点(目标节点),并且相关槽所属的键值对也会从源节点被移动到目标节点。 + +重新分片操作可以在线进行,在重新分片的过程中,集群不需要下线,并且源节点和目标节点都可以继续处理命令请求。 + +Redis 集群的重新分片操作由 Redis 集群管理软件 redis-trib 负责执行的,redis-trib 通过向源节点和目标节点发送命令来进行重新分片操作。 + +重新分片的实现原理如下图所示: + +

+ +
+ +### ASK 错误 + +ASK 错误与 MOVED 的区别在于:**ASK 错误只是两个节点在迁移槽的过程中使用的一种临时措施**,在客户端收到关于槽 i 的 ASK 错误之后,客户端只会在接下来的一次命令请求中将关于槽 i 的命令请求发送至 ASK 错误所指示的节点,但这种转向不会对客户端今后发送关于槽 i 的命令请求产生任何影响,客户端任然会将关于槽 i 的命令请求发送至目前负责处理槽 i 的节点,除非 ASK 错误再次出现。 + +判断 ASK 错误的过程如下图所示: + +
+ +
+ +### 复制 + +Redis 复制机制可以参考:[Redis 复制](redis-replication.md) + +### 故障检测 + +集群中每个节点都会定期向集群中的其他节点发送 PING 消息,以此来检测对方是否在线。 + +节点的状态信息可以分为: + +- 在线状态; + +- 下线状态(FAIL); + +- 疑似下线状态(PFAIL),即在规定的时间内,没有应答 PING 消息; + +### 故障转移 + +1. 下线主节点的所有从节点中,会有一个从节点被选中。 +2. 被选中的从节点会执行 SLAVEOF no one 命令,成为新的主节点。 +3. 新的主节点会撤销所有对已下线主节点的槽指派,并将这些槽全部指派给自己。 +4. 新的主节点向集群广播一条 PONG 消息,告知其他节点这个从节点已变成主节点。 + +### 选举新的主节点 + +Redis 集群选举新的主节点流程基于[共识算法:Raft](https://www.jianshu.com/p/8e4bbe7e276c) + +## Redis 集群配置 + +我们后面会部署一个 Redis 集群作为例子,在那之前,先介绍一下集群在 redis.conf 中的参数。 + +- **cluster-enabled** `` - 如果配置”yes”则开启集群功能,此 redis 实例作为集群的一个节点,否则,它是一个普通的单一的 redis 实例。 +- **cluster-config-file** `` - 注意:虽然此配置的名字叫“集群配置文件”,但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。 +- **cluster-node-timeout** `` - 这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。 +- **cluster-slave-validity-factor** `` - 如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则 cluster-node-timeout 乘以 cluster-slave-validity-factor 得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设 cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过 50 秒,此从节点不能成为主节点。注意,如果此参数配置为非 0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。 +- **cluster-migration-barrier** `` - 主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。 +- **cluster-require-full-coverage** - 在部分 key 所在的节点不可用时,如果此参数设置为”yes”(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的 key 提供读操作。 + +## 重点 + +- 节点通过握手(MEET)来将其他节点添加到自己所处的集群中。 +- Redis 集群中有 16384 个槽可以指派给集群中的节点。每个节点都会记录哪些槽指派给了自己,哪些槽被指派给了其他节点。如果 16384 个槽中哪怕有一个槽为指派,则 Redis 集群的状态为下线状态。 +- 节点在接到一个命令请求时,会先检测这个命令请求要处理的键所在的槽是否由自己负责,如果不是的话,节点将向客户端返回一个 MOVED 错误,MOVED 错误携带的信息可以指引客户端将请求重定向至正在负责相关槽的节点。 +- Redis 集群的重新分片工作由 redis-trib 负责。重新分片的关键是将属于某个槽的所有键值对从一个节点转移至另一个节点。 +- 如果节点 A 正在迁移槽 i 至节点 B,那么当节点 A 没能在自己的数据库中找到命令指定的数据库键时,节点 A 会向客户端返回一个 ASK 错误,指引客户端到节点 B 接续查找指定的数据库键。 +- MOVED 错误表示槽的负责权从一个节点转移到了另一个节点;而 ASK 错误只是两个节点在迁移槽的过程中使用的一种临时措施。 +- 集群中的从节点用于复制主节点,并在主节点下线时,代替主节点继续处理命令请求。 +- 集群中的节点通过发送和接收消息来进行通信,常见的消息包括 MEET、PING、PONG、PUBLISH、FAIL 五种。 + +## 参考资料 + +- 《Redis 设计与实现》 +- [Redis 集群教程](http://ifeve.com/redis-cluster-tutorial/) +- [深入剖析 Redis 系列(三) - Redis 集群模式搭建与原理详解](https://juejin.im/post/5b8fc5536fb9a05d2d01fb11) diff --git a/docs/nosql/redis/Redis数据类型.md b/docs/nosql/redis/redis-data-type.md similarity index 98% rename from docs/nosql/redis/Redis数据类型.md rename to docs/nosql/redis/redis-data-type.md index f591267..21f5820 100644 --- a/docs/nosql/redis/Redis数据类型.md +++ b/docs/nosql/redis/redis-data-type.md @@ -1,13 +1,3 @@ ---- -title: Redis 数据类型 -date: 2018-06-09 -categories: -- database -tags: -- database -- nosql ---- - # Redis 数据类型 @@ -241,3 +231,7 @@ OK 3) "mongodb" 4) "2" ``` + +## 参考资料 + +《Redis 设计与实现》 \ No newline at end of file diff --git a/docs/nosql/redis/redis-ops.md b/docs/nosql/redis/redis-ops.md index 77dcb8b..ccdd80d 100644 --- a/docs/nosql/redis/redis-ops.md +++ b/docs/nosql/redis/redis-ops.md @@ -3,39 +3,86 @@ - [安装](#安装) -- [启动](#启动) + - [Window 下安装](#window-下安装) + - [Linux 下安装](#linux-下安装) + - [Ubuntu 下安装](#ubuntu-下安装) + - [启动 Redis](#启动-redis) + - [查看 redis 是否启动?](#查看-redis-是否启动) - [脚本](#脚本) ## 安装 -安装步骤如下: +### Window 下安装 -(1)下载并解压到本地 +**下载地址:**。 -进入官网下载地址:https://redis.io/download ,选择合适的版本下载。 +Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 **Redis-x64-xxx.zip**压缩包到 C 盘,解压后,将文件夹重新命名为 **redis**。 -我选择的是最新稳定版本 4.0.8:http://download.redis.io/releases/redis-4.0.8.tar.gz +打开一个 **cmd** 窗口 使用 cd 命令切换目录到 **C:\redis** 运行 **redis-server.exe redis.windows.conf** 。 -我个人喜欢存放在:`/opt/redis` +如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面: + +这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。 + +切换到 redis 目录下运行 **redis-cli.exe -h 127.0.0.1 -p 6379** 。 + +设置键值对 **set myKey abc** + +取出键值对 **get myKey** + +### Linux 下安装 + +**下载地址:** http://redis.io/download,下载最新文档版本。 + +本教程使用的最新文档版本为 2.8.17,下载并安装: ``` -wget -O /opt/redis/redis-4.0.8.tar.gz http://download.redis.io/releases/redis-4.0.8.tar.gz -cd /opt/redis -tar zxvf redis-4.0.8.tar.gz +$ wget -O /opt/redis/redis-4.0.8.tar.gz http://download.redis.io/releases/redis-4.0.8.tar.gz +$ cd /opt/redis +$ tar zxvf redis-4.0.8.tar.gz ``` -(2)编译安装 +make 完后 redis-2.8.17 目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli,两个程序位于安装目录 src 目录下: -执行以下命令: +下面启动 redis 服务. ``` -cd /opt/redis/redis-4.0.8 -make +$ cd src +$ ./redis-server ``` -## 启动 +注意这种方式启动 redis 使用的是默认配置。也可以通过启动参数告诉 redis 使用指定配置文件使用下面命令启动。 + +``` +$ cd src +$ ./redis-server redis.conf +``` + +redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。 + +启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。 比如: + +``` +$ cd src +$ ./redis-cli +redis> set foo bar +OK +redis> get foo +"bar" +``` + +### Ubuntu 下安装 + +在 Ubuntu 系统安装 Redi 可以使用以下命令: + +``` +$sudo apt-get update +$sudo apt-get install redis-server +``` + +### 启动 Redis **启动 redis 服务** @@ -51,6 +98,27 @@ cd /opt/redis/redis-4.0.8/src ./redis-cli ``` +### 查看 redis 是否启动? + +``` +$ redis-cli +``` + +以上命令将打开以下终端: + +``` +redis 127.0.0.1:6379> +``` + +127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。 + +``` +redis 127.0.0.1:6379> ping +PONG +``` + +以上说明我们已经成功安装了 redis。 + ## 脚本 以上两种安装方式,我都写了脚本去执行: diff --git a/docs/nosql/redis/redis-quickstart.md b/docs/nosql/redis/redis-quickstart.md deleted file mode 100644 index 19196ad..0000000 --- a/docs/nosql/redis/redis-quickstart.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: Redis 快速入门 -date: 2017-12-01 -categories: -- db -tags: -- database -- key-value -- cache ---- - -# Redis 快速入门 - - - -- [1. 概述](#1-概述) - - [1.1. 什么是 Redis](#11-什么是-redis) - - [1.2. 为什么用 Redis](#12-为什么用-redis) -- [2. 安装](#2-安装) - - [2.1. Window 下安装](#21-window-下安装) - - [2.2. Linux 下安装](#22-linux-下安装) - - [2.3. Ubuntu 下安装](#23-ubuntu-下安装) - - [2.4. 启动 Redis](#24-启动-redis) - - [2.5. 查看 redis 是否启动?](#25-查看-redis-是否启动) -- [3. Redis 命令](#3-redis-命令) - - - -## 1. 概述 - -### 1.1. 什么是 Redis - -Redis 是一个高性能的 key-value 数据库,也可用于缓存和消息代理。 - -### 1.2. 为什么用 Redis - -与其它 key - value 数据库产品相比,具有以下优势: - -- 支持数据持久化——可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 - -- 丰富的数据类型——Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 -- 支持数据的备份——数据备份采用 master-slave 模式。 -- 性能极高——Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 -- 原子性——Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。 - -## 2. 安装 - -### 2.1. Window 下安装 - -**下载地址:**。 - -Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 **Redis-x64-xxx.zip**压缩包到 C 盘,解压后,将文件夹重新命名为 **redis**。 - -打开一个 **cmd** 窗口 使用 cd 命令切换目录到 **C:\redis** 运行 **redis-server.exe redis.windows.conf** 。 - -如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面: - -这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。 - -切换到 redis 目录下运行 **redis-cli.exe -h 127.0.0.1 -p 6379** 。 - -设置键值对 **set myKey abc** - -取出键值对 **get myKey** - -### 2.2. Linux 下安装 - -**下载地址:**,下载最新文档版本。 - -本教程使用的最新文档版本为 2.8.17,下载并安装: - -``` -$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz -$ tar xzf redis-2.8.17.tar.gz -$ cd redis-2.8.17 -$ make -``` - -make 完后 redis-2.8.17 目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli,两个程序位于安装目录 src 目录下: - -下面启动 redis 服务. - -``` -$ cd src -$ ./redis-server -``` - -注意这种方式启动 redis 使用的是默认配置。也可以通过启动参数告诉 redis 使用指定配置文件使用下面命令启动。 - -``` -$ cd src -$ ./redis-server redis.conf -``` - -redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。 - -启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。 比如: - -``` -$ cd src -$ ./redis-cli -redis> set foo bar -OK -redis> get foo -"bar" -``` - -### 2.3. Ubuntu 下安装 - -在 Ubuntu 系统安装 Redi 可以使用以下命令: - -``` -$sudo apt-get update -$sudo apt-get install redis-server -``` - -### 2.4. 启动 Redis - -``` -$ redis-server -``` - -### 2.5. 查看 redis 是否启动? - -``` -$ redis-cli -``` - -以上命令将打开以下终端: - -``` -redis 127.0.0.1:6379> -``` - -127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。 - -``` -redis 127.0.0.1:6379> ping -PONG -``` - -以上说明我们已经成功安装了 redis。 - -## 3. Redis 命令 - -Redis 命令用于在 redis 服务上执行操作。 - -要在 redis 服务上执行命令,需要先进入 redis 客户端。 - -进入 redis 客户端的方法: - -``` -$ redis-cli -``` - -远程进入 redis 客户端的方法: - -``` -$ redis-cli -h host -p port -a password -``` - -**实例** - -以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 pass 的 redis 服务上: - -``` -$redis-cli -h 127.0.0.1 -p 6379 -a "pass" -redis 127.0.0.1:6379> -redis 127.0.0.1:6379> PING -PONG -``` - -更多命令行可以参考:[Redis 官方命令行字典](https://redis.io/commands) diff --git a/docs/nosql/redis/Redis复制.md b/docs/nosql/redis/redis-replication.md similarity index 100% rename from docs/nosql/redis/Redis复制.md rename to docs/nosql/redis/redis-replication.md diff --git a/docs/nosql/redis/Redis哨兵.md b/docs/nosql/redis/redis-sentinel.md similarity index 100% rename from docs/nosql/redis/Redis哨兵.md rename to docs/nosql/redis/redis-sentinel.md diff --git a/docs/nosql/redis/redis.md b/docs/nosql/redis/redis.md index e60eac6..cf931b9 100644 --- a/docs/nosql/redis/redis.md +++ b/docs/nosql/redis/redis.md @@ -1,15 +1,4 @@ ---- -title: Redis -date: 2018-06-09 -categories: -- database -tags: -- database -- key-value -- cache ---- - -# Redis +# Redis 入门指南 diff --git a/scripts/gitpush.sh b/scripts/gitpush.sh index ec14d5a..6caf7c8 100644 --- a/scripts/gitpush.sh +++ b/scripts/gitpush.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash cd .. -git push github master +git push origin master git push gitee master