Redis笔记

 

 

Redis

NoSql数据库

 

1.      什么是NoSql

 

为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。

 

NoSql,叫非关系型数据库,它的全名Not only sql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。

Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。

键值类型:

String字符类型   map散列类型  list列表类型  set集合类型  sortedset有序集合类型

2.      redis的应用场景

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用

分布式集群架构中的session分离。

聊天室的在线好友列表。

任务队列。(秒杀、抢购、12306等等)

应用排行榜。

网站访问统计。

数据过期处理(可以精确到毫秒)

3.       redis安装

3.1      redis下载

官网地址:http://redis.io/

下载地址:http://download.redis.io/releases/redis-3.2.4.tar.gz

(之前的cent os6.几版本的系统 而 7.0的系统可以装上,3.2.7版本的redis

装不上3.2.7版本的redis  换成3.2.4低几个版本的可以装上,应该是系统兼容不好)

 

3.2    redis的安装

redis的安装环境会安装到linux系统中。

 

第一步:安装VMware,并且在VMware中安装centos系统(参考linux教程)。

第二步:将redis的压缩包,上传到linux系统

第三步:对redis的压缩包进行解压缩

    Redis解压缩之后的文件是用c语言写的源码文件

    tar -zxf redis-3.0.0.tar.gz

第四步:安装c语言环境(安装centos之后,自带c语言环境)

 yum install gcc-c++

第五步:编译redis源码

cd redis-3.0.0

make

第六步:安装redis

make install  PREFIX=/usr/local/redis( 指明安装到哪儿)  默认安装在当前路径下

第七步:查看是否安装成功

 

3.3      redis启动

3.3.1   前端启动

前端启动的命令:

         [root@itheima bin]# ./redis-server

前端启动的关闭:

         强制关闭:Ctrl+c

         正常关闭:[root@itheima bin]# ./redis-cli shutdown

启动界面:

前端启动的问题:

         一旦客户端关闭,则redis服务也停掉。

 

 

3.3.2  后端启动

 

第一步:需要将redis解压之后的源码包中的redis.conf文件拷贝到bin目录下

[root@itheima bin]# cp /root/redis-3.0.0/redis.conf ./

 

第二步:修改redis.conf文件,将daemonize改为yes

先要使用vim redis.conf

 

第三步:使用命令后端启动redis

[root@itheima bin]# ./redis-server redis.conf

第四步:查看是否启动成功

 

关闭后端启动的方式:

 

强制关闭:[root@itheima bin]# kill -9 5071

正常关闭:[root@itheima bin]# ./redis-cli shutdown

 

在项目中,建议使用正常关闭。

因为redis作为缓存来使用的话,将数据存储到内存中,如果使用正常关闭,则会将内存数据持久化到本地之后,再关闭。

 

如果是强制关闭,则不会进行持久化操作,可能会造成部分数据的丢失。

4       Redis客户端

4.1      Redis自带的客户端

 *****启动

启动客户端命令:[root@itheima bin]# ./redis-cli -h 127.0.0.1 -p 6379

-h:指定访问的redis服务器的ip地址

-p:指定访问的redis服务器的port端口

 

还可以写成:[root@itheima bin]# ./redis-cli

使用默认配置:默认的ip【127.0.0.1】,默认的port【6379】

*****关闭

Ctrl+c

127.0.0.1:6379> quit

5       Redis的主从复制

5.1      什么是主从复制

 

         持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:

 

说明:

1.  主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。

2.  主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。

3. 只有一个主redis,可以有多个从redis。

4. 主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求

5.  一个redis可以即是主又是从,如下图:

 

5.2      主从复制设置

5.2.1   主机配置

无需配置

5.2.2   从机配置

第一步:复制出一个从机

[root@itheima redis19]# cp bin/ bin2 –r

第二步:修改从机的redis.conf

语法:Slaveof masterip masterport

slaveof 192.168.242.137 6379  (配置是谁的从机)

第三步:修改从机的port地址为6380

在redis.conf中修改

第四步:清除从机中的持久化文件

[root@itheima bin2]# rm -rf appendonly.aof dump.rdb

第五步:启动从机

[root@itheima bin2]# ./redis-server redis.conf

第六步:启动6380的客户端

[root@itheima bin2]# ./redis-cli -p 6380 

注意:

         主机一旦发生增删改操作,那么从机会将数据同步到从机中

         从机不能执行写操作

127.0.0.1:6380> set s2 222

(error) READONLY You can't write against a read only slave.

6       Redis集群

6.1      redis-cluster架构图

 

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

示例如下:

 

 

6.2      redis-cluster投票:容错

(1)集群中所有master参与投票,如果半数以上master节点与其中一个master节点通信超过(cluster-node-timeout),认为该master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)? 

  • 如果集群任意master挂掉,且当前master没有slave,则集群进入fail状态。也可以理解成集群的[0-16383]slot映射不完全时进入fail状态。
  • 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态。

6.3      安装ruby

集群管理工具(redis-trib.rb)是使用ruby脚本语言编写的。

 

第一步:安装ruby

[root@itheima bin2]# yum install ruby

[root@itheima bin2]# yum install rubygems

 

第二步:将以下文件上传到linux系统

 

第三步:安装ruby和redis接口

[root@itheima ~]# gem install redis-3.0.0.gem

 

第四步:将redis-3.0.0包下src目录中的以下文件拷贝到redis19/redis-cluster/

 

[root@itheima src]# cd /usr/local/redis19/

[root@itheima redis19]# mkdir redis-cluster

[root@itheima redis19]# cd /root/redis-3.0.0/src/

[root@itheima src]# cp redis-trib.rb  /usr/local/redis19/redis-cluster

 

第五步:查看是否拷贝成功

6.4      搭建集群

搭建集群最少也得需要3台主机,如果每台主机再配置一台从机的话,则最少需要6台机器。

 

端口设计如下:7001-7006

 

第一步:复制出一个7001机器

[root@itheima redis19]# cp bin ./redis-cluster/7001 –r

 

第二步:如果存在持久化文件,则删除

[root@itheima 7001]# rm -rf appendonly.aof dump.rdb

 

第三步:设置集群参数

第四步:修改端口

第五步:复制出7002-7006机器

[root@itheima redis-cluster]# cp 7001/ 7002 -r

[root@itheima redis-cluster]# cp 7001/ 7003 -r

[root@itheima redis-cluster]# cp 7001/ 7004 -r

[root@itheima redis-cluster]# cp 7001/ 7005 -r

[root@itheima redis-cluster]# cp 7001/ 7006 –r

 

第六步:修改7002-7006机器的端口

 

第七步:启动7001-7006这六台机器

 

 

第八步:修改start-all.sh文件的权限

[root@itheima redis-cluster]# chmod u+x start-all.sh

 

[root@itheima redis-cluster]# ./start-all.sh

 

第九步:创建集群

 

posted @ 2017-11-10 22:30  一级退堂鼓表演艺术家  阅读(185)  评论(0编辑  收藏  举报