大数据_Redis

Windows
The Redis project does not officially support Windows. 
However, the Microsoft Open Tech group develops and maintains this Windows port targeting Win64.

一、Redis内存数据库
    1、Redis前身:MemCached
    2、和MemCached的区别:(*)支持持久化
                          (*)丰富的数据类型
    3、Redis的特点
        (*)基于内存
        (*)持久化: RDB、AOF
        (*)消息机制:支持String,只支持Topic的消息(广播)
        (*)丰富的数据类型
        (*)支持简单的事务
        (*)支持主从复制
        (*)HA(哨兵): 对版本有要求

二、Redis的安装和配置: 需要gcc的编译器
        tar -zxvf redis-3.0.5.tar.gz
        make
        make PREFIX=/root/training/redis install 

    (*)Redis的相关命令
        redis-benchmark   提供的一个压力测试工具,模拟:10万操作
        redis-check-aof   检查AOF日志文件
        redis-check-dump  检查RDB快照文件
        redis-cli         命令行
        redis-sentinel    哨兵(Redis的HA) -----> 配置文件:sentinel.conf
        redis-server      服务器

    (*)核心的配置文件: redis.conf
            42 daemonize yes
            50 port 6379

    (*)启动: bin/redis-server conf/redis.conf

三、Redis的操作:基于key-value形式   -----> 不作为重点
    1、命令行:  redis-cli
    2、JAVA API

四、Redis的事务: 不是真正的事务
    1、复习:事务(关系型数据库)
             Oracle数据库中,事务的本质是什么? -----> 将事务操作(DML)写入日志
             举例: insert
                    insert
                    update
                    commit

    2、Redis的事务: 不是真正的事务
       Redis的事务的本质:将一组操作放入队列中,批量执行

    3、对比Oracle和Redis的事务
                     Oracle              Redis
        开启事务:   自动开启            multi
        操作:        DML                Redis命令
        提交:        commit,隐式提交     exec
        回滚:       rollback,隐式回滚   discard

    4、举例:银行转账
          set tom 1000
          set mike 1000
          multi
          decrby tom 100
          incrby mike 100
          exec

    5、Redis的锁机制 -----> 核心:当事务提交的时候,如果监控的值,发生变化,则提交失败
                            命令:watch

        举例:买票
          set ticket 1
          set tom 1000

          用户一:tom
          multi
          decr ticket
          decrby tom 100
          exec  -------> 提交的时候,慢了一点

            1) (integer) -1   ====> 票数不可能是-1
            2) (integer) 900


          用户二:在tom提交前,已经把票买走了  
                 decr ticket

五、Redis的消息机制
    1、消息系统类型:同步消息系统: 需要等待对方的回答
                     异步消息系统: 不需要等待对方的回答

    2、消息的类型:Queue:队列(点对点)
                   Topic:主题(广播)

        Redis和Kafka:只支持Topic
        JMS: Java Message Service ----> 都支持:Queue和Topic
             推荐:Weblogic

    3、Redis的消息相关的命令:
            publish: 发布消息 指定频道
            subscribe:订阅消息 指定频道
            psubscribe:订阅消息 使用通配符指定频道

            也可以使用JAVA API的方式:参考讲义:P18


六、Redis的持久化:  RDB(默认)、AOF

    结合:RDB和AOF
          类似:Oracle中,结合:完全备份和增量备份


    1、Redis和MemCached最大的区别
    2、作用:进行恢复

    3、RDB:快照的方式。每隔一段时间,把内存中的数据写到rdb文件中
        参数:
            规则:从下往上
            save 900 115分钟内,如果有1keyvalue发生了变化,就产生RDB文件
            save 300 105分钟内,如果有10keyvalue发生了变化,就产生RDB文件
            save 60 1000060秒内,如果有1w个keyvalue发生了变化,就产生RDB文件

            stop-writes-on-bgsave-error yes 如果在写RDB文件的时候产生了错误,停止新的数据写入
            rdbcompression yes 是否压缩(优点:节约了空间  缺点:恢复的效率低),可以设置为:no
            rdbchecksum yes  校验和来检查RDB文件是否是好的
            dbfilename dump.rdb  如果在集群下,一台主机上运行多个Redis的实例,建议区别rdb文件
            dir ./    保存的目录

        RDB的优缺点?
            (*)优点:恢复的速度快
                    补充:Oracle数据库中的备份:备份集
                                                镜像拷贝(image copy):相当于RDB
            (*)缺点:如果在两次RDB之间发生了掉电,数据肯定丢失

    4、AOF:append only file(记录日志)
        (*)重做日志,达到恢复的目的
        (*)默认:禁用
        (*)参数:
            appendonly no  ===> yes 开启AOF
            appendfilename "appendonly.aof"  如果在集群下,一台主机上运行多个Redis的实例,建议区别aof文件

            什么时候记录日志???
                538 # appendfsync always  每个操作都记录日志。最安全,性能最差
                539 appendfsync everysec  默认:每秒
                540 # appendfsync no      由操作系统决定

            no-appendfsync-on-rewrite no 重写发生的时候,是否写入aof的新日志

            什么时候执行AOF重写?
                580 auto-aof-rewrite-percentage 100
                581 auto-aof-rewrite-min-size 64mb

        (*)什么是AOF的重写:rewrite
                set i 0
                incr i
                incr i
                                ======> 问题: AOF文件太大了
                100次
                ****
                incr i

                最终:i = 100

        (*)演示:AOF的重写
                模拟:10万个操作
                bin/redis-benchmark -n 100000

