一、简介

  存储系统背景

    存储系统有三类:
    RDBMS
      oracle,dh2,postgresql,mysql,sql server
    NoSQL:
      KV NoSQL:redis,memcached
      列式Column Family NoSQL: HBase,每一行每一字段可以保留n份,也是按照字段存储
      文档Documentation NoSQL: MongoDB
      图式Graph NoSQL: Neo4j

    NewSQL
      aerospike,foundationDB,rethinkDB...

  1、什么是redis

    redis是一个开源的使用ANSI C 语言编写、支持网络、可基于内存即可持久化的日志型,key-value数据库(是一个key-value存储系统),支持多种语言的API

    它是一个高级key-value数据库,跟memcached类似,但是redis的数据可以持久化,并且支持数据类型更丰富,同时还支持服务端的计算集合的并、交、和补集等,支持多种排序功能。  

      

  2、特点:     

    常用来和memcache做比较,但redis是nosql,基于key-value(键值)的数据结构的存储,可以存储键值,字典,图表
    完全工作在内存中,数据保存在内存,性能不错,数据周期性备份到硬盘,(持久化)的单线程服务器
    可以通过lua脚本扩展
    支持sentinel主从架构高可用
    分布式  

 

  3、性能

    虽然是单线程,kv是一个单纯简单的存储cpu通常不会形成瓶颈的,官方测试50个并发请求10w次,写的速度是110000次/s,读的速度是81000次/s,读写大小为256bytes的字符串; 

  4、持久化persistence

    RDB: snapshot,二进制格式;按事先定制的策略,周期性地将数据保存至磁盘;数据文件默认为dump.rdb;
      客户端也可显式使用SAVA或BGSAVE命令启动快照保存机制;
      SAVE: 同步,在主线程中保存快照;此时会阻塞所有客户端请求;
      BGSAVE:异步,
    AOF:Append Only File
      记录每一次写操作至指定的文件尾部实现持久化;当redis重启时,可通过重新执行文件中的命令在内存重建数据库;
      BGREWRITEAOF:AOF文件重写;
      不会读取正在使用AOF文件,而通过将内存中的数据以命令的方式保存到临时文件中,完成之后替换原来的AOF文件;

  5、是一个数据结构服务器它支持的value类型有:

    String字符串, List链表, Hash哈希, Set集合, Sorted Set有序集合, Bitmap, HyperLoglog

    

    Strings:
      SET key value [EX #] [NX|XX]
      GET
      INCR
      DECR
      EXIST

    Lists:
      LPUSH
      RPUSH
      LPOP
      RPOP
      LINDEX
      LSET

    Sets:
      SADD
      SINTER
      SUNION
      SPOP
      SISMEMBER

    Sorted Sets:
      ZADD
      ZRANGE
      ZCARD
      ZRANK

    Hashes:
      HSET
      HSETNX
      HGET
      HKEYS
      HVALS
      HDEL

    Bitmaps, HyperLogLog

  6、守护进程

    监听端口为6379/tcp

  7、数据库对比

    常见数据库功能对比

名称 数据库类型 数据存储选项 操作类型 备注
redis 内存存储,nosql数据库 支持字符串、列表、集合、散列标、有序集合 增、删、修改、更新 支持分布式存储,主从同步及高可用,单线程
memcached 内存缓存数据库 键值之间得映射 增、删、修改、更新 支持多线程
mysql 典型关系数据库,RDBMS 数据库由多表组成,每张表包含多行 增、删、修改、更新 支持ACID性质
postgresql 典型关系数据库,RDBMS 数据库由多表组成,每张表包含多行 增、删、修改、更新 支持ACID性质
mongodb 硬盘存储,nosql数据库 数据库包含多个表 增、删、修改、更新 主从复制,分片,副本集、空间索引

  

 

  

  8、简述和memcached之间的对比

    redis不仅仅支持简单的kv类型数据,还支持list,set,hash等数据结构

    redis支持数据备份

    redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以在加载使用

    集群,memcache不支持集群,多台memcache 共处

  9、redis的master/slave复制:

      支持一个master多个slave

      slave可以介绍其他slave的链接来替代他链接master

      复制在master是非阻塞的,在slave是阻塞的

      复制被利用来提供扩展性,在slave端只提供查询功能及数据的冗余

     

  10、应用场景

    缓存(数据查询,短连接、新闻内容、商品内容等)

    分布式集群架构中session分离

    聊天室在线好友列表

    任务队列(秒杀、抢购、12306)

    应用排行

    网站访问统计

    数据统计

为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案

二、主从复制工作机制

  redis持久化解决了redis服务重启后能够将硬盘的持久化数据恢复到内存中,但当redis服务器硬盘坏掉就会导致数据丢失,为了避免这种单点故障就有了主从复制工作机制

  一主多从结构

  主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

  一个redis即可以是主也可以是从

三、多实例redis配置

  1、下载软件及安装源

    http://download.redis.io/releases/redis-5.0.4.tar.gz

    如果源码安装下载源码

    如果yum安装请配置源

      rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

  2、安装有两种安装方式

    1)、yum安装

      直接yum install redis

      systemctl enable redis

      systemctl start redis

