分布式系统架构——Redis缓存的安装和使用

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

一、Redis的单机版

1.1 安装步骤

  1. 安装gcc编译环境
    sudo apt-get install gcc
  2. 把redis上传到服务器
    可以使用SecureCRT上传
  3. 解压缩
    tar -zxvf redis-3.2.0.tar.gz
  4. make
    cd redis-3.2.0
    make
  5. 安装
    make install PREFIX=/home/muxiaocao/redis-3.2.0
    这时候在redis根目录下就会出现一个bin文件夹,里面就是编译好的一些可执行文件

1.2 启动redis

两种启动方式:

前端启动

`./redis-server`

后台启动

  1. 复制redis.conf到redis的bin目录下
    cd /home/muxiaocao/redis-3.2.0
    cp redis.conf bin
  2. 修改bin目录下的redis.conf中的daemonize yes和bing
    vim redis.conf
    bind 192.168.3.111
    注意:这里的bind是需要绑定自己的ip而不是访问这的ip。
    bind localhost 只能本机访问,局域网内计算机不能访问
    bind 局域网IP 只能局域网内IP的机器访问, 本地localhost都无法访问.
  3. 启动:./redis-server redis.conf
    ./redis-server redis.conf
  4. 查看进程:ps aux|grep redis
    这里写图片描述

1.3 命令行客户端

`redis-cli -p 端口 -h ip地址 链接集群时使用此参数`

默认端口是6379,ip默认是localhost
分布式系统架构——Redis缓存的安装和使用_第1张图片

1.4 Redis Desktop Manager客户端

Redis Desktop Manager是redis的图像界面