这里写图片描述



七、Redis的集群:主从复制、任务分离的功能
    1、Redis的集群:
        (*)主从备份(复制):从主节点上写入数据,从从节点(s)上读取数据
        (*)读写分离:一般来说,都是读的压力大
        (*)任务分离

    2、两种架构:星型、线型
    3、搭建:星型
        主节点:关闭RDB和AOF
        从节点:开启RDB和AOF
                slaveof  主节点地址


        三台Redis:端口  6379  6380  6381
                         主     从12

        redis6379.conf
                147 #save 900 1
                148 #save 300 10
                149 #save 60 10000

                509 appendonly no

        redis6380.conf
                 50 port 6380
                182 dbfilename dump6380.rdb
                513 appendfilename "appendonly6380.aof"
                211 slaveof 192.168.157.11 6379

        redis6381.conf
                 50 port 6381
                182 dbfilename dump6381.rdb
                513 appendfilename "appendonly6381.aof"
                211 slaveof 192.168.157.11 6379             

        注意:默认:从节点只读
        (error) READONLY You can't write against a read only slave.
             修改参数:
             slave-read-only yes

             # masterauth <master-password> 主从节点密码

    4、主从节点通信的过程
            主节点                  从节点
                    <------------   发出同步请求
            将RDB同步 ----------->  
            将AOF同步 -----------> 重做日志

        一定注意:每次启动的时候,从节点的个数不能太多

八、Redis的HA:哨兵机制
    1、架构
    2、配置文件:cp ~/tools/redis-3.0.5/sentinel.conf .
    3、参数:参考讲义
    4、日志
        67730:X 15 Jan 21:43:16.929 # +monitor master mymaster 192.168.157.11 6379 quorum 1
        67730:X 15 Jan 21:43:16.933 * +slave slave 192.168.157.11:6380 192.168.157.11 6380 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:43:16.934 * +slave slave 192.168.157.11:6381 192.168.157.11 6381 @ mymaster 192.168.157.11 6379

    5、切换,日志
        67730:X 15 Jan 21:45:31.411 # +sdown master mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:31.412 # +odown master mymaster 192.168.157.11 6379 #quorum 1/1
        67730:X 15 Jan 21:45:31.412 # +new-epoch 1
        67730:X 15 Jan 21:45:31.412 # +try-failover master mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:31.419 # +vote-for-leader b88ea4ec14e3ed01a2b030455f0a343652658c83 1
        67730:X 15 Jan 21:45:31.419 # +elected-leader master mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:31.419 # +failover-state-select-slave master mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:31.482 # +selected-slave slave 192.168.157.11:6381 192.168.157.11 6381 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:31.482 * +failover-state-send-slaveof-noone slave 192.168.157.11:6381 192.168.157.11 6381 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:31.535 * +failover-state-wait-promotion slave 192.168.157.11:6381 192.168.157.11 6381 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:32.470 # +promoted-slave slave 192.168.157.11:6381 192.168.157.11 6381 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:32.470 # +failover-state-reconf-slaves master mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:32.578 * +slave-reconf-sent slave 192.168.157.11:6380 192.168.157.11 6380 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:33.515 * +slave-reconf-inprog slave 192.168.157.11:6380 192.168.157.11 6380 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:33.515 * +slave-reconf-done slave 192.168.157.11:6380 192.168.157.11 6380 @ mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:33.571 # +failover-end master mymaster 192.168.157.11 6379
        67730:X 15 Jan 21:45:33.571 # +switch-master mymaster 192.168.157.11 6379 192.168.157.11 6381
        67730:X 15 Jan 21:45:33.571 * +slave slave 192.168.157.11:6380 192.168.157.11 6380 @ mymaster 192.168.157.11 6381
        67730:X 15 Jan 21:45:33.571 * +slave slave 192.168.157.11:6379 192.168.157.11 6379 @ mymaster 192.168.157.11 6381

这里写图片描述


九、Redis的分片

    1、回顾:集群有两大功能
            (1)Fail Over 失败迁移:HA -----> Redis 哨兵2)Load Balance 负载均衡 ------> Redis 分片

    2、nutcracker-0.3.0.tar.gz
        ./configure --prefix=/root/training/proxy
        make
        make install

        配置文件中,注意空格
        alpha:
          listen: 127.0.0.1:22121
          hash: fnv1a_64
          distribution: ketama
          auto_eject_hosts: true
          redis: true
          server_retry_timeout: 2000
          server_failure_limit: 1
          servers:
           - 192.168.157.11:6380:1
           - 192.168.157.11:6381:1

    3、检查配置文件是否正确
        sbin/nutcracker -t conf/nutcracker.yml

    4、启动代理服务器
        sbin/nutcracker -d -c conf/nutcracker.yml

这里写图片描述

package demo;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestRedis {

    @Test
    public void testTransaction(){
        //创建一个客户端
        Jedis jedis = new Jedis("192.168.157.11", 6379);

        //定义事务
        Transaction tc = null;
        try{
            //开启事务
            tc = jedis.multi();

            //转账
            tc.decrBy("tom", 100);
            tc.incrBy("mike",100);

            //提交事务
            tc.exec();
        }catch(Exception ex){
            if(tc != null){
                tc.discard();
            }
        }

        jedis.disconnect();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值