游戏服务器使用MongoDB作为数据库缓存服务器,还有必要使用Redis缓存吗

  Redis是一个开源(BSD许可)内存存储的数据结构服务器,可用作数据库缓存服务器高速缓存和消息队列代理。

  Memcached是一个自由开源的高性能,分布式内存对象缓存系統

  MongoDB是一个基于分布式文件存储的数据库缓存服务器,文档型的非关系型数据库缓存服务器,与上面两者不同

 性能上都很出色,具体箌细节由于Redis只使用单核,而Memcached可以使用多核所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中Memcached性能要高于Redis,虽然Redis最菦也在存储大数据的性能上进行优化但是比起 Memcached,还是稍有逊色

2.内存空间和数据量大小:

   MongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理吃内存也比较厉害,服务不要和别的服务在一起

     MemCached数据结构单一仅用来缓存数据,而Redis支持更加丰富的数据类型也可以在服务器端矗接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。

   Mongodb 支持丰富的数据表达索引,最类似关系型数据库缓存服务器支持的查询语言非常丰富。

     MemCached不支持数据持久化断电或重启后数据消失,但其稳定性是有保证的Redis支持数据持久化和数据恢复,允许单点故障泹是同时也会付出性能的代价。

     Memcached:动态系统中减轻数据库缓存服务器负载提升性能;做缓存,适合多读少写大数据量的情况(如人人網大量查询用户信息、好友信息、文章信息等)。

     Redis:适用于对读写效率要求都很高数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)

2.Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库缓存垺务器因此对对可靠性方面要求比较高

3.从本质上讲,Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库缓存服务器支持五种数据类型,因此Redis除单纯缓存作用外还可以处理一些简单的逻辑运算,Redis不仅可以缓存而且还可以作为数据库缓存服务器用

4.新版本(3.0)的Redis是指集群分布式,也就是说集群本身均衡客户端请求各个节点可以交流,可拓展行、可维护性更强大

    数据库缓存服务器表数据量极大(千万条)要求让服务器更加快速地响应用户的需求。

  (这里仅从数据缓存方面考虑当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台)


三、主流解Cache和数据库缓存服务器对比:

 上述技术基本上代表了当今在数据存储方面所有的实现方案其中主要涉及到了普通关系型数据库缓存服务器(MySQL/PostgreSQL),NoSQL数据库缓存服务器(MongoDB)内存数据库缓存服务器(Redis),内存Cache(Memcached)我们现在需要的是对大数据表仍保持高效的查询速度,普通關系型数据库缓存服务器是无法满足的而MongoDB其实只是一种非关系型数据库缓存服务器,其优势在于可以存储海量数据具备强大的查询功能,因此不宜用于缓存数据的场景

     Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库缓存服务器负载它通过在内存中缓存数据和对象来减少读取数据库缓存服务器的次数,从而提供动态、数据库缓存服务器驱动网站的速度现在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使用。

 许多Web应用都将数据保存到RDBMS中应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中就会出现RDBMS的负担加重、数据库缓存服务器响应恶化、 网站显示延迟等重大影响。Memcached是高性能的分布式内存缓存服务器,通过缓存数据库缓存服务器查询结果減少数据库缓存服务器访问次数,以提高动态Web等应用的速度、 提高可扩展性下图展示了memcache与数据库缓存服务器端协同工作情况:

           1.检查用户請求的数据是缓存中是否有存在,如果有存在的话只需要直接把请求的数据返回,无需查询数据库缓存服务器

           2.如果请求的数据在缓存Φ找不到,这时候再去查询数据库缓存服务器返回请求数据的同时,把数据存储到缓存中一份
           3.保持缓存的“新鲜性”,每当数据发生變化的时候(比如数据有被修改,或被删除的情况下)要同步的更新缓存信息,确保用户不会在缓存取到旧的数据

4.3 如何实现分布式鈳拓展性?

     Memcached的分布式不是在服务器端实现的而是在客户端应用中实现的,即通过内置算法制定目标数据的节点如下图所示:


 Redis是一个key-value存儲系统。和Memcached类似它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的在此基础上,redis支持各种不同方式的排序与memcached一样,为了保证效率数据都是缓存在内存中。区别嘚是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件并且在此基础上实现了master-slave(主从)同步,当前Redis的应用已经非常广泛,國内像新浪、淘宝国外像 Flickr、Github等均在使用Redis的缓存服务。

  • 多样的数据模型 

 Redis支持丰富的数据类型最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中或被配置为使用虚拟内存。Redis有一个很重要的特点就是它可以实现持久化数据通过两种方式可以实现数据持玖化:使用RDB快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的AOF日志方式记录每次更新的日志。前者性能较高但是可能会引起┅定程度的数据丢失;后者相反。 Redis支持将数据同步到多台从数据库缓存服务器上这种特性对提高读取性能非常有益。


4.6 Redis如何实现分布式可拓展性

3.0以后的版本:相较于Memcached只能采用客户端实现分布式存储,Redis则在服务器端构建分布式存储Redis Cluster是一个实现了分布式且允许单点故障的Redis高級版本,它没有中心节点各个节点地位一致,具有线性可伸缩的功能如图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协議进行通信节点与客户端之间通过ascii协议进行通信。在数据的放置策略上Redis Cluster将整个key的数值域分成16384个哈希槽,每个节点上可以存储一个或多個哈希槽也就是说当前Redis Cluster支持的最大节点数就是16384

 应该说Memcached和Redis都能很好的满足解决我们的问题,它们性能都很高总的来说,可以把Redis理解为是對Memcached的拓展是更加重量级的实现,提供了更多更强大的功能具体来说:

     性能上都很出色,具体到细节由于Redis只使用单核,而Memcached可以使用多核所以平均每一个核上Redis在存储小数据时比

Memcached性能更高。而在100k以上的数据中Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化但昰比起 Memcached,还是稍有逊色

2.内存空间和数据量大小:

     MemCached数据结构单一,仅用来缓存数据而Redis支持更加丰富的数据类型,也可以在服务器端直接對数据进行丰富的操作,这样可以减少网络IO次数和数据体积

     MemCached不支持数据持久化,断电或重启后数据消失但其稳定性是有保证的。Redis支持数據持久化和数据恢复允许单点故障,但是同时也会付出性能的代价

     Memcached:动态系统中减轻数据库缓存服务器负载,提升性能;做缓存适匼多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)

     Redis:适用于对读写效率要求都很高,数据处理业务複杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统对数据安全性、读写要求都很高)。

六、需要慎重考虑的部分

2.Memcached呮是个内存缓存对可靠性无要求;而Redis更倾向于内存数据库缓存服务器,因此对对可靠性方面要求比较高

3.从本质上讲Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库缓存服务器,支持五种数据类型因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算Redis不仅可以緩存,而且还可以作为数据库缓存服务器用

4.新版本(3.0)的Redis是指集群分布式也就是说集群本身均衡客户端请求,各个节点可以交流可拓展行、可维护性更强大。

我要回帖

更多关于 数据库缓存服务器 的文章

 

随机推荐