redis整理の走进redis世界

  声明:原文摘自http://weibo.com/u/2446082491,谢谢他的分享!

  在当前大型互联网应用以及提供云计算服务的时候,怎样保证系统在海量数据环境下的高性 能、高可靠性、高扩展性、高可用性、低成本成为迫切需要。

  按照分布式CAP理论(Consistency、 Availability、Tolerance to network Partitions【一致性、可用性、分区可溶性】这三 部分在任何系统架构实现时只可能同时满足其中二点,没法三者兼顾)来衡量,传统的关系数据库的 ACID(原子性、一致性、隔离性、持久性)只满足了 Consistency、Availability,因此在 Partition tolerance 上就很难做得好。 另外传统的关系数据库处理海量数据、分布式架构时候在 Performance、Scalability、 Availability 等方面也存在很大的局限性。而Key-Value Store更加注重对海量数据存取的性能、分布式、扩展性支持上,并不需要传统关系数据库的一些特征,例如:Schema、事务、完整 SQL 查询支持等等,因此在分布式环境下的性能相对于传统的关系数据库有较大的提升。

  Key-Value Store更加符合互联网特别是大型应用的潮流,原因有二:

  大规模的互联网应用

  对于 google,ebay 这样的互联网企业,每时每刻都有无数的用户在使用它们提供的互联网 服务,这些服务带来的就是大量的数据吞吐量,在同一时间,会并发的有成千上万的连接对 数据库进行操作。在这种情况下,单台服务器或者几台服务器远远不能满足这些数据处理的 需求,简单的升级服务器性能这样的 scale up 的方式也不行,所以唯一可以采用的办法就是 scale out 了。scale out 的方法有很多种,但大致分为两类:一类仍然采用 RDBMS,然后通过 对数据库的垂直和水平切割将整个数据库部署到一个集群上,这种方法的优点在于可以采用 RDBMS 这种熟悉的技术,但缺点在于它是针对特定应用的,就是说,由于应用的不同,切割的方法是不一样的。还有一类就是 google 所采用的方法,抛弃 RDBMS,采用key-value形式的存储,这样可以极大的增强系统的可扩展性(scalability),如果要处理的数据持续增大,多加机器就可以了。

  云存储

  如果说上一个问题还有可以替代的解决方案(切割数据库)的话,那么对于云存储来说,也 许 key-value 的 store 就是唯一的解决方案了。云存储简单点说就是构建一个大型的存储平台 给别人用,这也就意味着在这上面运行的应用其实是不可控的。如果其中某个客户的应用随 着用户的增长而不断增长时,云存储供应商是没有办法通过数据库的切割来达到 scale 的, 因为这个数据是客户的,供应商不了解这个数据自然就没法作出切割。在这种情况下, key-value 的 store 就是唯一的选择了,因为这种条件下的 scalability 必须是自动完成的,不 能有人工干预。这也是为什么几乎所有的现有的云存储都是 key-value 形式的,例如 Amazon 的 smipleDB,底层实现就是 key-value,还有 google 的 GoogleAppEngine,采用的是 BigTable 的存储形式。

  Key-Value Store 最大的特点就是它的可扩展性,这也就是它最大的优势。所谓的可扩展性。一方面,是指 Key-Value Store 可以支持极大的数据的存储, 它的分布式的架构决定了只要有更多的机器,就能够保证存储更多的数据。另一方面,是指 它可以支持数量很多的并发的查询。对于 RDBMS,一般几百个并发的查询就可以让它很吃 力了,而一个 Key-Value Store,可以很轻松的支持上千的并发查询。

  Key-Value Store有以下几大特征:

  1、Key-value store:一个 key-value 数据存储系统,只支持一些基本操作,如:SET(key, value) 和 GET(key) 等;

  2、分布式:多台机器(nodes)同时存储数据和状态,彼此交换消息来保持数据一致,可 视为一个完整的存储系统;

  3、数据一致:所有机器上的数据都是同步更新的、不用担心得到不一致的结果;

  4、冗余:所有机器(nodes)保存相同的数据,整个系统的存储能力取决于单台机器(node) 的能力;

  5、容错:如果有少数 nodes 出错,比如重启、当机、断网、网络丢包等各种 fault/fail 都 不影响整个系统的运行;

  6、高可靠性:容错、冗余等保证了数据库系统的可靠性。

  Redis

  Redis是一个key-value存储系统。和memcached类似,它支持存储的value类型更多,包括字符串、链表、集合和有序集合,这些数据类型都支持pop/push,add/remove及取交集并集差集及更丰富操作,而且这些操作都是原子性的。在此基础上,redis支持不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别是redis会周期性把更新的数据写入磁盘或者把修改操作写入到追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

  Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库,并提供多种语言的API。

  数据类型

  作为 Key-value 型数据库,Redis 也提供了键(Key)和键值(Value)的映射关系。但是,除 了常规的数值或字符串,Redis 的键值还可以是以下形式之一: ? Lists (列表) ? Sets (集合) ? Sorted sets (有序集合) ? Hashes (哈希表)

