Redis使用总结之与Memcached异同

Redis是什么?两句话可以做下概括:
1. 是一个完全开源免费的key-value内存数据库    
2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets

Redis不是什么?同样从两个方面来做下对比:    
1. 不是sql server、mySQL等关系型数据库,主要原因是:    
     . redis目前还只能作为小数据量存储(全部数据能够加载在内存中) ,海量数据存储方面并不是redis所擅长的领域    
     . 设计、实现方法很不一样.关系型数据库通过表来存储数据,通过SQL来查询数据。而Redis通上述五种数据结构来存储数据,通过命令 来查询数据    
2.   不是Memcached等缓存系统,主要原因有以下几个:    
     .网络IO模型方面:Memcached是多线程,分为监听线程、worker线程,引入锁,带来了性能损耗。Redis使用单线程的IO复用模型,将速度优势发挥到最大,也提供了较简单的计算功能    
     .内存管理方面:Memcached使用预分配的内存池的方式,带来一定程度的空间浪费 并且在内存仍然有很大空间时,新的数据也可能会被剔除,而Redis使用现场申请内存的方式来存储数据,不会剔除任何非临时数据 Redis更适合作为存储而不是cache    
     .数据的一致性方面:Memcached提供了cas命令来保证.而Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断    
     . 存储方式方面:Memcached只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能

一句话小结一下:Redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。

Redis有什么用?只有了解了它有哪些特性,我们在用的时候才能扬长避短,为我们所用:    
1. 速度快:使用标准C写,所有数据都在内存中完成,读写速度分别达到10万/20万    
2. 持久化:对数据的更新采用Copy-on-write技术,可以异步地保存到磁盘上,主要有两种策略,一是根据时间,更新次数的快照(save 300 10 )二是基于语句追加方式(Append-only file,aof)    
3. 自动操作:对不同数据类型的操作都是自动的,很安全    
4. 快速的主--从复制,官方提供了一个数据,Slave在21秒即完成了对Amazon网站10G key set的复制。    
5. Sharding技术: 很容易将数据分布到多个Redis实例中,数据库的扩展是个永恒的话题,在关系型数据库中,主要是以添加硬件、以分区为主要技术形式的纵向扩展解决了很多 的应用场景,但随着web2.0、移动互联网、云计算等应用的兴起,这种扩展模式已经不太适合了,所以近年来,像采用主从配置、数据库复制形式 的,Sharding这种技术把负载分布到多个特理节点上去的横向扩展方式用处越来越多。

这里对Redis数据库做下小结:    
1. 提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就可以了    
2. 提高了DB的可用性,只影响到需要访问的shard服务器上的数据的用户    
3. 提高了DB的可维护性,对系统的升级和配置可以按shard一个个来搞,对服务产生的影响较小    
4. 小的数据库存的查询压力小,查询更快,性能更好

写到这里,可能就会有人急不可待地想用它了,那怎么用呢?可以直接到官方文档,里面帮我们整理好了各个语言环境下的客户端,主要有Ruby、Python、 PHP、Perl、Lua、Java、C#....有几种语言,我也没见过,所以就不多说了,你懂的....

最后,把我使用过程中的一些 经验与教训,做个小结:    
1. 要进行Master-slave配置,出现服务故障时可以支持切换。    
2. 在master侧禁用数据持久化,只需在slave上配置数据持久化。    
3. 物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个情况就是灾难!    
4. 当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大    
5. 当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间.    
6. redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题

时间: 2024-10-16 05:41:03

Redis使用总结之与Memcached异同的相关文章

Redis工作系列之一 与 Memcached对比理解

     近期公司项目在使用Redis,这几年Redis很火,Redis也常常被当作Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis真的在功能.性能以及内存使用效率上都超越了Memcached吗? You should not care too much about performances. Redis is faster per core with small values, but memcached is able to u

将同时推出“高并发之Redis初级”“高并发之Redis高级”“高并发之Memcached实战”系列课程

将同时推出"高并发之Redis初级""高并发之Redis高级""高并发之Memcached实战"系列课程,敬请关注,谢谢! "高并发之Redis初级":http://edu.csdn.net/course/detail/482 "高并发之Redis高级":http://edu.csdn.net/course/detail/483 "高并发之Memcached实战": http://edu

Redis 缓存使用、与Memcached的差异

一.缓存的使用 同集成spring进行存取操作一致,只是加入key的失效时间而已. 1.创建一个cachedManager  封装存取方法 Java代码   @Repository public class CachedManager extends BaseDao{ public boolean setCached(String key,Object value,Long expire){ try{ super.redisTemplate.opsForValue().set(key, valu

Memcached Redis相关的干货

为了以后查阅方便,所以转了各位的博文,感谢各位原博主. http://www.searchtb.com/2011/05/redis-storage.html           redis内存存储结构分析 http://blog.csdn.net/tonysz126/article/details/8280696/        redis与memcached的区别 http://kenby.iteye.com/blog/1423989                              

Redis应用场景

原文地址:http://www.cnblogs.com/shanyou/archive/2012/09/04/2670972.html Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱. Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类

Redis应用场景(转)

(来源:http://www.cnblogs.com/shanyou/archive/2012/09/04/2670972.html) Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上

Redis演示及使用场景

概述 Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value(字典, Remote Dictionary Server,远程字典服务器)数据库. 客户端:http://redis.io/clients 命令:http://redis.io/commands     http://redisdoc.com .NET开发程序配置 ServiceStack.Common.dll ServiceStack.Interfaces.dll ServiceStack

Redis(转)

传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间. 2.Memcached与MySQL数据库数据一致性问题. 3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL

Redis_简单使用

可基于内存也可持久化的Key-Value(字典, Remote Dictionary Server,远程字典服务器)数据库. 客户端:http://redis.io/clients 命令:http://redis.io/commands     http://redisdoc.com .NET开发程序配置 ServiceStack.Common.dll ServiceStack.Interfaces.dll ServiceStack.Redis.dll ServiceStack.Text.dll