Redis教程-这一篇就够了

/ Redis / 0 条评论 / 664浏览

Redis安装

  1. 先进入到/usr/local/src目录下,个人习惯把文件放在这里
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
$ tar -zxvf redis-4.0.11.tar.gz
$ cd redis-4.0.11
$ make
$ make install
  1. 执行上面的wget命令,下载redis,下载完成之后,redis的压缩包在/usr/local/src的目录下

  1. 解压

  1. 解压之后进入到redis的目录下面,使用make命令

这里出现错误,原因是没有安装gcc环境,我们先用yum install gcc 安装gcc环境,安装过程中需要输入两次‘y’来确定下载和安装

  1. 安装成功之后需要删除现在的redis目录,重新解压,进入Redis根目录,使用make
$ cd ..
$ rm -rf redis-4.0.11
$ tar -zxvf redis-4.0.11.tar.gz
$ cd redis-4.0.11
$ make

  1. 最后执行make install 命令,成功!


编辑redis配置文件

vim redis.conf 

注释IP绑定

关闭保护模式

开启后台启动

ok,编辑好之后:wq保存退出


Redis的启动与关闭命令

启动

  1. 命令redis-server

看到这个就启动成功了,那如何关闭呢?因为这种方式的启动在前台启动,不能输入其他命令,可以使用ctrl+c强制关闭,还有一种方法就是打开新的服务器连接窗口,ps -ef | grep redis 命令看一下,可以使用kill -9 pid命令关闭,也可以使用

然后打开第一个窗口

  1. 配置文件启动redis-server redis-conf

  1. 在redis服务启动的前提下,进入命令行输入模式输入命令redis-cli -p 6379(配置文件中的端口号)进入


Redis 入门案例

创建maven项目并在pom.xml添加依赖

<dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
</dependencies>

创建一个测试类

package com.hxxzt;

import org.junit.Test;
import redis.clients.jedis.Jedis;

public class RedisDemo {
    /**
     * 1.实例化jedis对象(IP:端口)
     * 2.实现redis取值赋值操作
     */
    @Test
    public void test01() {
        Jedis jedis = new Jedis("172.16.35.131", 6379);
        jedis.set("name", "hxxzt");
        System.out.println("获取redis数据:"+jedis.get("name"));

    }
}

运行结果

报错原因是因为服务器或者虚拟机的防火墙未关闭

关闭防火墙

关闭防火墙运行

运行成功


Redis分片搭建

Redis分片的作用

1.由于单台的redis内存的使用量是有限的,如果需要动态的扩容内存空间,需要搭建redis分片。
2.之前一台redis中保存了服务的全部数据,如果服务器宕机,则会影响整个的内存数据。

当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储

复制配置文件

# 在redis根目录下创建文件夹:shard

$ mkdir shard
$ cp redis.conf shard/redis-6379.conf
$ cp redis.conf shard/redis-6380.conf
$ cp redis.conf shard/redis-6381.conf

文件格式

修改端口(分别将6379修改成6380、6381)

$ vim redis-6380.conf
$ vim redis-6381.conf

启动

  1. 启动之前先关闭所有redis服务
$ redis-server redis-6379.conf
$ redis-server redis-6380.conf
$ redis-server redis-6381.conf

这是第一种启动方法,有点麻烦,如果有十台redis要启动的话,这样效率太慢,下面介绍一下脚本启动,先关闭redis

  1. 关闭
$ redis-cli -p 6379 shutdown
$ redis-cli -p 6380 shutdown
$ redis-cli -p 6381 shutdown

脚本启动与关闭

脚本启动
  1. 首先创建一个文件touch redis-start.sh

  1. 由于我们创建的文件没有执行的权利,所以修改文件权限chmod 755 redis-start.sh

  1. 然后vim打开文件,输入我们要执行的步骤,每一行就代表我们在实际执行的时候一条语句,全部编写完毕即可
cd /usr/local/src/redis-4.0.11/shard
redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf
  1. 启动脚本文件,启动命令:./redis-start.sh

  1. 查看进程是否启动成功

脚本关闭

按照以上启动的方法,先创建文件redis-stop.sh,并修改执行权限,然后vim文件,添加关闭内容

cd /usr/local/src/redis-4.0.11/shard
redis-cli -p 6379 shutdown
redis-cli -p 6380 shutdown
redis-cli -p 6381 shutdown
  1. 执行关闭脚本
  2. 查看进程是否关闭成功


Redis分片入门案例

创建一个新的测试类RedisDemo2

package com.hxxzt;

import org.junit.Test;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

import java.util.ArrayList;
import java.util.List;

public class RedisDemo2 {
    //测试redis分片 实现redis内存动态扩容
    @Test
    public void test02() {
        //定义redis池的配置文件
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(1000);
        poolConfig.setMaxIdle(200);
        poolConfig.setMinIdle(10);
        poolConfig.setTestOnBorrow(true); //链接前校验

        //定义jedis分片的节点信息
        List<JedisShardInfo> shards =
                new ArrayList<JedisShardInfo>();
        shards.add(new JedisShardInfo("172.16.35.131", 6379));
        shards.add(new JedisShardInfo("172.16.35.131", 6380));
        shards.add(new JedisShardInfo("172.16.35.131", 6381));

        ShardedJedisPool jedisPool =
                new ShardedJedisPool(poolConfig, shards);

        ShardedJedis shardedJedis = jedisPool.getResource();

        shardedJedis.set("name", "我是redis分片");

        System.out.println
                ("获取redis信息:"+shardedJedis.get("name"));

    }
}