键值的数据类型决定了该键值支持的操作。Redis 支持诸如列表、集合或有序集合的交集、 并集、查集等高级原子操作;同时,如果键值的类型是普通数字,Redis 则提供自增等原子 操作。

  持久化

  通常,Redis 将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据 持久化:使用截图的方式,将内存中的数据不断写入磁盘;或使用类似 MySQL 的日志方式, 记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

  主从同步

  Redis 支持将数据同步到多台从库上,这种特性对提高读取性能非常有益。

时间: 2024-10-12 04:22:52

redis整理の走进redis世界的相关文章

《吐血整理》Redis 性能优化的 13 条军规!史上最全

Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行. 本文我们将使用以下手段,来提升 Redis 的运行速度: 缩短键值对的存储长度: 使用?lazy free(延迟删除)特性: 设置键值的过期时间: 禁用长耗时的查询命

redis演练(9) redis Cluster 集群管理&failover情况

<redis演练(8) redis Cluster 集群环境安装>,简单阐述了如何安装redis集群环境. 集群环境,主要包括2部分. 1.配置每个节点的配置信息(redis.conf),尤其开启cluster 2.创建集群redis-trib.rb创建集群. 过程非常简单,但非常繁琐,尤其配置各个集群节点的配置信息,如果有一定数量,工作量也不小. 没关系,redis提供了一款cluster工具,能快速构造集群环境.本章的主要内容是介绍redis提供的集群工具. 1.使用create-clus

redis演练(5) redis持久化

何谓持久化,就是媳妇让你,持久一些. 说白了持久化:就是将内存中的数据保存到磁盘上的过程(数据库也算磁盘的特殊表现),以保证宕机或断电后,可以继续访问.java中常见的持久化框架,如Hibernate,ibatis,jdbc都是持久化实现方式的一种,当然普通文件保存功能也算. 拿memcached来说,memcached保存的信息,没有进行持久化,所以只能存活一个进程生命期,下次重新启动,数据全部丢失.这算memcached的一个缺点吧.redis提供了持久化支持,而且提供了2种持久化方案. <

Redis学习-4-2 Redis持久化

1.持久化: 数据保存到一个不会丢失的地方就是持久化,可认为是永久存储的: 2.Redis持久化: Redis的数据存储在内存中,是不安全的,所以Redis有自己的持久化方案,将内存数据定期保存到磁盘文件中,当Redis崩溃了或者计算机意外关机了,重启Redis服务的时候,将磁盘中文件恢复到内存中来: 3.Redis持久化方案: 1.RDB: Redis Data Base,就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存. RDB保存了在某个时间点的数据集

《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学.我们一起巩固.突击面试官常问的一些面试题,加油!! <[面试突击]— Redis篇>--Redis数据类型?适用于哪些场景? <[面试突击]— Redis篇>--Redis的线程模型了解吗?为啥单线程效率还这么

redis演练(7) redis Sentinel实现故障转移

书接上文<redis演练(6) redis主从模式搭建>. <redis演练(6) redis主从模式搭建>中仅仅配置了redis主从环境.分别配置了2个主从结构. 分别是1.有向无环,2星型模型.配置起来非常简单.但是,遗留了一个尾巴,没有阐述.如果master宕掉了怎么办?redis如何实现fail-over故障转移?本文,就重点说一下这块.主要内容 手动实现fail-over效果 sentinel实现自动fail-over效果 手动实现fail-over效果 #有向无环模型(

redis演练(6) redis复制(主备模式)

redis是一款面向分布式的Nosql产品,天生对主备模式有很好的支持,而且配置一套完整的主备模式,非常简单.针对redis,主备模式配置非常简单,但线上意义重大. 主要内容 1.CAP理论 2.简单redis的复制原理 3.redis replaction相关配置参数解析 4.配置星型模型主备模式 5.配置有向无欢模型主备模式 1.研磨redis的复制与集群概念 redis的复制与集群,刚开始我把两者闹了个误会,在不断深入学习过程中及时改正了. 简单区分一下. redis复制:可以理解为把re

Redis学习一Redis的介绍与安装部署

NoSql 介绍 NoSql 是key-value形式存储,和传统的数据库不一样,不一定遵循传统数据库的一些基本要求,比如遵循SQL标准(insert\update\delete\select).ACID属性(原子性 一致性 隔离性 持久性).表结构等等,这些数据库有具有以下特点:非关系型的.分布式的.开源的.水平可扩展的. redis 的介绍 redis 是一个开源的,先进的key-value存储.它通常被称为数据结构服务器,因为键可以包含字符串(string).哈希(hash).链表(lis

[Redis]windows下redis安装

官方的下载地址是: http://redis.io/download 在win64一栏中可以看到redis原本是没有windows版本的,windows版本是Microsoft Open Tech团队开的 给出了一个github的链接地址: https://github.com/MSOpenTech/redis 下载: 在https://github.com/MSOpenTech/redis  页面的右下角有  Download Zip的字样,点击之后就可以下载源码的zip包了. 然后就是解压: