最近系统学习下redis,做下总结,后续不断补充

1、redis常用命令

redis默认为16个数据库,类似数组下表从零开始,初始默认使用零号库,select命令切换数据库(数据库为0-15)

基本命令:

  • redis-server /usr..../redis.conf 启动redis服务,并指定配置文件
  • redis-cli 进了redis 客户端
  • pkill redis-server 关闭redis服务
  • redis-cli shutdown 关闭redis客户端
  • netstat -tunpl|grep 6379 查看redis 默认端口号6379占用情况
  • 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上
  • Redis索引都是从零开始
  • set设置key值,get获取key值,del删除,append增加,strlen长度
  • dbsize查看当前数据库的key的数量
  • 查看当前所有进程 keys *    
  • 过滤查看当前进程,例如只看首字母是k的,    keys k*
  • exists key的名字,判断某个key是否存在

2、Redis的复制(Master/Slave)

1、是什么
        行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,
自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
2、能干嘛
        读写分离
        容灾恢复
3、怎么玩
        配从(库)不配主(库)
        从库配置:slaveof 主库IP 主库端口
            每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
            info replication,查看当前角色
        修改配置文件细节操作
            拷贝多个redis.conf文件
            开启daemonize yes
            pid文件名字
            指定端口
            log文件名字
            dump.rdb名字
 4、常用主从复制3招

  • 一主二仆

                一个Master两个Slave
                日志查看
                    主机日志
                    备机日志
                     info replication

  •  薪火相传

                上一个Slave可以是下一个slave的Master,Slave同样可以接收其他
                slaves的连接和同步请求,那么该slave作为了链条中下一个的master,
                可以有效减轻master的写压力
                中途变更转向:会清除之前的数据,重新建立拷贝最新的
                slaveof 新主库IP 新主库端口

  • 反客为主

                SLAVEOF no one
                    使当前数据库停止与其他数据库的同步,转成主数据库

5、 复制原理
        slave启动成功连接到master后会发送一个sync命令
        Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
        在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
        全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
        增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
        但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

6、哨兵模式(sentinel)
        是什么
            反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
        怎么玩(使用步骤)
            调整结构,6379带着80、81
            自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错
            配置哨兵,填写内容
                 sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
                上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机
            启动哨兵
                redis-sentinel /myredis/sentinel.conf 
                上述目录依照各自的实际情况配置,可能目录不同
            原有的master挂了
            投票新选
3、常用集群方式

        Redis 官方提供了 redis-trib.rb 这个工具,使用原理,

       集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。