Redis数据库相关和集群配置

一、介绍

1.Redis是c语言开发的高性能的k-v形式的数据库,数据存储在内存,诞生于意大利
**2.使用前提:**数据量小、查询频繁。

二、那里用了redis?为什么用?

1.在哪里用Redis?
一般在app或网站中用于缓存首页内容,
2.为什么用redis?
mysql是存储在硬盘上,顶不住高并发情况。redis是存储在内存,速度快,适合用于高并发。

三、redis的安装与启动

1.安装C语言环境
命令: yum install gcc-c++
2.上传并解压
cd /usr/upload
tar -zxvf redis-3.0.7.tar.gz
3.编译并安装

cd /usr/local/redis-3.0.7
make
make install PREFIX=/usr/local/redis
4.启动和关闭
启动方式1:前端启动

直接运行bin/redis-server将以前端模式启动。
cd /usr/local/redis/bin
./redis-server
前端启动的关闭方式:ctrl+c
启动缺点:
占用命令窗口,窗口关闭则redis-server程序结束,不推荐使用此方法。

启动方式2: 后端启动,以守护线程方式运行

第一步:将redis源码包/usr/upload/redis-3.0.7中的redis.conf配置文件复制到/usr/local/redis/bin/下
命令1:cp /usr/upload/redis-3.0.7/redis.conf  /usr/local/redis/bin
第二步:修改/usr/local/redis/bin 下的redis.conf,将daemonize由no改为yes
命令:vim /usr/local/redis/bin/redis.conf   
           文件修改内容: daemonize yes
第三步:启动redis服务:
	cd /usr/local/redis/bin
	./redis-server redis.conf

判断是否开启,可以去看线程中有没有
命令:ps -ef | grep redis
关闭:
./redis-cli -h 127.0.0.1 -p 6379 shutdown
./redis-cli shutdown
启动客户端测试:
./redis-cli -h 127.0.0.1 -p 6379
./redis-cli

四、redis的基本命令

1.keys *:查看所有key
2.expire:对已存在的key键设置失效时间
	命令:expire  key键名  时间(秒)
  tl:查看key的失效时间
	命令:ttl key键名
3.incr和decr:自增和自减
4.exists:判断key值是否存在

五、redis的多数据库实例

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

六、持久化

方案有两种:RDB和AOF.

第一种方案:RDB(是Redis的默认开启方案)

文件保存的是:数据。

在redis.conf中:
​ 配置dir指定rdb快照文件的位置
​ 配置dbfilenam指定rdb快照文件的名称
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。

策略:
    save 900 1      #900秒内容如果超过1个key被修改,则发起快照保存
	save 300 10     #300秒内容如超过10个key被修改,则发起快照保存
	save 60 10000   #表示60秒内如果超过10000个key被修改,则发起快照保存
注:redis服务关闭时会自动保存,但突然断电等情况不会保存会丢失数据。

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

第二种方案:AOF
AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename appendonly.aof

配置文件手动开启,设置appendonly为yes
文件保存的是:命令。
策略:
		#appendfsync always   #每次有数据修改发生时都会写入AOF文件。
		appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
		#appendfsync no       #从不同步。高效但是数据不会被持久化。
优点:能够保证数据的完整性
缺点:降低了性能

七、主从复制

1、过程

    a、从往主发送sync命令
    b、主往从发送rdb文件
    c、主往从发送写命令

2、配置步骤

    主redis服务:无需配置
    修改从redis服务器上的redis.conf文件,添加 slaveof 主redis ip 主redis端口
    从redis服务:配置文件内设置  slaveof 主ip 主port

在这里插入图片描述
复制过程说明:

1、 slave 服务启动,slave 会建立和master 的连接,发送sync 命令。

2、master启动一个后台进程将数据库快照保存到RDB文件中

3、master 就发送RDB文件给slave

4、slave 将文件保存到磁盘上,然后加载到内存恢复

5、master把缓存的命令转发给slave

注意:主死了,从只能读

实验:
1.往主写数据,观察从是否同步
2.关闭主,往从写数据

八、redis的五种数据类型

五种类型赋值取值删值特点
Stringset k vget k vdel k vString
hashhset k k-vhget k khdel k kMap(外部value内再包含一个Map)
listlpush/rpush k v1 v2 v3……lrange k 0 -1lrem k 数量 vlist(有序,元素可重复)
setsadd k v1 v2 v3……smembers ksrem k vset集合(无序,元素唯一,不可重复)
zsetzadd k 分数 v1 分数 v2 ……zrange k 0 -1 [withscores]zrem k v可以看作能自定义排序的set (按分数从小到大排序)

九、redis数据库集群

1、redis-cluster架构图
在这里插入图片描述
细节:
(1)所有的redis节点彼此互联(PING-PONG机制),节点的fail(失效)是通过集群中超过半数的节点检测失效时才生效.
(2)存取数据时连接任一节点都可以,但集群中有一个节点fail整个集群都会fail

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

在这里插入图片描述

2.redis集群节点数

Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。
则Redis集群至少需要6台服务器。
搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006

3.集群搭建环境
①使用ruby脚本搭建集群,需要安装ruby。安装ruby环境

		cd /usr/upload
        yum install ruby  
        yum install rubygems
        gem install redis-3.0.0.gem  #安装ruby脚本
     
        cd /usr/upload/redis-3.0.0/src
        ll *.rb   #安装好ruby脚本,会出现查找到这个唯一文件。

②拷贝6个节点
a、注意:复制前必须删除dump.rdb和appendonly.aof持久化文件

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

b、拷贝6个节点
cd /usr/local
mkdir redis-cluster
cp -r redis redis-cluster/redis-7001
…共复制六份,端口不同

③修改六台redis的额配置文件
vim /usr/local/redis-cluster/redis-7001/bin/redis.conf 修改内容:
port 7001 #修改端口
cluster-enable yes #打开redis的集群设置,默认被注释掉了
… …(六台机器都要这样做)

④创建一个启动六台机器脚本,并启动
脚本内容:

			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

创建后文件权限不够无法执行,改权限:chmod 777 start-all.sh
并一键启动这六台: ./start-all.sh

⑤去redis源码目录使用ruby脚本创建redis集群

            cd /usr/upload/redis-3.0.0/src
            ./redis-trib.rb create --replicas 1 
            192.168.145.133:7001 192.168.145.133:7002 
            192.168.145.133:7003  192.168.145.133:7004 
             192.168.145.133:7005  192.168.145.133:7006
            注:命令包括每个节点的ip和端口,默认前面的机器为主节点

⑥测试,随便启动一台主节点

            ./redis-cli -c -p 7001   
            cluster info   #打印集群的信息
            cluster nodes  #列出集群当前已知的所有节点(node),以及这些节点的相关信息  

**注:**Redis可视化软件RedisPlus地址:https://gitee.com/MaxBill/RedisPlus?_from=gitee_search 页面有百度网盘下载。软件首页如下:

十、redis集群部分问题和解答

问题1:为什么redis集群挂一个节点,则整个集群都挂?

Redis集群内置16384个哈希槽,大致均等映射到不同的节点。挂一个后,哈希槽缺少,redis集群无法再工作。
存取到哈希槽的crc16算法:crc16(存取的key)%16384=[0~16383],得出的是存取的哈希槽点。

问题2:redis集群搭建最少要几台?为什么?

至少要6台。Redis集群节点彼此互联,判断某节点是否挂了,要通过集群超半数节点检测失效才能断定。所以至少要3个节点,又要保证高可用,需每个节点有一天备用机,所以至少要6台机器。

问题3:为什么redis集群连那一台都行?

ruby脚本启动配置命令就有每个节点的ip和端口,成功执行后,每个节点都会互联,之后连那一台都可以进入集群。

问题3:redis集群前要注意什么?

1.每个集群的redis,在集群前要删除持久化文件(RDB和AOF生成的持久化文件都要删除)。

2.打开每台redis配置文件的集群设置:
在redis.conf文件中:cluster-enable yes (默认被注释掉了)。
ip和端扣至少一个不同。

3.上述做完,再ruby集群命令前,要把每台节点的redis服务启动起来。之后的ruby集群命令才能在网络上找到每个节点,并给每个redis添加一个nodes.conf集群节点文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值