Bootstrap

reids ruby集群

一、哪儿用了redis?为什么要用?

哪儿用了:app启动后的轮播广告
为什么用:mysql是硬盘,顶不住高并发;redis是内存;

二、什么是redis?

redis是c语言开发的高性能的k-v形式的数据库,数据存储在内存中,诞生于意大利

三、redis安装和启动

1、安装
安装c语言环境

yum install gcc-c++

上传并解压

cd /usr/upload
tar -zxvf redis-3.0.0.tar.gz

编译并安装

cd /usr/local/redis-3.0.0
make
make install PREFIX=/usr/local/redis

2.启动和关闭
拷贝并修改配置文件

cp /usr/upload/redis-3.0.7/redis.conf /usr/local/redis/bin
vim /usr/local/redis/bin/redis.conf
	daemonize yes #改为yes

启动

./redis-server redis.conf

关闭

./redis-cli shutdown
./redis-cli -h 127.0.0.1 -p 6379 shutdown #指定端口

查看状态

ps -ef | grep redis

四、redis的多数据库实例

1、redis实例中提供了下标是0-15的16个数据库,不能修改下标,可通过select切换
2、清空数据库的命令:
flushdb:清空当前数据库的数据
flushall:清空所有数据库的数据

五、持久化

1、RDB:默认(数据)

策略:
save 900 1 #修改1条数据,900秒持久化一次
save 300 10
save 60 10000

优点:不影响性能 缺点:不能保证数据的完整性

2、AOF:(命令)

策略:
# appendfsync always 服务器每写入一个命令,就调用一次 fsync 函数,将缓冲区里面的命令写入到硬盘。
appendfsync everysec #服务器每一秒调用一次 fsync 函数,将缓冲区里面的命令写入到硬盘。
# appendfsync no #服务器不主动调用 fsync 函数,由操作系统决定何时将缓冲区里面的命令写入到硬盘。

缺点:影响性能 优点:保证数据的完整性

六、主从复制

1、过程
a、从往主发送sync命令
b、主往从发送rdb文件
c、主往从发送写命令 2、配置步骤
主:无需配置
从 ,修改配置文件:slaveof 主ip 主port

实验:
1.往主写数据,观察从是否同步
2.关闭主,往从写数据(主死了从只能读)

七、redis的五种数据类型

1.String(字符串)

string 是 redis 最基本的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型的值最大能存储 512MB。

Hash(哈希)

Redis hash 是一个键值(key=>value)对集合
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

Set(集合)

Redis的Set是string类型的无序集合

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

                      赋值                                   取值                             删除                    特点
string              set k v                                 get k                           del k                    string
hash                hset k k-v                             hget k k                         hdel k k                 map
list             lpush/rpush k v...                      lrange k 0 -1                      lrem k 2 v               list
set              sadd k v...                             smembers k                         srem k v                 set
zset             zadd k 1 v...                  zrange k 0 -1 withscores                    zrem k v                 sort set

八、redis集群

1、redis集群是多少台?

投票容错超过半数:3台 高可用:3台

2、为什么集群中有一个节点挂了,则整个集群都挂类?

redis集群中有16384个槽分给了3个节点,存取数据时:crc16(key)%16384=[0~16383]

3、搭建步骤
安装ruby环境

#切换目录
cd /usr/upload

#安装ruby
yum install ruby
yum install rubygems
gem install redis-3.0.0.gem

#查看脚本
cd /usr/upload/redis-3.0.0/src
ll *.rb

拷贝6个节点,并启动

要拷贝干净的redis,持久化文件删除掉,dump.rdb和appendonly.aof

cd /usr/local/redis/bin
cd /usr/local/redis/bin
rm -f dump.rdb
rm -f appendonly.aof

拷贝6个节点

cd /usr/local
#创建文件夹放redis
mkdir redis-cluster
cp -r redis redis-cluster/redis-7001
#重复上面拷贝个命令,修改名称
...

目录结构
redis-cluster

依次修改redis配置文件,这里用的是7001-7006

vim /usr/local/redis-cluster/redis-7001/bin/redis.conf

#修改配置文件中的端口号
port 7001 
#集群打开
cluster-enable yes 

创建启动脚本

cd /usr/local/redis-cluster/
vim start-all.sh

#启动脚本内容编辑
cd /usr/local/redis-cluster/redis-7001/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7002/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7003/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7004/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7005/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7006/bin
./redis-server redis.conf

创建关闭脚本

vim shutdown-all.sh

#关闭脚本内容编辑
cd /usr/local/redis-cluster/redis-7001/bin/
./redis-cli -p 7001 shutdown
cd /usr/local/redis-cluster/redis-7002/bin/
./redis-cli -p 7002 shutdown
cd /usr/local/redis-cluster/redis-7003/bin/
./redis-cli -p 7003 shutdown
cd /usr/local/redis-cluster/redis-7004/bin/
./redis-cli -p 7004 shutdown
cd /usr/local/redis-cluster/redis-7005/bin/
./redis-cli -p 7005 shutdown
cd /usr/local/redis-cluster/redis-7006/bin/
./redis-cli -p 7006 shutdown

启动脚本

./start-all.sh

查看redis运行状态

ps -ef | grep redis

启动成功
redis-start

使用ruby脚本创建redis集群(记得修改ip地址)

#切换找到脚本所在目录
cd /usr/upload/redis-3.0.0/src
#运行命令启动集群
./redis-trib.rb create --replicas 1 192.168.226.205:7001 192.168.226.205:7002 192.168.226.205:7003 192.168.226.205:7004 192.168.226.205:7005  192.168.226.205:7006

测试
进去redis-7001

cd /usr/local/redis-cluster/redis-7001/bin/
./redis-server redis.conf
./redis-cli -c -p 7001

#查看集群详情

cluster nodes

在这里插入图片描述

执行关闭脚本

cd /usr/local/redis-cluster/
./shutdown-all.sh

九、测试

加入依赖

<!-- Spring Data Redis的启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

配置文件

spring:
  redis:
    cluster:
      nodes:
        - 192.168.226.205:7001
        - 192.168.226.205:7002
        - 192.168.226.205
;