码迷,mamicode.com
首页 > 系统相关 > 详细

大数据总结记录—Memcache

时间:2017-11-24 22:47:13      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:family   之间   备份服务器   处理   实现   读取   动态   静默   分享图片   

技术分享图片

 在数据层引入缓存,有以下几个好处:

  • 提升数据读取速度
  • 提升系统扩展能力,通过扩展缓存,提升系统承载能力
  • 降低存储成本,Cache+DB的方式可以承担原有需要多台DB才能承担的请求量,节省机器成本

    根据业务场景,通常缓存有以下几种使用方式

  • 懒汉式(读时触发):先查询DB里的数据, 然后把相关的数据写入Cache
  • 饥饿式(写时触发):写入DB后, 然后把相关的数据也写入Cache
  • 定期刷新:适合周期性的跑数据的任务,或者列表型的数据,而且不要求绝对实时性

技术分享图片

 

1 什么是分布式缓存

分布式缓存能够处理大量的动态数据,因此比较适合应用在Web 2.0时代中的社交网站等需要由用户生成内容的场景。从本地缓存扩展到分布式缓存后,关注重点从CPU、内存、缓存之间的数据传输速度差异也扩展到了业务系统、数据库、分布式缓存之间的数据传输速度差异。

2 分布式缓存的特点

 分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,可以进一步提高数据的读取速率。那么我们要读取某个数据的时候,应该选择哪个节点呢?如果挨个节点找,那效率就太低了。因此需要根据一致性哈希算法确定数据的存储和读取节点。以数据D,节点总个数N为基础,通过一致性哈希算法计算出数据D对应的哈希值(相当于门牌号),根据这个哈希值就可以找到对应的节点了。一致哈希算法的好处在于节点个数发生变化(减少或增加)时无需重新计算哈希值,保证数据储存或读取时可以正确、快速地找到对应的节点。

分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。

3  缓存用在哪

 分布式缓存已经在分布式领域、云计算领域得到了广泛的应用。

4 什么是Memcache

    基于内存的key-value分布式缓存服务器 

5  为什么使用Memcache分布式缓存,Memcache 的特点

  (1).在应对高并发的情况下分布式缓存可以减轻应用服务器对数据库访问的压力,通过访问分布式缓存可以减少与数据库的交互(链接 ,数据磁盘IO)

  (2).分布式缓存可以提供足够的链接、内存 

  (3). 基于key - value

  (4). 无需做数据持久化

  (5). 由多台机器组装起来的基于内存存储的集群。基于k-v存储数据结构。

6  redis数据库做缓存与memcache缓存的区别

Memcache:  1.Memcache内存的磁盘存储

      2.key-value   -- 类似Map

      3.数据具有时效期为30 day  Redis无要求)

      4.key最多存储255字符  value1MB  Object

Redis:String  :key-value  key 最大存储512MB 、List/set/Map/zset 最大支持2^32-1(约40多亿)

                        数据持久化 (RDB、AOF)、BGREWRITEAOF(aof文件重写)

7  Memcache的使用场景

  1.作为数据持久层缓存减少数据库交互 静默 Mybatis/Hibernate

  2.作为分布式环境下应用服务器的session池 

 

 Memcachedtomcat整合

 

参考:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

 

Tomcat和memcache整合形式分为两类:non-sticky(非黏着)、sticky(黏着)

non-sticky(非黏着):tomcat完全托管session(tomcat是无状态的),memcache充当session的存储主服务器。

           每一个memcache的主服务器都会有一个备份服务器,用于实时同步主服务器的数据(MSM 软件编码实现吗,该种实现方式和Redis session管理类似)。

Sticky(黏着):tomcat依然管理session。Memcahce从当备份节点,一般情况下,每一个备份节点还有一个故障转移节点。

Nginx和tomcat整合:非黏着(轮询、least_conn)、黏着(ip_hash、sticky)

最佳实践:

Tomcat和memcache non-sticky    |    Nginx和tomcat 非黏着(轮询、least_conn)

Tomcat和memcache  sticky         |    Nginx和tomcat 黏着(ip_hash、sticky)

Tomcat和memcache  sticky         |    Nginx和tomcat 非黏着(轮询、least_conn)//error

Tomcat和memcache non-sticky    |   Nginx和tomcat 黏着(ip_hash、sticky)//不佳

以tomcat7为例:

  1导入jars

  memcached-session-manager-${version}.jar     memcache管理session实现

  memcached-session-manager-tc[6|7|8]-${version}.jar   -- 适配tomcat版本

  spymemcached-${version}.jar              链接memcache驱动

 

  序列化包

 技术分享图片

    配置sticky方式

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    memcachedNodes="n1:192.168.31.128:11211,n2:192.168.31.128:11211"

    failoverNodes="n1"

    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

    />

       配置non-sticky

  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    memcachedNodes="n1:192.168.31.128:11211,n2:192.168.31.128:11212"

    sticky="false"

    sessionBackupAsync="false"

    lockingMode="uriPattern:/path1|/path2"

    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

为何不使用Redis存储回话session?

 默认的情况下,目前市面提供的RedisSessionManager不支持集群,无法实现海量数据存储。因此不适用于生产环境(可以考虑重写RedisSessionManager)。

资料
分布式缓存-Memacache(http://www.tutorialspoint.com/

缓存-为什么需要使用分布式缓存(http://blog.csdn.net/xcw931924821/article/details/52335495

 

大数据总结记录—Memcache

标签:family   之间   备份服务器   处理   实现   读取   动态   静默   分享图片   

原文地址:http://www.cnblogs.com/jack4738/p/7892334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!