Dependencies Resolved    #一些依赖

====================================================================================================================
Package Arch Version Repository Size
====================================================================================================================
Installing:
redis x86_64 3.2.-.el7 epel k
Installing for dependencies:
jemalloc x86_64 3.6.-.el7 epel k Transaction Summary
====================================================================================================================
Install Package (+ Dependent package)
Complete!
[root@web1 ~]# systemctl start redis
[root@web1 ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service. [root@web1 ~]# netstat -untlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 2570/redis-server 1
tcp 0.0.0.0: 0.0.0.0:* LISTEN /systemd
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx: master
tcp 192.168.122.1: 0.0.0.0:* LISTEN /dnsmasq
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /cupsd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp6 ::: :::* LISTEN /systemd
tcp6 ::: :::* LISTEN /nginx: master
tcp6 ::: :::* LISTEN /sshd
tcp6 ::: :::* LISTEN /cupsd
tcp6 ::: :::* LISTEN /master
udp 0.0.0.0: 0.0.0.0:* /avahi-daemon: r
udp 127.0.0.1: 0.0.0.0:* /chronyd
udp 0.0.0.0: 0.0.0.0:* /avahi-daemon: r
udp 192.168.122.1: 0.0.0.0:* /dnsmasq
udp 0.0.0.0: 0.0.0.0:* /dnsmasq
udp 0.0.0.0: 0.0.0.0:* /lightdm
udp6 ::: :::* /chronyd
udp6 ::: :::* /lightdm
[root@web1 ~]#

    2)、编译安装

      解压-->编译-->copy-->启动

     

   这次编译安装一个新版本

      mkdir /data

      cd /data

      #上传下载的包到此目录

        redis-5.0..tar.gz

      tar redis-5.0..tar.gz
      cd rredis-5.0.
      make

  3、编译安装及启动

    1)创建文件夹及拷贝关键文件

     mkdir /data/redis2

   cp redis.conf /data/redis2

   cp src/redis-server /data/redis2

   cd /data/redis2/       

    2)编辑配置文件

     因为有#号开的行可以先过滤掉

      sed -ri '/#|^$/d' redis.conf

     开始编辑配置文件,修改下面几项

       vim redis.conf   

port 6380      //监听端口
appendonly no  yes //日志开关,不是包报错的日志,是二进制,记录数据变化
pidfile /var/run/redis_6380.pid  //pid名字
logfile "/data/redis2/redis.log" //log日志
daemonize yes //后台启动   
dbfilename dump.rbd  //持久化数据文件     

    3)启动

      标红的就是一个yum安装的实例,一个编译安装的实例,这个就是多实例了

[root@web1 redis2]# ./redis-server ./redis.conf
[root@web1 redis2]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 2570/redis-server 1
tcp 0 0 192.168.216.51:6380 0.0.0.0:* LISTEN 15434/./redis-
serve
tcp 0.0.0.0: 0.0.0.0:* LISTEN /systemd
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx: master
tcp 192.168.122.1: 0.0.0.0:* LISTEN /dnsmasq
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /cupsd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp6 ::: :::* LISTEN /systemd
tcp6 ::: :::* LISTEN /nginx: master
tcp6 ::: :::* LISTEN /sshd
tcp6 ::: :::* LISTEN /cupsd
tcp6 ::: :::* LISTEN /master
udp 0.0.0.0: 0.0.0.0:* /avahi-daemon: r
udp 127.0.0.1: 0.0.0.0:* /chronyd
udp 0.0.0.0: 0.0.0.0:* /avahi-daemon: r
udp 192.168.122.1: 0.0.0.0:* /dnsmasq
udp 0.0.0.0: 0.0.0.0:* /dnsmasq
udp 0.0.0.0: 0.0.0.0:* /lightdm
udp6 ::: :::* /chronyd
udp6 ::: :::* /lightdm
[root@web1 redis2]#

    4)变量,赋值取值,正常关闭,非正常的关闭

