您的位置:首页 > 数据库 > Redis

为么使用Redis及其产品定位 —— Redis学习笔记(二)

2017-05-27 22:06 246 查看
原文连接:[b]http://www.infoq.com/cn/articles/tq-why-choose-redis[/b]传统MySQL+Memcached架构遇到的问题 实际上MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,但随着业务量和访问量增大,出现以下问题: 1、mysql需要不断的进行拆库拆表,Memcahed 也需要不断的扩容,扩容和维护工作占据大量开发时间 2、Memcached与Mysql数据库数据的一致性问题。 3、Memcached数据命中率低或down机,大量访问直接穿透到DB,Mysql无法支撑。 4、跨机房cache同步问题。
如何选择NoSQL NoSQL主要解决以下问题: 1、少量数据存储,高速读写访问。——Redis最主要的使用场景。通过数据全部in-momery的方式来保证高速访问。同时提供数据落地的功能。 2、海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。 3、完全无中心设计:节点之间通过gossip方式传递集群信息。数据保证最终一致性;中心化方案:通过类似一个分布式锁服务来保证一致性。数据先写入内存和redo log,然后定期compat归并到磁盘上。将随机写优化为顺序写,提高写入性能 4、直接存储为json格式数据,支持,auto-sharding等功能,如mongodb。
Redis适用场景,如何正确的使用 Redis最适合将所有数据in-memory 的场景。虽然redis也提供持久化功能,但实际更多是一个disk-backed的功能。 Redis与Memcached的选择?
Redis与Memcached的比较 1、网络IO模型 Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程, libevent   pipe     worker  stats、锁 Redis :单线程IO复用模型,自己封装一个简单的AeEvent事件处理框架。主要实现了epoll、kqueue和select。单线程可以将速度优势发挥到最大。 2、内存管理方面: Memcached:预分配内存池  slab    大小不同的chunk来管理内存。。Item根据大小选择适合的chunk存储。 Redis:现场申请内存的方式存储数据,很少使用free-list等方式来优化内存分配。一定程度上会存在内存碎片。 3、数据一致性问题 Memcached:cas命令,,,,保证多个并发访问操作同一份数据的一致性问题。 Redis 不能保证这点,但是Redis提供事务的功能,可以保证一串命令的原子性。中间不会被任何操作打断。 4、存储方式及其他方面。。 Memcached基本只支持简单的key-value存储,不支持枚举。不支持持久化和复制功能‘ Redis除了key-value之外。还支持list,set、sorted set、hash等众多数据结构,提供了keys。

关于Redis的一些周边功能

Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。

总结:

Redis使用最佳方式是全部数据in-memory。
Redis更多场景是作为Memcached的替代者来使用。
当需要除key/value之外的更多数据类型支持时,使用Redis更合适。
当存储的数据不能被剔除时,使用Redis更合适。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: