[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),龙哥结婚了.可是总有些人喜欢嘲笑别人,调侃我.当时我就理直气壮的告诉他们,等龙哥孩子 ...
随机推荐
- Android图片处理(Matrix,ColorMatrix)
转发说明:原文链接http://www.cnblogs.com/leon19870907/articles/1978065.html 在编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老 ...
- [Artoolkit] Marker of nftSimple
重点看:markers.dat 的解析原理 1. int main(int argc, char** argv) { ]; const char *cparam_name = "Data2/ ...
- [Python] 05 - Load data from Files
文件读写 一.文件打开 传统方法 >>> f = open('data.txt', 'w') # Make a new file in output mode ('w' is wri ...
- windows cmd命令显示UTF8设置
windows cmd命令显示UTF8设置 在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容.在默认情况 ...
- POST 发送HTTP请求入参为:String url, Map<String, Object> propsMap
/** * 发送HTTP请求 * * @param url * @param propsMap * 发送的参数 */ public static String httpSend(String url, ...
- DownloadProvider源码解析——与Volley对比
1.AndroidHttpClient的创建 DownloadManager: 在DownloadThread的run方法里 public void run() { Process.setThread ...
- C++服务器下载文件的两种方式
#include <afxinet.h>#include "wininet.h" #pragma comment( lib, "wininet.lib&quo ...
- 好用的 Chrome 插件,提升你的学习工作效率
Google Chrome 应该是大部分人都用的一款浏览器,但却有很少人会注意到它丰富的扩展插件,擅于使用这些插件,能让自己的工作效率大大提高,今天趁着周末休息,就不谈技术伤大家的脑细胞了,给大家分享 ...
- Adobe Photoshop CS6简单的破解
由于网站的页面布局和素材准备等等需要用到Photoshop,所以下载了个 Photoshop CS6,写这份破解文档的大佬感觉写的很复杂,看了让人头疼,乱搞中突然发现一个方法可以很快的进行破解操作,我 ...
- 关于SQL SERVER中的FLOAT转换为VARCHAR
关于SQL SERVER中的FLOAT转换为VARCHAR 一个FLOAT型的字段,要转换为VARCHAR,可是小数点后面的都自动被删去了...后查得可以通过如下转换获得: SELECT CAST(C ...