![这里写图片描述](https://img-blog.csdn.net/20160604223112307)

二、Redis集群

2.1 架构

![这里写图片描述](https://img-blog.csdn.net/20160605151323570) **架构细节:**
  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 会根据节点数量大致均等的将哈希槽映射到不同的节点

2.2 集群搭建

集群中应该至少有三个节点,每个节点有一备份节点。需要6台服务器。
所以搭建伪分布式,需要6个redis实例。

步骤1:

第一步:创建6个redis实例指定端口从7001到7006
这里写图片描述
第二步:修改redis.conf 打开Cluster-enable yes前面的注释。
这里写图片描述
这里写图片描述
第三步:需要一个ruby脚本。在redis源码文件夹下的src目录下。redis-trib.rb

第四步:把redis-trib.rb文件复制到到redis-cluster目录下。

第五步:执行ruby脚本之前,需要安装ruby环境:

1. sudo apt-get install ruby 2.2.2
    查看ruby版本:ruby -version
    如果小于2.2.2,则需要手动下载较高版本步骤如下:
    1. wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz
    2. tar -xvf ruby-2.2.2.tar.gz
    3. ./configure --prefix=/home/muxiaocao/redis/ruby-2.2.2
    4. make && make install
    5. gem install redis
2. sudo apt-get install gems
3. gem install rubygems-update
4. 安装redis-trib.rb运行依赖的ruby的包。sudo gem install redis-3.2.1.gem

第六步:启动所有的redis实例

1. 创建脚本vim start-all.sh写入:

分布式系统架构——Redis缓存的安装和使用_第2张图片
2. 赋予运行权限chmod +x start-all.sh
3. 执行./start-all

第七步:使用redis-trib.rb创建集群。
./redis-trib.rb create –replicas 1 192.168.3.111:7001 192.168.3.111:7002 192.168.3.111:7003 192.168.3.111:7004 192.168.3.111:7005 192.168.3.111:7006
分布式系统架构——Redis缓存的安装和使用_第3张图片
注意:如果出现以下情况,是需要重新安装redis
分布式系统架构——Redis缓存的安装和使用_第4张图片
成功结果:
这里写图片描述
在看可视化界面:
分布式系统架构——Redis缓存的安装和使用_第5张图片

如果想了解redis的更多命令,可点击这里

三、Redis的java客户端使用

Redis的java客户端需要使用Jedis,我们可以使用maven依赖:


<dependency>
    <groupId>redis.clientsgroupId>
    <artifactId>jedisartifactId>
    <version>${jedis.version}version>
dependency>

3.1 单机版

    // 单机版测试
    @Test
    public void testJedisSingle() throws Exception {
        Jedis jedis = new Jedis("192.168.3.111", 6379);
        jedis.set("test", "hello jedis");
        String result = jedis.get("test");
        System.out.println(result);
        jedis.close();
    }

3.2 连接池版

    // 使用连接池
    @Test
    public void testJedisPool() throws Exception {
        // 创建一个连接池对象
        // 在系统中应该是单例的
        JedisPool jedisPool = new JedisPool("192.168.3.111", 6379);
        Jedis jedis = jedisPool.getResource();
        String string = jedis.get("test");
        System.out.println(string);
        // 使用完jedis必须关闭
        jedis.close();
        // 当系统关闭时,关闭连接池
        jedisPool.close();
    }

3.3 集群版

    // 集群版测试
    @Test
    public void testJedisCluster() throws Exception {
        Set nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.3.111", 7001));
        nodes.add(new HostAndPort("192.168.3.111", 7002));
        nodes.add(new HostAndPort("192.168.3.111", 7003));
        nodes.add(new HostAndPort("192.168.3.111", 7004));
        nodes.add(new HostAndPort("192.168.3.111", 7005));
        nodes.add(new HostAndPort("192.168.3.111", 7006));
        // 在系统中是单例的
        JedisCluster jedisCluster = new JedisCluster(nodes);
        jedisCluster.set("name", "张三");
        jedisCluster.set("value", "1000");
        String name = jedisCluster.get("name");
        String value = jedisCluster.get("value");
        System.out.println(name + "," + value);

        // 在系统关闭时关闭
        jedisCluster.close();
    }

3.4 Spring结合版

第一步:定义接口

package com.taotao.rest.service;

/**
 * 

Description:Dubbo缓存服务提供者接口

*

JedisClient.java

*

个人主页:www.muxiaocao.cn/me

* @author 木小草 * @date: 2016年6月4日 下午8:15:07 * @version: 1.0 */
public interface JedisClientService { public String set(String key,String value); public String get(String key); public Long hset(String key,String item,String value); public String hget(String key,String item); public Long incr(String key); public Long decr(String key); // 设置有效时间 public Long expire(String key,int second); // 返回有效时间:-1:永久保存 -2:已经失效 大于0:有效时间(单位s) public Long ttl(String key); }

第二步:接口实现
单机版实现:
分布式系统架构——Redis缓存的安装和使用_第6张图片
集群版实现:
分布式系统架构——Redis缓存的安装和使用_第7张图片
第三步:配置文件

-- ======================Redis缓存=========================== -->

    -- 配置redis客户端单机版 -->
    id="jedisPool" class="redis.clients.jedis.JedisPool">
        name="host" value="192.168.3.111">
        name="port" value="6379">
    
    -- 配置redis客户端实现类 -->
    id="jedisClientService" class="com.taotao.rest.service.impl.JedisClientSingle"/>


    -- 配置redis客户端集群版 -->
    -- 
        
            <set>
                class="redis.clients.jedis.HostAndPort">
                    name="host" value="192.168.3.111">
                    name="port" value="7001">
                
                class="redis.clients.jedis.HostAndPort">
                    name="host" value="192.168.3.111">
                    name="port" value="7002">
                
                class="redis.clients.jedis.HostAndPort">
                    name="host" value="192.168.3.111">
                    name="port" value="7003">
                
                class="redis.clients.jedis.HostAndPort">
                    name="host" value="192.168.3.111">
                    name="port" value="7004">
                
                class="redis.clients.jedis.HostAndPort">
                    name="host" value="192.168.3.111">
                    name="port" value="7005">
                
                class="redis.clients.jedis.HostAndPort">
                    name="host" value="192.168.3.111">
                    name="port" value="7006">
                
            set>
        
    
    id="jedisClientService" class="com.taotao.rest.service.impl.JedisClientCluster"/> -->

另外:密码登录详解
Redis命令参考


注意:转载请标明,转自itboy-木小草。
尊重原创,尊重技术。

你可能感兴趣的:(java,架构设计)