memcached 缓存数据库应用实践

1.1 数据库对比

缓存: 将数据存储到内存中,只有当磁盘胜任不了的时候,才会启用缓存

      缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务。

数据库: mysql(关系型数据库,能够保证数据一致性,保证数据不丢失,当因为功能太多,导致性能不高) ===数据参考

缓存数据库:  memcache redis(非关系型数据库,性能极高,但不保证数据完整性) === 业务的数据提供者

             memcachedb 会将内存的数据写入到磁盘中

        redis 主要工作场所是内存中,但是定期备份内存数据到硬盘

1.1.1 数据库的选择

  数据存储,数据仓库选择mysql这种磁盘的数据库

  高并发,业务大的应用选择memcache这种内存数据库

1.1.2 数据库分类

  关系型数据库  mysql

  非关系型数据库(NOSQL) memcached redis MongoDB

1.2 memcached介绍

      Memcached是一款开源的、高性能的纯内存缓存服务软件。Mem是内存的意思,cache是缓存的意思,d是daemon的意思。

  memcache 是项目名称,也是一款软件,其架构是C/S架构

       memcached官网:http://memcached.org/

1.2.1 memcache优点

①   对于用户来讲,用户访问网站更快了,体验更好了。

②对网站来说,数据库压力降低了。只有当内存没有数据时才会去请求数据库。第一次写入的数据也会请求数据库。一般公司没有预热,只有当用户读取过数据库才会放到Memcached中。

②   提升了网站的并发访问,减少服务器数量。

1.3 Memcached在企业中使用场景

1.3.1 作为数据库的前端缓存应用

   当数据库(mysql)承受不了大并发的请求时,可以将数据缓存到内存中(缓存数据库),然后就可以解决

      作为数据库的前端缓存最大目的:减少数据库被大量访问的压力

1.3.2 作为集群后端的session会话保持

       session存储在文件,数据库,memcache,或内存等的服务端上,

     cookie  存放在客户端浏览器上。

     session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。

   session依赖cookie存在,请求客户端到达服务端后,服务端会随机生成一个字符串,作为该用户的标识,该字符串通过cookie返回给客户端,客户端浏览器会以该字符串为key放到session id里面,随机字符串的key里面可以先没有值。如果用户再次提交,请求信息中的用户名密码等用户信息保存在随机字符串的value中,请求到达服务端,用户名密码正确,随机字符串会被授权,提一个标记给到sessionid中的随机字符串的value中,证明该用户已经是登录状态,客户端再次带着该随机字符串访问服务端,服务端会知道该用户已经登录不需验证,直接返回请求的信息。

session和cookie区别

  1、cookie数据存放在用户的浏览器上,session数据存储在服务器上

  2、cookie在本地的浏览器中,可以被提取分析,安全性差。为了安全,登录账户等信息可以缓存在session中。

  3、session会在一定时间内保存在服务器上,访问量增大会给服务器带来压力,可以使用缓存工具,如memcache等

1.3.3 网站开发如何判断用户信息

  最开始的技术方法:服务器在你的浏览器中写一个cookies,这个cookies就包含了你的用户名及登录信息。因为cookies是存储在本地浏览器中,所以第三方工具很容易盗取cookies信息。

最开始:

      cookies   cookies名字:内容(用户名,登录信息)

改进后:

      本地浏览器存放:

      cookies   cookies名字:内容(session id 编号)

      服务器存放:

      session   session id:内容(用户名,登录信息)

主流使用场景:cookies + session

1.3.4 session共享的不同解决方案

     1、session文件提供NFS共享

     2、session文件提供rsync  scp共享

     3、将session的内容存放在数据库(mysql)中,所有的机器都可以通过ip:port读取

     4、将session的内容存放在缓存数据库中,所有的机器都可以通过ip:port读取

     好处:利用断电、重启丢失数据的特性。定时清理数据;提高并发

1.3.5 memcache原理优点

  启动Memcached吋,根据指定的内存大小参数,会被分配一个内存个间。当我们读取数据库的各类业务数据后,数据会同吋放入Memcached缓存中,,下一次用户请求同样的数据,程序直接去Memcached取数据返回给用户。

 优点:

  ①    对于用户来讲,用户访问网站更快了,体验更好了。#

  ②   对网站来说,数据库压力降低了。只有当内存没有数据时才会去请求数据库。第一次写入的数据 也会请求数据库。一般公司没有预热,只有,用户读取过数据库才会放到Memcached中。

  ③   提升了网站的并发访问,减少服务器数最。

 

原理图

1.4 Memcached分布式缓存集群

  memcached天生不支持分布式集群,需要通过程序支持分布式存储

1.4.1 Memcached分布式缓存集群的特点

     1. 所有MC服务器内存的内容都是不一样的。这些服务器内容加起来接近数据库的容量。比如1T的数据库,一台缓存数据库的内存没有那么大,因此分成10台缓存服务器。

     2. 通过在客户端(Web)程序或者MC的负载均衡器上用HASH算法,让同一内容都分配到一个MC服务器。

     3. 普通的HASH算法对于节点宕机会带来大量的数据流动(失效),可能会引起雪崩效应。

     4. 一致性HASH可以让节点宕机对节点的数据流动(失效)降到最低。

普通的hash算法

 

  首先将key处理为一个32位字符串,取前8位,在经过hash计算处理成整数并返回,然后映射到其中一台服务器这样得到其中一台服务器的配置,利用这个配置完成分布式部署。在服务器数量不发生变化的情况下,普通hash分布可以很好的运作,当服务器的数量发生变化,问题就来了。试想,增加一台服务器,同一个key经过hash之后,与服务器取模的结果和没增加之前的结果肯定不一样,这就导致了,之前保存的数据丢失。

一致性hash算法

 

一致性哈希算法

  优点:在分布式的cache缓存中,其中一台宕机,迁移key效率最高

  将服务器列表进行排序,根据mHash($key) 匹配相邻服务器

一致性hash算法  将数据流动降到最低

参考资料

http://blog.csdn.net/cywosp/article/details/23397179
http://blog.csdn.net/zhangskd/article/details/50256111

第2章 memcached使用

2.1 安装memcached

2.1.1 环境说明

[root@cache01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值