Redis

redis的数据类型

  1. String redis最常见的数据类型,表现形式为 key - value

  2. hash 最方便存储对象的一种形式, 在对该类数据类型操作时,通常都会指定filed。表现形式 key filed value。有点想 map < key, map< filed,value>>

  3. list 底层是连表形式,一个key中保存了多条String类型的数据,按照插入的时间进行排序,但可以指定数据插入到链表的头或者尾

  4. set 跟java中的set数据结构一样,底层也是hashtable实现的,无序且key不能重复

  5. zset 跟set是一致的,不同的是zset的每个元素都绑定了一个double类型的分数,来确定他们的排序,key不能重复但是分数能重复 有点像 key - value score ,。。。。。

单机版redis安装。

  • 安装之前需要先安装gcc
    下载redis解压包地址: wget http://download.redis.io/releases/redis-4.0.6.tar.gz

    • 解压安装包
             Linux命令:tar zxvf xxxx
    • 编译解压后文件
              Linux命令:定到解压包跟目录,make
    • 在src目录下执行 make install
    • 把src下面的 redis-server,redis-cli,redis-benchmark 和 redis.conf 4个文件移动到一个文件夹下
    • 根据实际要求,需要把redis以守护进程的模式进行运行
              修改配置文件redis.conf中的daemonize 改完yes
    • 启动redis服务器(在你移动目的的文件夹里操作)
             Linux命令:redis-server redis.conf
    • 虚拟件验证是否redis启动成功
             Linux命令:redis-cli
              set xxxx xxx
             OK
             get xxxx
             xxx
      到这里一个简单的redis就搭建好了,那么应该怎么我们本地程序应该怎么连接呢?

    本地连接redis

    • 在redis配置文件redis.conf中有一个 bind 127.0.0.1 这个配置,需要改成0.0.0.0(redis.conf的详解后续进行详细描述)
    • 查看redis的端口号,这个也是在redis.conf中进行配置
    • 通过Linux 命令 ifconfig查看
      inet addr就是你的虚拟件IP地址
    • 需要把虚拟机的防火墙关掉
              Linux命令:/etc/init.d/iptables stop 虚拟件重启又会开启
              chkconfig –level 35 iptables of 永久关闭

到这里你可以用redis客户端进行测试连接了。

集群版redis

注:集群的redis有两种实现方式。java代码层的实现,redis服务器层的实现。
       1.java代码层的实现: 在redis 3.0以前 jedis提供了一个redis集群实现对象ShardedJedis实现。他的底层实现是通过哈希一致性来实现的,当有个key操作时,会对key进行哈希操作来获取到操作redis实例的节点
       2.redis服务器层的实现:redis 3.0以后redis官方提供了一个实现集群的方式,他的实现原理是通过redis的哈希槽(2的14幂=16384)来分配给集群中的redis实例。当有key操作时会对key进行crc16 % 16384 来判断操作redis实例。