[root@web1 redis2]# redis-cli -h 192.168.216.51 -p
192.168.216.51:>
192.168.216.51:>
192.168.216.51:>
192.168.216.51:> set home zxg //赋值
OK192.168.216.51:> get home    //取值
"zxg"
192.168.216.51:> get abc
(error) ERR wrong number of arguments for 'get' command
192.168.216.51:> set abc
OK
192.168.216.51:> get abc
""192.168.216.51:> KEYS *    //查看所有的key
) "abc"
) "home"
192.168.216.51:>
192.168.216.51:6380> SHUTDOWN  //正常关闭,非正常关闭就是kill了

   

    

四、主从配置

  1、配置从服务器

   redis主从配置非常简单,只需要把从服务器改一个配置即可

   vim redis.conf

slaveof 192.168.216.51 

  2、启动服务

[root@web2 ~]# systemctl start redis
[root@web2 ~]# systemctl enable redis

  3、查看主从状态测试结果

[root@web1 redis2]# redis-cli -h 192.168.216.51 -p
192.168.216.51:> info replication
# Replication
role:master
connected_slaves:
slave0:ip=192.168.216.52,port=,state=online,offset=,lag=
master_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:
192.168.216.51:>

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.216.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:253
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

注意1:从服务器只读

    

    master新建key test zxg

192.168.216.51:> set test zxg
OK
192.168.216.51:> get test
"zxg"
192.168.216.51:>

    slave查看有没有值

127.0.0.1:> get test
"zxg"
127.0.0.1:>

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10743476.html

 

redis原理及集群主从配置的更多相关文章

  1. Redis原理及集群相关知识

    读书笔记 <Redis开发与运维 > Redis使用场景 作为缓存层 减少对Mysql的压力 计数功能 比如使用原子命令incr 共享Session 设置过期时间 可以限制短信接口等调用 ...

  2. Redis(1.13)Redis cluster 分布式集群手动配置

    [1]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个redis实例,7001 7004 redis2是redis集群 ...

  3. Redis 3.0集群搭建/配置/FAQ

    ·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...

  4. redis sentinels哨兵集群环境配置

    # Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...

  5. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  6. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)

    摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...

  7. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  8. 进阶的Redis之哈希分片原理与集群实战

    前面介绍了<进阶的Redis之数据持久化RDB与AOF>和<进阶的Redis之Sentinel原理及实战>,这次来了解下Redis的集群功能,以及其中哈希分片原理. 集群分片模 ...

  9. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

随机推荐

  1. win7 激活码 秘钥

    019.06最新windows7旗舰版系统激活码: 目前市面上的win7旗舰版激活码大部分都已经过期或失效了,下面来分享一些最新的. win7旗舰版激活密钥: BG2KW-D62DF-P4HY6-6J ...

  2. Linux中进程的几种状态

    linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. Linux进程状态:R (TASK_RUNNING),可执行状态. 只有在该状 ...

  3. linux内核的0号进程是在哪里创建的?

    1. 0号进程即为idle进程或swapper进程,也就是空闲进程 2. 0号进程特点 idle是一个进程,其pid为0. 主处理器上的idle由原始进程(pid=0)演变而来.从处理器上的idle由 ...

  4. Docs-.NET-C#-指南-语言参考-预处理器指令:#endregion(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#endregion(C# 参考) 1.返回顶部 1. #endregion(C# 参考) 2015/07/20 #endreg ...

  5. flutter中的listview的使用

    import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends Statele ...

  6. Composer三步曲:安装、使用、发布

    转载地址:https://segmentfault.com/a/1190000011858458 原文是在我自己博客中,小伙伴也可以点阅读原文进行跳转查看,还有好听的背景音乐噢~ 在现代化的PHP开发 ...

  7. Spring cloud微服务安全实战-5-5实现授权码认证流程(1)

    目前为止已经完成了完整的用户逻辑 目前的问题是,用户在登陆的时候,用户名提交的是给前端服务器的.每个前端服务器的开发人员都可能接触到前端的用户名密码. 每一个客户端应用都要去处理登陆的逻辑,一单我的登 ...

  8. 全面系统Python3入门+进阶_汇总

    https://coding.imooc.com/class/136.html#Anchor 全面系统Python3入门+进阶-1-1 导学 全面系统Python3入门+进阶-1-2 Python的特 ...

  9. Internet Download Manager 快速下载插件,破解版

    下载下来直接双击绿化按钮即可. 软件链接 : https://pan.baidu.com/s/1agK3cLtjJzXcGEgsuv5mVQ  提取码: ckm7

  10. Flink统计当日的UV、PV

    Flink 统计当日的UV.PV 测试环境: flink 1.7.2 1.数据流程 a.模拟数据生成,发送到kafka(json 格式) b.flink 读取数据,count c. 输出数据到kafk ...