Redis简单搭建使用与集群的搭建

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的简单测试安装与集群的搭建,新手上路,有问题请多多指教~

一、安装Redis
1、将压缩包导入虚拟机
redis-3.2.9.tar
2、进入解压后的文件夹执行命令make
3、在当前的目录src下有一系列的可执行的文件,这是与redis相关的命令,将可执行的命令添加到PATH变量中。

find . -type f -executable

4、开启redis服务:# redis-server
5、连接reids数据库:# redis-cli

redis 数据库的使用
1、string字符串类型

设置键值对 set key value
127.0.0.1:6379> set a chinaitsoft
OK

获取键值:
127.0.0.1:6379> get a
"chinaitsoft"

将key中存储的数字加1
127.0.0.1:6379> set b 2
OK
127.0.0.1:6379> INCR b
(integer) 3

将key中存储的数字减1
127.0.0.1:6379> get b
"6"
127.0.0.1:6379> DECR b
(integer) 5
127.0.0.1:6379> get b
"5"

返回key所存储的字符串的长度:
127.0.0.1:6379> STRLEN a
(integer) 11

链表的使用:
在链表的前端添加一个值:
127.0.0.1:6379> LPUSH aa shandong
(integer) 1
在链表的前端添加一个值:
127.0.0.1:6379> LPUSH aa jinan
(integer) 2
在链表的前端添加一个值:
127.0.0.1:6379> LPUSH aa changqing
(integer) 3
获取链表的值(链表的存储是从0开始的):
127.0.0.1:6379> LRANGE aa 0 3
1) "changqing"
2) "jinan"
3) "shandong"
在链表的后端添加一个值:
127.0.0.1:6379> RPUSH aa china
(integer) 4

127.0.0.1:6379> LRANGE aa 0 4
1) "changqing"
2) "jinan"
3) "shandong"
4) "china"

获取redis数据库中所有的键:
127.0.0.1:6379> KEYS *
1) "aa"
2) "c"
3) "b"
4) "a"

集合的使用:
向集合中添加一个值:
127.0.0.1:6379> SADD dd 1
(integer) 1
127.0.0.1:6379> SADD dd 2
(integer) 1
127.0.0.1:6379> SADD dd 3
(integer) 1

向集合中同时添加多个值:
127.0.0.1:6379> SADD dd 4 5 6
(integer) 3
127.0.0.1:6379> SMEMBERS dd
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"

获取集合的中的所有的成员:
127.0.0.1:6379> SMEMBERS dd
1) "1"
2) "2"
3) "3"

移除并返回集合中的一个随机元素:
127.0.0.1:6379> SPOP dd
"1"
127.0.0.1:6379> SMEMBERS dd
1) "2"
2) "3"
获取集合的成员数:
127.0.0.1:6379> SCARD dd
(integer) 2

返回两个集合的交集:
127.0.0.1:6379> SINTER dd cc
1) "3"

有序集合(zset)的使用:
添加一个数值:

127.0.0.1:6379> ZADD r 0 shandong
(integer) 1
127.0.0.1:6379> zadd r 0 jinan
(integer) 1
127.0.0.1:6379> ZADD r 0 changqing
(integer) 1
显示有序集合某一个区间的值
127.0.0.1:6379> ZRANGE r 0 2
1) "changqing"
2) "jinan"
3) "shandong"
127.0.0.1:6379> ZRANGE r 0 1
1) "changqing"
2) "jinan

显示有序集合中的值的数量:
127.0.0.1:6379> ZCARD r
(integer) 3
127.0.0.1:6379> ZRANGE r 0 1
1) "changqing"
2) "jinan"

hash的使用:
创建:
127.0.0.1:6379> HSET t database "mysql"
(integer) 1
127.0.0.1:6379> HSET t OS ""
(integer) 1
127.0.0.1:6379> HSET t OS "linux"
(integer) 0
获取所有hash表中的字段
127.0.0.1:6379> HKEYS t
1) "database"
2) "OS"
获取在hash表中指定key的所有字段和值
127.0.0.1:6379> HGETALL t
1) "database"
2) "mysql"
3) "OS"
4) "linux"

获取hash表中到的所有值:
127.0.0.1:6379> HVALS t
1) "mysql"
2) "linux"

二、redis集群的搭建

1、分区的概念:
分区是分割数据到多个redis实例,每个实例保存的是key的一个子集
通过利用多台计算机内存的和值,允许构造出更大的数据库
2、分区的类型:
1、范围分区,就是映射一定范围的对象到特定的redis实例。
2、hash分区。
3、redis集群的优势:
1、容错性:解决了单台redis数据库的单点故障,
2、扩展性:相比单台的redis服务器,在升级性能到的过程中,集群能实现多节点的热部署,不需要停止数据库。
3、性能提升:性能的在扩展的时候体现出来。
4、集群架构:
在redis集群的每一个节点中,都有两个东西,一个是插槽,可以理解为存储两个数值的变量,这个变量的取值范围是0-16383,还有一个相当于一个管理的插件,当我们存取的key到达的时候,redis会根据算法得到一个值,然后用这个值对16383取余,这样就会对应一个编号在0-16383的hash槽。
5、集群成员的管理:
集群的节点和节点之间每一个节点都会定期到的交换集群内部的信息,并且更新,这些信息包括:IP、PORT、节点的名字、节点的状态、节点的角色。
6、集群可用性的判断:
每一个节点都会存储这个集群所有主节点和从节点的信息:
1、节点之间互相ping进行监听,如果有一半的节点去ping一个节点没有响应,集群就会认为这个节点宕机。然后去连接他的从节点,如果该节点所有的从节点全部挂掉,该集群就会进入fail状态。
2、如果该集群的一半以上的主节点宕机,那个该集群就会进入fail状态。无论是否有从节点。这就是redis投票机制,投票过程是该集群的所有master参与。

7、集群的搭建:
要让集群正常工作至少3个主节点,所有本次我们使用6个redis节点,分别对应3个主节点,3的从节点:
对应的redis节点的IP和端口对应关系:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
127.0.0.1:7004
127.0.0.1:7005
127.0.0.1:7006
7.1、创建该集群需要的目录

mkdir /redis-cluster

cd /redis-cluster/

mkdir 7001 7002 7003 7004 7005 7006
7.2、将redis的配置文件分别拷贝到对应的PORT的文件夹下:
[root@zabbix-agent redis-cluster]# cp /software/redis-3.2.9/redis.conf 7001
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7002
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7003
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7004
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7005
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7006
7.3、修改配置文件如下(每一个文件都需要修改):
port 7001 要和对应的目录相对应
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

7.4、分别启动这6个实例:
[root@zabbix-agent redis-cluster]# cd 7001
[root@zabbix-agent 7001]# ls
redis.conf
[root@zabbix-agent 7001]# redis-server redis.conf
[root@zabbix-agent 7001]# ps -ef |grep redis
root 2328 2297 0 17:40 pts/0 00:00:11 redis-server *:6379
root 2358 2335 0 17:43 pts/1 00:00:00 redis-cli
root 2963 1 0 19:25 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]
root 2967 2365 0 19:25 pts/2 00:00:00 grep redis
[root@zabbix-agent 7001]# cd ../7002
[root@zabbix-agent 7002]# redis-server redis.conf
[root@zabbix-agent 7002]# cd ../7003
[root@zabbix-agent 7003]# redis-server redis.conf
[root@zabbix-agent 7003]# cd ../7004
[root@zabbix-agent 7004]# redis-server redis.conf
[root@zabbix-agent 7004]# cd ../7005
[root@zabbix-agent 7005]# redis-server redis.conf
[root@zabbix-agent 7005]# cd ../7006
[root@zabbix-agent 7006]# redis-server redis.conf
[root@zabbix-agent 7006]# ps -ef|grep redis
root 2328 2297 0 17:40 pts/0 00:00:11 redis-server *:6379
root 2358 2335 0 17:43 pts/1 00:00:00 redis-cli
root 2963 1 0 19:25 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]
root 2973 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster]
root 2978 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster]
root 2983 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7004 [cluster]
root 2987 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7005 [cluster]
root 2991 1 0 19:29 ? 00:00:00 redis-server 127.0.0.1:7006 [cluster]
root 2995 2365 0 19:29 pts/2 00:00:00 grep redis

