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 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原理及集群主从配置的更多相关文章
- Redis原理及集群相关知识
读书笔记 <Redis开发与运维 > Redis使用场景 作为缓存层 减少对Mysql的压力 计数功能 比如使用原子命令incr 共享Session 设置过期时间 可以限制短信接口等调用 ...
- Redis(1.13)Redis cluster 分布式集群手动配置
[1]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个redis实例,7001 7004 redis2是redis集群 ...
- Redis 3.0集群搭建/配置/FAQ
·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...
- redis sentinels哨兵集群环境配置
# Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...
- redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用
目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...
- Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)
摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...
- 进阶的Redis之哈希分片原理与集群实战
前面介绍了<进阶的Redis之数据持久化RDB与AOF>和<进阶的Redis之Sentinel原理及实战>,这次来了解下Redis的集群功能,以及其中哈希分片原理. 集群分片模 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
随机推荐
- MyBatis 示例之存储过程
存储过程在数据库中比较常见,虽然大多数存储过程比较复杂,但是使用 MyBatis 调用时,用法都一样,因此我们这一节使用一个简单的存储过程来了解 MyBatis 中存储过程的使用方法. 基本准备 存储 ...
- zz SOLID (面向对象设计)
SOLID (面向对象设计) 维基百科,自由的百科全书 跳到导航 跳到搜索 在程序设计领域, SOLID(单一功能.开闭原则.里氏替换.接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期[1] ...
- [转]java生成 excel 并导出文件
原文:https://blog.csdn.net/xunwei0303/article/details/53213130 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta P ...
- PostgreSQL 数据库备份与恢复 pd_dump pg_restore
备份 PG 数据库生成的文件可以有两种,一种是 SQL 文件,一种是二进制文件,二进制文件只能使用 pg_restore 进行恢复. PostgreSQL 数据库操作简要说明 PostgreSQL数据 ...
- Error-JavaScript-SCRIPT5007: 无法获取未定义或 null 引用的属性“style”
ylbtech-Error-JavaScript-SCRIPT5007: 无法获取未定义或 null 引用的属性“style” 1.返回顶部 - document.getElementById(&qu ...
- [原][OE][官方例子]osgearth_features OE地球添加shp文件(特征标识)
OE所有官方样例 官方示例代码 /* -*-c++-*- */ /* osgEarth - Dynamic map generation toolkit for OpenSceneGraph * Co ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- LeetCode_342. Power of Four
342. Power of Four Easy Given an integer (signed 32 bits), write a function to check whether it is a ...
- 【JS新手教程】JS中的split()方法,拆分字符串
该方法具体如代码和图中的注释,直接在语句后面加注释了.格式:要拆分的字符串.split(拆分依据的字符)例如该文中的例子,拆分人名,电话,地址.该文中用了个文本框,文本框中需要输入的格式是:人名,电话 ...
- box-sizing:border-box 将元素的内边距和边框都设定在宽高内计算
http://www.w3school.com.cn/cssref/pr_box-sizing.asp box-sizing: content-box|border-box|inherit; 值 描述 ...