1 redis介绍
Redis(Remote Dictionary Server)是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范围查询、位图、流和地理空间索引等。Redis的主要特点是其高性能和灵活性。
Redis作为一个高性能的内存数据存储系统,在现代的Web应用、大数据和云计算领域中扮演着重要角色。它的快速响应能力、灵活的数据模型和强大的可扩展性使其成为构建高效、可靠应用的理想选择。随着技术的不断发展,Redis将继续在存储和处理大规模数据方面发挥其重要作用。
1.1 基本特征
-
内存存储与持久化: Redis的数据存储在内存中,提供极快的读写速度。同时,它也提供了持久化功能,可以将内存中的数据保存到磁盘。
-
支持丰富的数据类型: Redis不仅支持基本的数据类型,还支持更复杂的类型,如列表、集合和有序集合。
-
原子操作: Redis的所有操作都是原子性的,保证执行过程中的数据完整性。
-
发布/订阅模式: Redis支持发布/订阅消息传递模式,可以用于构建消息系统。
-
灵活的事务处理: Redis提供了事务功能,允许通过一系列命令实现多步操作的原子性执行。
1.2 性能优化
-
快速执行: 由于数据存储在内存中,Redis提供了非常快的数据读写能力。
-
高效的内存使用: Redis使用高效的数据结构和算法来优化内存使用。
-
持久化选项: Redis提供两种持久化选项:RDB(快照)和AOF(追加文件),用户可以根据需要选择或结合使用这两种持久化方式。
1.3 高可用性与数据安全
-
主从复制: Redis支持主从复制模式,从服务器可以自动复制主服务器上的数据。
-
哨兵(Sentinel)系统: Redis的哨兵系统提供了高可用性支持,可以在主服务器出现故障时自动进行故障转移。
-
集群模式: Redis集群提供了数据的分片存储,以及复制和故障转移功能,以实现更高的可用性和可扩展性。
1.4 应用场景
-
作为数据库: Redis可以存储关键的业务数据,支持丰富的数据查询和处理能力。
-
缓存系统: 由于其高速的读写能力,Redis非常适合用作缓存系统,提高数据访问速度,减轻后端数据库的压力。
-
消息队列系统: Redis的发布/订阅模式可以被用来构建消息队列系统。
-
会话存储(Session Store): Redis常被用于存储Web应用的会话信息。
-
实时分析: Redis的快速响应特性使其适合实时数据处理场景,如计数器、实时系统监控等。
1.5 开发与集成
-
客户端支持: Redis提供了多种编程语言的客户端库,包括Java、Python、PHP、Ruby等。
-
简单的协议: Redis使用一种简单的文本协议,使得开发和集成变得容易。
-
丰富的文档和社区支持: Redis有着广泛的文档和一个活跃的社区,为开发者提供支持和资源。
1.6 安全性与管理
-
访问控制: Redis支持基于密码的访问控制,以保护数据不被未授权访问。
-
安全通信: Redis支持SSL/TLS,确保数据在传输过程中的安全性。
-
管理与监控: Redis提供了多种管理和监控工具,如Redis命令行界面(CLI)和Redis监控。
2 redis集群搭建
2.1 下载redis3.2.8源码
sudo wget https://github.com/antirez/redis/archive/3.2.8.zip
安装ruby:
yum install ruby
gem install redis
2.2 创建集群文件目录
(1)创建主目录:mkdir redis-cluster
(2)进入目录:cd redis-cluster
(3)创建logs目录:mkdir logs
(4)创建pid目录:mkdir pid
(5)创建数据目录:mkdir data
(6)创建redis配置文件
vi node-6380.conf
文件中填入配置内容如下:
pidfile /usr/local/etc/redis-cluster/pid/node-6380.pid
logfile "/usr/local/etc/redis-cluster/logs/node-6380.log"
dir /usr/local/etc/redis-cluster/data/node-6380
port 6380
daemonize yes
cluster-enabled yes
cluster-config-file node-6380.conf
cluster-node-timeout 5000
appendonly yes
依次创建node-6381.conf,node-6382.conf,node-63803conf,node-6384.conf,node-6385.conf,并更改文件中对应的端口数字
2.3 启动redis-server
redis-server /usr/local/etc/redis-cluster/node-6380.conf
redis-server /usr/local/etc/redis-cluster/node-6381.conf
redis-server /usr/local/etc/redis-cluster/node-6382.conf
redis-server /usr/local/etc/redis-cluster/node-6383.conf
redis-server /usr/local/etc/redis-cluster/node-6384.conf
redis-server /usr/local/etc/redis-cluster/node-6385.conf
2.4 创建redis集群
进入redis源码的src目录:
将redis-trib.rb拷贝到/usr/bin目录下:
cp redis-trib.rb /usr/bin/
创建集群,每个主节点一个备份:
redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
确认集群配置:敲入yes
2.5 查看集群状态
检查集群状态:redis-trib.rb check 127.0.0.1:6385
查看集群信息:redis-trib.rb info 127.0.0.1:6385
集群创建完成!!!!
2.6 集群维护
(1)删除集群几点:redis-trib.rb del-node 127.0.0.1:6382 d5f6d1d17426bd564a6e309f32d0f5b96962fe53
(2)增加集群节点:redis-trib.rb add-node --slave --master-id dcb792b3e85726f012e83061bf237072dfc45f99 127.0.0.1:6382 127.0.0.1:6386
(3)设置集群间连接的心跳超时时间:redis-trib.rb set-timeout 127.0.0.1:6380 3000
(4)在全部集群节点上执行命令:redis-trib.rb call 127.0.0.1:6380 get key
(5)将外部redis数据导入集群:redis-trib.rb import --from 127.0.0.1:6380 10.10.10.1:7000