7.5、安装ruby环境
因为redis集群的管理工具redis-trib.rb依赖ruby环境,首先安装ruby环境。

yum install ruby

yum install rubygems

检查是够安装:
[root@zabbix-agent 7006]# rpm -qa |grep ruby
ruby-rdoc-1.8.7.374-4.el6_6.x86_64
ruby-libs-1.8.7.374-4.el6_6.x86_64
ruby-irb-1.8.7.374-4.el6_6.x86_64
rubygems-1.3.7-5.el6.noarch
ruby-1.8.7.374-4.el6_6.x86_64

gem 安装redis ruby接口:

gem install redis-3.2.1.gem

Successfully installed redis-3.2.1
1 gem installed (表示安装成功)
Installing ri documentation for redis-3.2.1...
Installing RDoc documentation for redis-3.2.1...
7.6、创建集群
redis-trib.rb的子命令create命令用于创建集群
--replicas则是指定为redis cluster中的每个master节点配置几个slave节点。先master后slave。
[root@zabbix-agent src]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 输入yes

Creating cluster
Performing hash slots allocation on 6 nodes...
Using 3 masters:

127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: 661f78d1110107c1b3c458de6d2442e1f84fb4d5 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: 9c0af3c826817482c32b408727fe07f5bb0e9f9a 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
S: c4d0e9dba23bd897658cda342333ee4d2113d37f 127.0.0.1:7004
replicates 661f78d1110107c1b3c458de6d2442e1f84fb4d5
S: a5d9f6909981f35fec475aee87dea78773fd8cfe 127.0.0.1:7005
replicates 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb
S: a98de46385b5124c5426a0f001386bbabdab4e6a 127.0.0.1:7006
replicates 9c0af3c826817482c32b408727fe07f5bb0e9f9a
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 127.0.0.1:7001)

M: 661f78d1110107c1b3c458de6d2442e1f84fb4d5 127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c4d0e9dba23bd897658cda342333ee4d2113d37f 127.0.0.1:7004
slots: (0 slots) slave
replicates 661f78d1110107c1b3c458de6d2442e1f84fb4d5
S: a5d9f6909981f35fec475aee87dea78773fd8cfe 127.0.0.1:7005
slots: (0 slots) slave
replicates 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb
M: 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: a98de46385b5124c5426a0f001386bbabdab4e6a 127.0.0.1:7006
slots: (0 slots) slave
replicates 9c0af3c826817482c32b408727fe07f5bb0e9f9a
M: 9c0af3c826817482c32b408727fe07f5bb0e9f9a 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.

Check for open slots...
Check slots coverage...

[OK] All 16384 slots covered.

默认的是前三个节点7001 7002 7003为主节点,后三个节点7004 7005 7006为从节点,如果部署在不同的服务器,请根据主从的分布规则,填写IP以及PORT。
至此redis集群搭建完成。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
存储 NoSQL 算法
09- Redis分片集群中数据是怎么存储和读取的 ?
Redis分片集群使用哈希槽分区算法,包含16384个槽(0-16383)。数据存储时,通过CRC16算法对key计算并模16383,确定槽位,进而分配至对应节点。读取时,根据槽位找到相应节点直接操作。
68 12
|
1月前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
371 0
|
1月前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
290 2
|
3天前
|
存储 监控 NoSQL
Redis哨兵&分片集群
Redis哨兵&分片集群
7 0
|
4天前
|
NoSQL 算法 Java
深入浅出Redis(八):Redis的集群模式
深入浅出Redis(八):Redis的集群模式
|
10天前
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
115 10
透视Redis集群:心跳检测如何维护高可用性
|
12天前
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
48 11
Redis集群模式:高可用性与性能的完美结合!
|
13天前
|
监控 NoSQL Redis
|
18天前
|
NoSQL Redis Docker
使用Docker搭建Redis主从集群
使用Docker搭建Redis主从集群
32 1
|
18天前
|
存储 NoSQL 算法
Redis 搭建分片集群
Redis 搭建分片集群
27 2