redis原理及集群主从配置

一、简介存储系统背景存储系统有三类:RDBMSoracle,dh2,postgresql,mysql,sqlserverNoSQL:KVNoSQL:redis,memcached列式ColumnFamilyNoSQL:HBase,每一行每一字段可以保留n份,也是按照字段存储文档DocumentationNoSQL:MongoDB图式GraphNoSQL:Neo4jNewSQLaerospike,f...

redis原理及集群主从配置

一、简介

  存储系统背景

    存储系统有三类:
    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  ArchVersionRepository  Size====================================================================================================================Installing: redis x86_64 3.2.12-2.el7 epel 544 kInstalling for dependencies: jemalloc x86_64 3.6.0-1.el7  epel 105 kTransaction Summary====================================================================================================================Install  1 Package ( 1 Dependent package)




Complete![root@web1 ~]# systemctl start redis[root@web1 ~]# systemctl enable redisCreated symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.[root@web1 ~]# netstat -untlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address  Foreign AddressState PID/Program name tcp  00 127.0.0.1:6379 0.0.0.0:*LISTEN2570/redis-server 1 tcp  00 0.0.0.0:111 0.0.0.0:*LISTEN1/systemd  tcp  00 0.0.0.0:80  0.0.0.0:*LISTEN2050/nginx: master  tcp  00 192.168.122.1:53  0.0.0.0:*LISTEN2176/dnsmasq  tcp  00 0.0.0.0:22  0.0.0.0:*LISTEN875/sshdtcp  00 127.0.0.1:631  0.0.0.0:*LISTEN879/cupsd  tcp  00 127.0.0.1:250.0.0.0:*LISTEN2035/mastertcp6 00 :::111:::*  LISTEN1/systemd  tcp6 00 :::80 :::*  LISTEN2050/nginx: master  tcp6 00 :::22 :::*  LISTEN875/sshdtcp6 00 ::1:631  :::*  LISTEN  
源文地址:https://www.guoxiongfei.cn/cntech/19233.html