[NOSQL] Redis介绍
Redis概述
Redis是Salvatore Sanfilippo在2009年为其初创公司LLOOGG开发的,眼下仍是独立项目。但VMWare赞劣了项目(作者是其雇员)。它採用C语言实现。因此性能非常好。採用BSD许可证。使用键值存储。和Amazon Dynamo。Cassandra,Riak,Voldemort。Memcache相似。
支持丰富的数据类型。比方数组,链表。集合等,非常适合须要表达时间线的web服务,比如微博。
Redis支持的数据类型有:
- 字符串
- 链表
- 集合
- 有序集合
- 散列表
Redis的主从复制
Redis的高可用
眼下为止,Redis官方还在开发redis-cluster,可參考http://redis.io/topics/cluster-spec,中译版http://www.cnblogs.com/chang290/archive/2012/09/05/2672506.html
但我们能够使用keepalived+redis的方法实现高可用,例如以下所看到的:
1. redis的配置
主机 port 角色
redis0 6379 master
redis1 6379 slave
2. keepalived的配置
redis0和redis1使用一个虚拟ip
并使用例如以下脚本监控redis服务是否存活:
#!/bin/bash
/usr/local/bin/redis-cli -h 192.168.1.53 -p 6379 info > /dev/null
if [ $? -eq 0 ]; then
echo "redis OK"
exit 0
else
echo "no redis service found!"
/usr/local/bin/redis-server /path/to/redis.conf
# try to start it again
/usr/local/bin/redis-cli -h 192.168.11.53 -p 6380 info > /dev/null
if [ $?
-eq 0 ]; then
exit 0
else
# restart failed
killall keepalived
echo "error"
fi
fi
要实现redis的故障恢复,能够使用keepalived配置的notify_master, notify_backup这两个方法运行特有的脚本。实际上仅仅要在slave(即redis1)上有2个脚本,第一个用于在redis1接管虚拟ip之后,运行slaveof no one把自己变成master。第二个是在redis1交出虚拟ip之后,在redis0运行slaveof no one确保redis0恢复为主的状态。并对redis1运行slaveof redis0 6379開始又一次从master同步数据。假设自己已经是slave就不是必需同步了。
redis1上keepalived的配置方法例如以下,redis0仅仅要去掉notify_master, notify_backup两行就可以。
! Configuration File for keepalived
global_defs {
router_id redis1
}
vrrp_script Monitor_Redis {
script "/opt/redis_keepalive.sh"
interval 10
weight 2
}
vrrp_instance 360 {
state BUCKUP #(主机为MASTER。备用机为BACKUP)
interface eth0 #(HA监測网络接口)
virtual_router_id 110 #(主、备机的virtual_router_id必须同样)
mcast_src_ip 192.168.11.53 #(多播的源IP,设置为本机外网IP,与VIP同一网卡)此项可不设置
priority 70 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #(VRRP Multicast广播周期秒数)
authentication {
......
}
notify_master /opt/redis_2master.sh
notify_backup /opt/redis_2backup.sh
track_script {
Monitor_Redis #(调用nginx进程检測脚本)
}
virtual_ipaddress {
192.168.11.4 #(VRRP HA虚拟地址)
}
}
Redis的持久化
- 快照(snapshot)
- AOF(Append Only File)
Redis快照原理例如以下:
- Redis借助了fork命令的copy on write机制。
在生成快照时。将当前迚程fork出一个子进程,然后在子迚程中循环全部的数据。将数据写成为RDB文件。
- Redis原来的RDB文件不会坏掉,由于其写操作是在一个新迚程中迚行的,当生成一个新的。RDB文件时,Redis生成的子迚程会先将数据写到一个暂时文件里。然后通过原子性rename系统调用将暂时文件重命名为RDB文件。这样在仸何时候出现故障。Redis的RDB文件都总是可用的。
- 同一时候,Redis的RDB文件也是Redis主从同步内部实现中的一环。
- 我们能够非常明显的看到,RDB有它的不足,就是一旦数据库出现故障,那么我们的RDB文件里保存的数据并非全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。
在某些业务下,这是能够忍受的,我们也推荐这些业务使用RDB的方式进行持久化,由于开启RDB的代价并不高。
在写入新文件的过程中,全部的写操作日志还是会写到原来老的 AOF文件里,同一时候还会记录在内存缓冲区中。当重完操作完毕后。会将全部缓冲区中的日志一次性写入到暂时文件里。
然后调用原子性的rename命令用新的 AOF文件代替老的AOF文件。
[NOSQL] Redis介绍的更多相关文章
- NoSQL & Redis 介绍、缓存穿透 & 击穿 & 雪崩
1. NoSql 简介 2. Redis 简介 2.1 Redis 的起源 2.2 缓存过期 & 缓存淘汰 3. 缓存异常 1)缓存穿透 2)缓存击穿 3)缓存雪崩 4)总结 1. NoSQL ...
- NoSQL&&Redis介绍
再说Redis之前,想先说一下NoSQL.在最早的单机时代,随着数据的增加一台机器可能放不下了.同时索引占用的内存空间也会越来越大.对请求的读写操作影响很大.于是就在数据库之前增加了一层保护层 — 缓 ...
- Redis介绍以及安装(Linux)
Redis介绍以及安装(Linux) redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的 ...
- redis笔记总结之redis介绍
一.Redis介绍: redis的发展历史简单的理解为因为使用类似MySql这类关系型数据库不方便进而开发的开源的.轻量级的.非关系型的,直到现在一直不断完善的一款NoSql数据库.具体的介绍大家可以 ...
- Redis介绍以及安装(Linux)
Redis介绍以及安装(Linux) redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的 ...
- NoSQL -- Redis使用
NoSQl简介: ubuntun CTRL+alt+F1 图形切换到命令行 CTRL+alt+F7 命令行切换到图形界面 redis介绍 + 实践 Redis是什么? Redis 安装 edis是当 ...
- Redis介绍及部署在CentOS7上(一)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- redis 介绍
缓存数据库介绍 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是 ...
- 基于Python操作redis介绍
(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 毕业前的最后一个学期(2016.03),龙哥结婚了.可是总有些人喜欢嘲笑别人,调侃我.当时我就理直气壮的告诉他们,等龙哥孩子 ...
随机推荐
- Spark学习笔记——在集群上运行Spark
Spark运行的时候,采用的是主从结构,有一个节点负责中央协调, 调度各个分布式工作节点.这个中央协调节点被称为驱动器( Driver) 节点.与之对应的工作节点被称为执行器( executor) 节 ...
- C/C++判断传入的UTC时间是否在今天
在项目中经常会显示一个时间,如果这个时间在今日内就显示为时分秒,否则显示为年月日. 这里先给出一个正确的版本: #include <iostream> #include <time. ...
- [原]openstack-kilo--issue(二十二) 虚拟机的vnc console图像调用错误
[问题点] 在打开node compute 上vm的vnc console窗口时候发现vm1-compute1调用的是vm1-controller上的vnc图像 =================== ...
- 实用方法 - 解决360Doc文章不能复制的问题(实现不登录直接复制)
问题: 有时搜索文章的时候看到一些有用的文字,或者在网上搜索一些文献资料,找到需要的部分后,通常都可以使用 Ctrl + C,或者右键复制下来.但有些网站,比如:360个人图书馆(360Doc)会强制 ...
- 设计模式学习--Singleton
What Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点. Why Singletion是我比较熟悉的设计模式之一,在平常的开发过程中,也曾几次用到,它主要适用于如下场景: ...
- 设计模式学习--Abstarct Factory
What Abstarct Factory:提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体类. Why Abstarct Factory是创建型设计模式的一种,主要在创建对象时解耦,避免对 ...
- Python数据结构———队列
队列(Queue) 队列也是一系列有顺序的元素的集合,新元素的加入在队列的一端,叫做“队尾”(rear),已有元素的移除发生在队列的另一端,叫做“队首”(front),和栈不同的是,队列只能在队尾插入 ...
- DevOps平台的“精益创业”之路
本文内容节选自第六届全球软件案例研究峰会,时任中国移动通信集团浙江有限公司罗琼老师,申健老师分享的<DevOps平台的“精益创业”之路>实录,重点分享:DevOps产品研发过程,对外实施敏 ...
- MySQL获取分组后的TOP 1和TOP N记录-转
有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MySQL没有这些函数,没有直接的方法可以查出来,可通过 ...
- Eclipse项目小红叉
问题:导入自己本子上的项目后,出现小红叉,经检查jar包无误. 原因: 1. 之前电脑和现在电脑上的JDK 版本不一致or JRE 环境不一致,在项目右键菜单Build Path -->conf ...