标签:family 之间 备份服务器 处理 实现 读取 动态 静默 分享图片
在数据层引入缓存,有以下几个好处:
根据业务场景,通常缓存有以下几种使用方式
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字符 value:1MB 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池
Memcached和 tomcat整合
参考: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)
标签:family 之间 备份服务器 处理 实现 读取 动态 静默 分享图片
原文地址:http://www.cnblogs.com/jack4738/p/7892334.html