Redis

Redis是一个开源的使用ANSI 编写、支持网络、可基于内存亦可持久化的日志型、Key-Value,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

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

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。[1] 

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

目前,Vmware在资助着redis项目的开发和维护。

redis组件:redis.io

redis监听端口:6379/tcp

一.Redis安装

Linux下rpm包安装redis:

 搜素相应的redis版本进行安装,这里我们使用redis-3.2.7-1.el6.remi.x86_64.rpm进行安装。

rpm -qip redis-3.2.7-1.el6.remi.x86_64.rpm 查询未安装的redis包的详细信息rpm -qlp redis-3.2.7-1.el6.remi.x86_64.rpm 查看未安装的redis包中文件未来要安装的位置rpm -qRp redis-3.2.7-1.el6.remi.x86_64.rpm 查看未安装包redis所需要依赖的全部包信息rpm -ivh redis-3.2.7-1.el6.remi.x86_64.rpm 安装redis安全包,可以看到安装时需要包依赖

这里安装会报错:

[root@RedHat-2 soft]# rpm -ivh redis-3.2.7-1.el6.remi.x86_64.rpm warning: redis-3.2.7-1.el6.remi.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEYerror: Failed dependencies:libjemalloc.so.1()(64bit) is needed by redis-3.2.7-1.el6.remi.x86_64

解决依赖关系需要安装jemalloc.同样这里我们安装jemalloc-3.6.0-1.el6.x86_64.rpm版本。

rpm -ivh jemalloc-3.6.0-1.el6.x86_64.rpm

之后,继续安装redis-3.2.7-1.el6.remi.x86_64.rpm。

安装完成之后,我们启动redis服务,就可以使用redis了。

service redis start

rpm包安装redis配置文件为/etc/redis.conf,相应的启动命令在/usr/bin/下。

root@RedHat-2 soft]# ss -ntlState      Recv-Q Send-Q                                          Local Address:Port                                            Peer Address:Port LISTEN     0      128                                                 127.0.0.1:6379                                                       *:*     LISTEN     0      128                                                        :::111                                                       :::*     LISTEN     0      128                                                         *:111                                                        *:*     LISTEN     0      128                                                        :::22                                                        :::*     LISTEN     0      128                                                         *:22                                                         *:*     LISTEN     0      128                                                 127.0.0.1:631                                                        *:*     LISTEN     0      128                                                       ::1:631                                                       :::*     LISTEN     0      100                                                       ::1:25                                                        :::*     LISTEN     0      100                                                 127.0.0.1:25                                                         *:*     LISTEN     0      128                                                        :::57562                                                     :::*     LISTEN     0      128                                                         *:53481                                                      *:*     [root@RedHat-2 soft]# redis-cli 127.0.0.1:6379> SET ip 0.0.0.0 --设置键值OK127.0.0.1:6379> GET ip --查看"0.0.0.0"127.0.0.1:6379> KEYS * --查看所有键1) "ip"127.0.0.1:6379>

设置防火墙

iptables -I INPUT -p tcp --dport 6379 -j ACCEPTservice iptables saveservice iptables restart cat /etc/sysconfig/iptables

Redis命令参考

二.redis认证实现方式

1)vim /etc/redis.conf

# requirepass foobared

2)通过redis-cli命令实现

AUTH PASSWORD

三.redis复制实现

特点:

  • 一个Master可以有多个Slave;

  • 支持链式复制;

  • Master以非阻塞方式同步数据至slave;

从服务器上输入主服务器的ip及端口:

[root@RedHat-2 ~]# redis-cli 127.0.0.1:6379> SLAVEOF [hostip] [port] 127.0.0.1:6379> INFO replication  --查看状态

注:主从服务器最好在同一网段上,并且redis.conf修改各自相应的ip。如:

bind 192.168.1.102
redis-cli -h 192.168.1.102 -p 6379 --连接设置redis复制...

注意:如果master使用requirepass开启了认证功能,从服务器要使用masterauth <PASSWORD>来连入服务请求使用此密码进行认证;

四.redis的sentinel实现

用于管理多个redis服务实现HA;

  • 监控

  • 通知

  • 自动故障转移

启动方式:

1)redis-sentinel /path/to/file.conf2)redis-server  /path/to/file.conf --sentinel

(1) 服务器自身初始化,运行redis-server中专用于sentinel功能的代码;

(2) 初始化sentinel状态,根据给定的配置文件,初始化监控的master服务器列表;

(3) 创建连向master的连接;

配置文件为/etc/redis-sentinel.conf监听端口为26379

主要配置参数:

(1) sentinel monitor 
 
 
 
    sentinel monitor mymaster 127.0.0.1 6379 2(2) sentinel down-after-milliseconds 
 
    sentinel down-after-milliseconds mymaster 30000(3) sentinel parallel-syncs 
 
   sentinel parallel-syncs mymaster 1(4) sentinel failover-timeout 
 
    sentinel failover-timeout mymaster 180000

主节点:192.178.1.100,两个从节点分别为:192.168.1.101,192.168.1.102

主节点作为redis-sentinel监控端,主节点redis-sentinel.conf设置:

sentinel monitor mymaster 192.168.1.100 6379 1sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 60000protected-mode no

两个从节点*.1.101和*.1.102,也可以编辑redis.conf设置主节点:

192.168.1.101:6379> SLAVEOF 192.168.1.100 6379192.168.1.102:6379> SLAVEOF 192.168.1.100 6379

专用命令:

SENTINEL masters

SENTINEL slaves <master name>

SENTINEL get-master-addr-by-name <master name>

SENTINEL reset

SENTINEL failover <master name>

如果不是主宕机,而是从宕机,那么不会发生切换行为,只会把宕机的那台从集群中剔除。

已宕机的机器,如果再次加入集群,只要它成为了当前主的从机,则Sentinel会自动发现,并将其加入集群成员。