Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如:
字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets)范围查询位图(Bitmaps)基数计算(HyperLogLogs)地理空间(geospatial)redis 内置了 复制,LUA脚本, LRU驱动事件,事务和不同级别的 磁盘持久化, 并通过 Redis哨兵和Cluster提供高可用性。
由于其支持多种存储格式,对高并发读写的优秀支持以及高可用使得redis逐渐成为最广泛使用的nosql数据库.
非常建议在安装和使用之前先看一下官方文档,里面对于redis安装和使用过程有非常明确的指导,是最有价值和最有参考意义的. 如果英文好的话可以看英文文档,地址: https://redis.io/
如果看英文比较吃力,也有中文社区 http://www.redis.cn/
如果没有安装需要安装:
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 上传附件redis文件夹 解压redis,安装到/app/redis目录 tar -zxvf redis-3.2.1.tar.gz -C /app cd /app/redis-3.2.1 make make install PREFIX=/app/redis 启动redis 进入redis安装目录 cd /app/redis/bin ./redis-server 查看redis进程 ps -ef|grep redis如果有redis进程号存在证明安装成功了
集群安装很简单,但是不同的版本有不同的安装方式
创建cluster
cd /app/redis/bin mkdir redis_cluster cd redis_cluster mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005 mkdir 7006注: 如果在不同的服务器下安装redis集群就将对应的cluster文件夹创建到该服务器下
修改redis.conf 复制redis.conf文件到集群目录下
cp /app/redis-3.2.1/redis.conf /app/redis/bin/redis_cluster/7000 vi redis.conf修改如下:
daemonize yes bind 192.168.56.101 #绑定的ip,一定要修改 pidfile /var/run/redis_7000.pid #生成的唯一标识,一定要修改成不同的 logfile "/app/redis/redis_log/redis_7000.log" #根据需要修改 dir "/app/redis_db" #可以不修改 port 7000 #根据规划修改 cluster-enabled yes #开始集群,一定要修改 cluster-config-file nodes_7000.conf #自动生成配置文件,一定要修改 cluster-node-timeout 5000 #超时时间,根据需要修改 appendonly yes #打开aof持久化策略 # 新增配置 masterauth "yourpassword" #根据需要新增,如果你的redis需要密码则需要此项 requirepass "yourpassword" #需要密码登录启动节点 检查是否开启了防火墙:
systemctl status firewalld如果开启了要开放对应的两个端口如:7001,17001 例: 添加指定需要开放的端口:
firewall-cmd --add-port=7001/tcp --permanent firewall-cmd --add-port=17001/tcp --permanent重载入添加的端口:
firewall-cmd --reload查询指定端口是否开启成功:
firewall-cmd --query-port=7001/tcp firewall-cmd --query-port=17001/tcp启动redis节点 redis-server redis_cluster/7001/redis.conf
依次配置好剩下的节点
离线安装
下载redis.gem 上传准备的包,解压并安装(具体版本可以在官网中找到) https://gems.ruby-china.com/search?utf8=%E2%9C%93&query=redis 点进去以后 选择自己的版本点进去,下载
下载ruby 当执行以下语句时会提醒你当前版本所需要的ruby最低版本
gem install redis ERROR: Error installing redis: redis requires Ruby version >= 2.3.0到ruby的官方网站去下载对应的包,至少要大于提示的最低版本 http://www.ruby-lang.org/en/downloads/
下载rubygem https://rubygems.org/pages/download
安装 (1)ruby
tar -xvf ruby-2.3.0.tar.gz -C /app/ cd /app/ruby-2.3.0/ ./configure make && make install检查是否成功
ruby -v(2) rubygem
tar -xvf rubygems-2.3.0.tgz -C /app/ cd /app/rubygems-2.3.0/ ruby setup.rb(3) redis gem模块 上传redis-3.3.1.gem到/app/rubygems-2.3.0/下
gem install -l ./redis-3.3.1.gemRVM安装 可以参考其他博客教程 Redis集群环境Ruby必须版本2.2以上解决
(4)修改配置 powershell find / -name client.rb 找到位于此目录下的文件:lib/redis/client.rb
vi /usr/local/lib/ruby/gems/2.3.0/gems/redis-3.3.1/lib/redis/client.rb修改password (5) 启动集群 进入redis源包下
cd /app/redis-3.2.1/src创建并启动集群
./redis-trib.rb create -a yourpassword --replicas 1 192.168.75.23:7001 192.168.75.24:7004 192.168.75.24:7003 192.168.75.25:7006 192.168.75.25:7005 192.168.75.23:7002注:
-a:密码 --replicas:副本数量(1为每个主节点有一个子节点) 集群按照一定的规则创建主备节点,写在前面的为主节点,紧跟其后的是它的从节点 (但存在一定的可能redis没有按照这个规则创建,后面会介绍怎么手动修改主备节点)主备节点的创建原则: (1) 至少需要6个节点(三主三从) (2) 根据redis选举机制,创建集群时尽量不让主节点都在一台机器上,或者一台机器上拥有超过半数的主节点 (3) 主节点的从节点需要分布在其他服务器上,如:192.168.75.23:7001的从节点应该为192.168.75.24:7004(6)节点加入集群
进入redis安装目录cd \app\redis\bin 登录子节点redis-cli -h 192.168.75.23 -p 7001 -c 输入命令auth yourpassword cluster meet 192.168.75.24 7004 每个服务器节点都meet一遍然后等待连接成功(7)测试集群是否创建成功 在redis中输入set命令,如果执行成功,集群创建成功
进入redis源包下
cd /app/redis-3.2.1/src创建并启动集群
redis-cli -a yourpassword --cluster create --cluster-replicas 1 10.128.52.33:7001 10.128.52.34:7004 10.128.52.34:7003 10.128.52.35:7006 10.128.52.35:7005 10.128.52.33:7002如果发现有主节点的从节点是当前服务器的,需要手动将其他服务器的从节点更改为自己的从节点. 假设: 192.168.75.23 7001的从节点为192.168.75.23 7002,现在需要将192.168.75.24 7004更改为192.168.23 7001的从节点 操作如下: 登录192.168.75.24 7004,执行命令(masterid就是上图中的节点id,这里需要输入7001的节点id)
cluster replicate masterid依次更换好其他从节点 再次执行 cluster slots查看集群信息
主节点的切换 一般不会出现redis主节点分配到同一台服务器的情况,但是如果出现了就需要重新分配主节点.
如果是刚开始创建的集群,建议删除所有的db文件和生成的节点文件,直接重新创建集群;但如果是无法停止redis服务并重新创建集群,那么就需要手动切换: redis没有直接更换主节点的命令,手动更新主节点非常麻烦.如果该主节点的的从节点位于其他服务器,可以手动下线该主节点,sentinel将自动将从节点变更为主节点,重启原先的主节点以后将自动变成原从节点(现主节点)的从节点如果情况更复杂一点,提供以下思路供参考: (1) 在需要创建主节点的服务器新建一个节点(如75.24:7007),启动,并加入到当前集群 新增结束后执行新增主节点命令:redis-trib.rb add-node 192.168.75.24:7007 //redis5以后用redis-cli redis-cli add-node 192.168.75.24:7007 (2) 重新分配hash槽,将你要挪动的主节点的所有hash槽全部迁移到新主节点上redis-trib.rb reshard 192.168.75.24:7003 //可以为任意的节点 在此登录的7003只是作为客户端去访问的 //redis5以后同样用redis-cli 原主节点有多少个就填多少个 等待一段时间之后按照以下输入 完成后检查集群cluster slots 分配成功后下线原来的主节点以下是我觉得写的比较清晰的文章,推荐一下,可以看看 什么是redis的文件事件处理器 redis是单线程还是多线程 redis事件操作为什么选择单线程
总结一下: redis是单线程模型,但是仅仅是文件事件分派时使用单线程,而在I/O操作时为了提高效率在4版本以后采用了多线程. redis执行事件时不需要通过多线程提高效率,因为内存操作本来就非常快,而多线程频繁切换上下文反而会影响效率. 但是redis的瓶颈在内存和io.内存不用说,但单线程的io如果网络不好导致单线程阻塞在那里,将会非常影响效率,所以在高版本中,采用多线程提高网络数据和协议的处理效率,降低网络阻塞对redis性能的影响