运行结果


Redis哨兵

实现Redis主从搭建

说明:创建redis哨兵的文件夹sentinel.并且将之前的redis节点全部关闭.

在redis下创建sentinel目录
复制shard下面的配置文件到sentinel中
$ cp /usr/local/src/redis-4.0.11/shard/redis-6379.conf /usr/local/src/redis-4.0.11/sentinel/redis-6379.conf
$ cp /usr/local/src/redis-4.0.11/shard/redis-6380.conf /usr/local/src/redis-4.0.11/sentinel/redis-6380.conf
$ cp /usr/local/src/redis-4.0.11/shard/redis-6381.conf /usr/local/src/redis-4.0.11/sentinel/redis-6381.conf

把脚本文件复制过来修改一下
$ cp /usr/local/src/redis-4.0.11/shard/redis-start.sh /usr/local/src/redis-4.0.11/sentinel/redis-start.sh
$ cp /usr/local/src/redis-4.0.11/shard/redis-stop.sh /usr/local/src/redis-4.0.11/sentinel/redis-stop.sh

复制过来的文件权限不用修改可以执行

修改redis-start.sh

cd /usr/local/src/redis-4.0.11/sentinel
redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf

修改redis-stop.sh

cd /usr/local/src/redis-4.0.11/sentinel
redis-cli -p 6379 shutdown
redis-cli -p 6380 shutdown
redis-cli -p 6381 shutdown
启动脚本文件
检测节点状态

使用命令redis-cli -p 6379进入命令输入行,输入命令info replication

搭建主从

定义规则:6379当主机,6380/6381当从机
作用:可以实现数据的实时同步(备份)。
搭建命令: SLAVEOF 主机IP 主机端口
SLAVEOF 172.16.35.131 6379

  1. 在6380命令行和6381命令行中输入SLAVEOF命令

  1. 主从测试,检测主机是否能够识别丛机

当主库set a a时,检测从库是否有数据.表示主从挂载成功。

  1. 主从配置说明

说明:如果在命令提示行中执行slaveof命令,那么该操作只在内存中生效。当从机重启时,又会变为主机,主从搭建失败。 如果需要长久的保存主从的关系,应该修改配置文件。

哨兵工作原理

1.当搭建哨兵时,首先哨兵会通过心跳检测,检测主机是否正常。如果主机长时间没有响应,则断定主机宕机,那么哨兵会进行推选,从之前主机中的从机中选择一个新的主机。并且把其他的配置文件中的slaveof 配置文件修改为新的主机的IP和端口。
2.对于用户而言,需要通过IP:端口链接哨兵即可。用户不需要了解当前状态谁是主机谁是从机。都通过哨兵作为中转将请求实现。
3.对于哨兵而言,负责新节点的选择,一定要避免偶数个节点,否则会出现”脑裂问题”所以哨兵等选举机制一般都是奇数个。

哨兵搭建

复制哨兵配置文件
cp /usr/local/src/redis-4.0.11/sentinel.conf /usr/local/src/redis-4.0.11/sentinel/sentinel-6379.conf
修改哨兵端口号

关闭保护模式

哨兵监控主机的配置

sentinel monitor mymaster 127.0.0.1 6379 2
mymaster:代表主机变量名称.
IP 端口:代表主机的IP和端口

选举的票数(原则超过哨兵半数即可)

修改推选时间(当主机宕机10秒后,哨兵开始推选工作)

哨兵推选失败的超时时间(20秒)

哨兵启动

启动命令:redis-sentinel sentinel-6379.conf

哨兵测试:将redis主机关闭后,检测哨兵是否会选举新的主机。

  1. 打开一个新窗口,运行命令redis-cli -p 6379 shutdown

  2. 等待10秒以后,哨兵推选主机,第一个窗口显示6381为主机

3.下图即测试成功!


多个哨兵搭建

复制配置文件
$ cp /usr/local/src/redis-4.0.11/sentinel/sentinel-6379.conf /usr/local/src/redis-4.0.11/sentinel/sentinel-6380.conf
$ cp /usr/local/src/redis-4.0.11/sentinel/sentinel-6379.conf /usr/local/src/redis-4.0.11/sentinel/sentinel-6381.conf

修改哨兵端口号(修改6380、6381即可)

修改哨兵序列号(修改6380、6381,任意修改一位数字或者字母即可)

修改票数(修改6379、6380、6381,票数修改为2)

哨兵测试
  1. 打开三个连接服务器或者虚拟机窗口,分别开启哨兵6379,6380,6381
  2. 打开第四个窗口,开启6379分片,(因为6379刚才测试关闭,现在打开为从机,6381为主机)
  3. 关闭6381主机等待10秒测试是否推选新的主机

  1. 可以看到三个哨兵有新消息

  1. 推选了6379为新的主机

  1. 验证一下,6379是否为主机


欢迎指出不足之处,谢谢!

网站运行: