Cache对于减轻DB负载有非常关键的数据。以下对经常使用的memcached和redis做个总结,便于技术选型。


1 memcached 
(1) 支持的操作有限,支持经常使用的set,get,delete和过期删除等。
(2) 本身不支持分布式特性。分布式特性是通过client来提供,client须要维护多个server的信息。添加或者删除一个server节点,须要更新全部的client维护的信息。

(3) client支持一致性hash算法,不提供持久化。不提供Replaction机制。

(4) 性能高,操作简单。存储复杂的数据结构。须要自己提供序列化机制。

(5) 近期版本号不怎么更新,作为内存池的一种扩展。功能已经非常完备了。
2 redis
(1) 提供丰富的操作,支持丰富的数据结构。

(2) 本身不提供分布式特性,分布式特性可通过Redis cluster或者Twemproxy支持分布式操作。
(3) 提供持久化,提供主从同步机制,提供的机制都不是严格一致性的。会造成数据短暂的不一致性。
(4) 官方支持特别好。一直在提供和完好一些新特性,这个非常重要!!

这里简介下Twemproxy

1 这个是Twitter开源的Memcached和Redis的代理层,使用Twemproxy的集群方案例如以下:

2 Twemproxy的功能介绍

(1)前端使用 Twemproxy 做代理。后端的 Redis 数据能基本上依据 key 来进行比較均衡的分布。

(2)后端一台 Redis 挂掉后,Twemproxy 可以自己主动摘除。恢复后,Twemproxy 可以自己主动识别、恢复并又一次增加到 Redis 组中又一次使用。

(3)Redis 挂掉后,后端数据是否丢失根据 Redis 本身的策略配置,与 Twemproxy 基本无关。

(4)假设要新添加一台 Redis,Twemproxy 须要重新启动才干生效;而且数据不会自己主动又一次 Reblance。须要人工单独写脚本来实现。

(5)如同一时候部署多个 Twemproxy,配置文件一致(測试配置为distribution:ketama,modula),则能够从随意一个读取,都能够正确读取 key相应的值。

(6)多台 Twemproxy 配置一样。client分别连接多台 Twemproxy能够在一定条件下提高性能。依据 Server 数量。提高比例在 110-150%之间。

(7)如原来已经有 2 个节点 Redis。兴许有添加 2 个 Redis。则数据分布计算与原来的 Redis 分布无关,现有数据假设须要分布均匀的话,须要人工单独处理。

(8)假设 Twemproxy 的后端节点数量发生变化。Twemproxy 同样算法的前提下。原来的数据必须又一次处理分布,否则会存在找不到key值的情况

结合这边的业务特点,我认为能够使用Redis来提供Cache服务。
1  提供多个(大于1)Redis实例。且在不同机器上面。同一时候在多个机器上面都部署Twemproxy代理,规避Cache的单点故障。
2  开启Redis的Replaction机制,通过区分不同业务,来区分使用主Cache和从Cache,分担请求压力。

3  经确认,Redis也存在delete删除失败的情形,这个须要配合Cache过期时间,异步删除来完好。
4  使用Cache的同一时候。须要区分业务。敏感业务不做Cache,保证数据的严格一致性。 
5  Redis的持久化作用不大。能够考虑关闭。



Cache选型的一些思考的更多相关文章

  1. 平安银行在开源技术选型上的思考和实践 RocketMQ

    小结: 1. https://mp.weixin.qq.com/s/z_c5D8fvHaYvHSczm0nYFA 平安银行在开源技术选型上的思考和实践 平安银行·吴建峰 阿里巴巴中间件 3月7日 随着 ...

  2. ElasticStack系列之十五 & query cache 引起性能问题思考

    问题描述 一个线上集群,执行的 Query DSL 都是一样的,只是参数不同.统计数据显示 98% ~ 99% 的查询相应速度都很快,只需要 4 ~ 6ms,但是有 1% 左右的查询响应时间在 100 ...

  3. cache 访问频率的思考

    互联网的项目用户基数很大,有时候瞬间并发量非常大,这个时候对于数据访问来说是个灾难.为了应对这种场景,一般都会大量采用web服务器集群,缓存集群.采用集群后基本上就能解决大量并发的数据访问.当然这个时 ...

  4. EDW on Hadoop(Hadoop上的数据仓库)技术选型和实践思考

    在这篇文章中, 将讨论EDW on Hadoop 有哪些备选方案, 以及我个人的倾向性, 最后是建构方法.  欢迎转载, 但必须注明原贴(刘忠武,  http://www.cnblogs.com/ha ...

  5. buffer和cache有什么本质区别

    在free命令展示机器的内存消耗情况,会像这样展示

  6. cache介绍

    原帖地址: http://www.wowotech.net/memory_management/458.html?from=timeline 今天探究的主题是cache,我们围绕几个问题展开.为什么需 ...

  7. MQ系列2:消息中间件的技术选型

    1 背景 在高并发.高消息吞吐的互联网场景中,我们经常会使用消息队列(Message Queue)作为基础设施,在服务端架构中担当消息中转.消息削峰.事务异步处理 等职能. 对于那些不需要实时响应的的 ...

  8. CDN基础详解

    什么是 CDN?     Origin Server: 源站,也就是做 CDN 之前的客户真正的服务器;   User: 访问者,也就是要访问网站的网民;   Edge Server: CDN 的服务 ...

  9. S5PV210之Sate210-F DIY硬件,移植uboot,kernel,android 活动现在已经进入实施阶段吗,欢迎广大网友参与 !

    大家一起来diy 超低价四核的exynos4412或者Cortex A8S5pv210开源开发板 商业版Sate210已经完成了好久了.Sate4412 也已经出来.但是这两个接口非常全,主要是针对企 ...

随机推荐

  1. MyBatis 入门到精通(二) SQL语句映射XML文件

    MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射 ...

  2. MySQL数据库分布式事务XA优缺点与改进方案

    1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...

  3. java 读取TXT文件的方法

    java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...

  4. mysql DDL语句

    sql语言分为三个级别. 1.ddl 语句 ,数据定义语句,定义了数据库.表.索引等对象的定义.常用语句包含:create.drop.alter. 2.dml 语句 ,数据操纵语句,用于添加.删除.更 ...

  5. Tkinter教程之Event篇(2)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1823548 '''Tkinter教程之Event篇(2)''''''5.测试离开(Leave) ...

  6. ASP.NET MVC3 系列教程 - Razor视图引擎基础语法

    http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...

  7. ActiveX控件是什么?

    一.ActiveX的由来 ActiveX最初只不过是一个商标名称而已,它所涵盖的技术并不是各自孤立的,其中多数都与Internet和Web有一定的关联.更重要的是,ActiveX的整体技术是由Micr ...

  8. JQuery中对Select的option项的添加、删除、取值

    jQuery获取Select选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加事件, ...

  9. 【BJG吐槽汇】第一期 - 警惕亚马逊莫名自动扣款!千万不要进了它的坑!

    BJG吐槽汇:一直以来我都觉得其实生活中工作中会有各种各样奇葩的事或者奇葩的人可以去吐槽,那么BeJavaGod本身聊得就是关于JavaWeb技术,互联网技术,互联网产品等,那么今天起咱们开了这么一档 ...

  10. 前端响应式设计中@media等的相关运用

    现在做前端响应式网站特别,响应式成为现在前端设计一个热点,它成为热点的最主要的原因就是,移动端设备屏幕的种类多样,那么如何设置响应式屏幕. /*打印样式*/ @mediaprint{color:red ...