欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis的介绍及安装

程序员文章站 2022-05-20 14:11:38
...

Redis的介绍

Redis是一个开源的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

安装步骤

1、下载获得redis-3.2.5.tar.gz后将它放入我们的Linux目录/opt

2、解压命令:tar -zxvf redis-3.2.5.tar.gz

3、解压完成后进入目录:cd redis-3.2.5

4、在redis-3.2.5目录下执行make命令

运行make命令时出现故障意出现的错误解析:gcc:命令未找到
能上网:

  yum install gcc
  yum install gcc-c++

5、在redis-3.2.5目录下再次执行make命令

Jemalloc/jemalloc.h:没有那个文件
解决方案:运行make distclean之后再 make

6、在redis-3.2.5目录下再次执行make命令

Redis Test(可以不用执行)

执行完make后,跳过Redis test 继续执行make install
Redis的介绍及安装

查看默认安装目录:usr/local/bin

Redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动起来后执行)
Redis-check-aof:修复有问题的AOF文件
Redis-check-dump:修复有问题的dump.rdb文件
Redis-sentinel:Redis集群使用
redis-server:Redis服务器启动命令
redis-cli:客户端,操作入口

Redis启动

1、备份redis.conf:拷贝一份redis.conf到其他目录

可以在root目录下创建个myredis文件夹,拷贝一份redis.conf到此目录下

2、修改redis.conf文件将里面的daemonize no 改成 yes,让服务在后台启动

3、启动命令:执行 redis-server /myredis/redis.conf

4、用客户端访问: redis-cli

       多个端口可以 redis-cli  –p  6379

5、测试验证: ping

Redis的介绍及安装
如果出现PONG说明连接成功

单实例关闭:redis-cli shutdown
也可以进入终端后再关闭
Redis的介绍及安装
多实例关闭,指定端口关闭:Redis-cli -p 6379 shutdown

Redis的Java客户端Jedis

用windows中的IDEA连接虚拟机的Redis的注意事项

禁用Linux的防火墙:
临时禁用:service iptables stop
关闭开机自启:chkconfig iptables off
redis.conf中注释掉bind 127.0.0.1(61行) ,然后 protect-mode(80行)设置为 no。

Redis的主从复制

主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主

配从(服务器)不配主(服务器)

1.拷贝多个redis.conf文件include
Redis的介绍及安装
文件里面redis6379,conf的配置是

include /root/myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb

文件里面redis6380,conf的配置是

include /root/myredis/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb

文件里面redis6381,conf的配置是

include /root/myredis/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
slave-priority 10

{从下线的主服务的所有从服务里面挑选一个从服务,将其转成主服务
slave-priority 10的值越小代表优先级越高,如果主机挂掉,它会优先选为从机
选择条件依次为:
(1)、选择优先级靠前的
(2)、选择偏移量最大的
(3)、选择runid最小的从服务

优先级在redis.conf中slave-priority 100
偏移量是指获得原主数据最多的
每个redis实例启动后都会随机生成一个40位的runid
}

2.开启daemonize yes
3.Pid文件名字pidfile
4.指定端口port
5.Log文件名字
6.Dump.rdb名字dbfilename
7.Appendonly 关掉或者换名字

info replication
打印主从复制的相关信息

slaveof  <ip>  <port>  
成为某个实例的从服务器

Redis的介绍及安装

哨兵模式(sentinel)

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库.

配置哨兵

调整为一主二仆模式
自定义的/myredis目录下新建sentinel.conf文件
在配置文件中填写内容:

sentinel  monitor  mymaster  127.0.0.1  6379  1

其中mymaster为监控对象起的服务器名称, 1 为 至少有多少个哨兵同意迁移的数量。
启动哨兵

执行redis-sentinel  /myredis/sentinel.conf

Redis集群安装

1、安装ruby环境

能上网:
      执行yum install ruby
      执行yum install rubygems

2、拷贝redis-3.2.0.gem到/opt目录下

3、执行在opt目录下执行 gem install --local redis-3.2.0.gem

制作6个实例,6379,6380,6381,6389,6390,6391
拷贝多个redis.conf文件
开启daemonize yes
Pid文件名字
指定端口
Log文件名字
Dump.rdb名字
Appendonly 关掉或者换名字

安装redis cluster配置修改
cluster-enabled yes 打开集群模式

cluster-config-file nodes-6379.conf 设定节点配置文件名

cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换。

redis6379.conf

include /root/myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
cluster-enabled yes
cluster-config-file  nodes-6379.conf
cluster-node-timeout 15000

其他实例只要改成对应的端口号就行

将六个节点合成一个集群

组合之前,请确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常

redis-server redis6379.conf
redis-server redis6380.conf
...
redis-server redis6391.conf

Redis的介绍及安装
合体:

cd  /opt/redis-3.2.5/src
./redis-trib.rb create --replicas 1 192.168.1.102:6379 192.168.1.102:6380 192.168.1.102:6381 192.168.1.102:6389 192.168.1.102:6390 192.168.1.102:6391

此处不要用127.0.0.1, 请用真实IP地址

Redis的介绍及安装
然后输入yes
Redis的介绍及安装
通过 cluster nodes 命令查看集群信息
Redis的介绍及安装

redis cluster 如何分配这六个节点?

一个集群至少要有三个主节点
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

故障恢复

如果所有某一段插槽的主从节点都当掉,redis服务是否还能继续?

redis.conf中的参数  cluster-require-full-coverage

redis.conf中的参数 cluster-require-full-coverage
当cluster-require-full-coverage为yes时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群不可用,下面论证该情况。