redis服务器层的集群搭建
    1.准备好2个以上的redis实例(为什么是两个后做说明)
    2.修改redis安装目录下的src下的redis.config中的端口号。以及打开Cluster-enable yes前面的注释。
    3.需要一个ruby脚本。在redis源码文件夹下的src目录下。redis-trib.rb,把redis-trib.rb文件复制
    到一个独立目录下(可以把redis-server,redis-cli,redis.config等多个文件放到一个独立的文件夹里)。
    4.执行ruby脚本需要安装ruby环境
        a.yum install ruby
        b.yum install rubygems
        c gem install redis-x.x.x.gem
    5.启动所以的redis实例,建议写一个脚本
        vim  xxxxx.sh
        写上你的执行命令
        ./xxxxx.sh

    ps -aux|grep redis 查看你是否启动了所有的redis实例

    6 执行redis-trib.rb 来创建集群
    番外篇:redis-trib.rb的api 说明:
    6.1 create 创建集群
        ./redis-trib.rb create --replicas 1(replicas表明需要几个slave,默认0个) 所有的redis实例,用空格隔开。
         创建流程:6.1.1.为每个redis实例创建ClusterNode对象,像连接集群上的节点,检查每个节点是否独立且db为null的节点。执行load_info方法导入节点信息
         6.1.2.检查Master节点的数量是否大于等于3个。只有大于3个节点才能组成集群
         6.1.3.计算每个master需要分配的slot数量,以及给master分配的slave。
        策略:a.尽可能保证master分配到更多的主机中,
             b.对master数量取余来保证尽可能的平均分配slot
             c.尽可能保证master和slave 分配在不同的主机上
             d.如果master和slave通过replicas参数分配后还有未分配的节点,再次循环master节点,只分配一个slave直到全部分配完成

        6.1.4.打印出集群的节点分配情况。输入yes后进行集群搭建。

    6.2 check 检查集群
        ruby redis-trib.rb check 集群中的一个节点


    6.3 info  查看集群的信息
        ruby redis-trib.rb info 集群中的一个节点

    6.4 fix   修复集群

    6.5 reshard 在线迁移slot
        reshard         host:port
            --from <arg>  原master  可以选择all 集群的全部master  done 暂时没测通
            --to <arg>    目标master的ID
            --slots <arg>  移动多少个slot
            --yes   
            --timeout <arg>  设置migrate命令的超时时间。
            --pipeline <arg> 定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。
        把slot从一个节点移动到另外一个节点
        例:$ruby redis-trib.rb reshard --from all --to 80b661ecca260c89e3d8ea9b98f77edaeef43dcd --slots 11 10.180.157.199:6379

    6.6 reblance 平衡集群节点slot数量
        rebalance       host:port  集群的一个节点
                        --weight <arg>  权重,默认为1
                        --threshold <arg>
                        --use-empty-masters  rebalance是否考虑没有节点的master,默认没有分配slot节点的master是不参与rebalance的,设置--use-empty-masters可以让没有分配slot的节点参与rebalance。
                        --timeout <arg> 设置migrate命令的超时时间。
                        --simulate 设置该参数,可以模拟rebalance操作,提示用户会迁移哪些slots,而不会真正执行迁移操作。
                        --pipeline <arg> 定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。
        例如 ruby redis-trib.rb rebalance --threshold 1 --weight b31e3a2e=5 --weight 60b8e3a1=5 --use-empty-masters  --simulate 10.180.157.199:6379


    6.7 add-node 添加新节点进集群

        add-node    new_host:new_port existing_host:existing_port
            --slave 设置该参数,则新节点以slave的角色加入集群
            --master-id <arg> 这个参数需要设置了--slave才能生效,--master-id用来指定新节点的master节点。如果不设置该参数,则会随机为节点选择master节点。

        例:ruby redis-trib.rb add-node --slave --master-id dcb792b3e85726f012e83061bf237072dfc45f99 10.180.157.202:6379 10.180.157.199:6379

    6.8 del-node  从集群中删除节点
        注意:只能删除没有分配slot的界定啊  
        ruby redis-trib.rb del-node  host:port node_id
        host:port:从该节点获取集群信息。
        node_id:需要删除的节点id


    6.9 set-timeout 设置集群节点间心跳机制的超时时间
        例:ruby redis-trib.rb set-timeout 10.180.157.199:6379 30000

    6.10 call 在集群所有节点执行命令
        ruby redis-trib.rb call 10.180.157.199:6379 get key

    参考资料:http://blog.csdn.net/huwei2003/article/details/50973967

Redis发散思维

  1. redis 如何对数据进行持久化的
    redis的持久化有两个方式 RDB 和 AOF
       RDB:在指定的时间间隔内生成数据集的时间点快照。
               优点:他会根据配置(多久一次,10秒100个操作等)生成一个数据集的快照。这个快照内容紧密,而且可以传输到其他的数据中心,同时可以最大化保证redis性能,父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。同时RDB恢复数据的速度比AOF快
               缺点:虽然保存数据的快照,但是每次保存数据越多,RDB的时间就越久,在这个时间redis挂掉,那么就会丢失好几分钟的数据。同时在进行RDB的时候,可能造成redis客户端对命令的处理效率的影响
       AOF: 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
               优点:每秒钟一次 fsync ,或者每次执行写入命令时 fsync 。 AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据。如果AOF的文件过大,redis还会对AOF文件进行重写。只有在重写完成后在回从老的文件切换到新的文件。AOF 文件是一个只进行追加操作的日志文件(append only log), 因此对 AOF 文件的写入不需要进行 seek , 即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机,等等), redis-check-aof 工具也可以轻易地修复这种问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值