设为首页 收藏本站
查看: 1095|回复: 0

[经验分享] memcached 系列知识 1

[复制链接]

尚未签到

发表于 2018-12-25 07:34:36 | 显示全部楼层 |阅读模式
  menmcache
  【1】memcache软件客户端软件安装的是memcache 服务端软件安装的是memcached
  【2】memcached的作用:在传统场景中  多数的web服务器都会将数据保存到
  关系型数据库中,但随着数据量增大,访问的集中,关系型数据库的负担加重
  响应缓慢,导致网站打开延迟等问题 memcache的主要目的就是作为数据库的
  缓存,通过在自身内存中缓存关系型数据库的调查结果,减少数据库自身被访问的次数
  ,以提高动态web应用的速度,提高网站架构的并发能力和可扩展性
  【3】memcache服务的运行原理是通过在事先规划好的系统内存空间中临时缓存数据库
  中的各类数据,以达到减少前端业务服务队数据库的直接高并发访问
  从而达到提升大规模网站集群中动态服务的并发访问的能力。生茶场景中
  memcache服务一般被用来保存网站中经常被读取的对象或数据,就像我们的客户端浏览器
  也会把经常访问的网页缓存起来一样,通过内存缓存读取对象或数据要比磁盘
  读取快很多。
  【4】互联网常见的内存缓存服务软件
  memcache                    纯内存             常见于缓存网站后端的各类数据,主要缓存用户重复请求的动态内容
  redis                       持久化存储         缓存用户重复请求的动态内容,作为数据库的有效补充
  memcachedb                   持久化存储         缓存用户重复请求的动态内容,作为数据库的有效补充
  squid nginx                   内存或者内存加磁盘缓存    主要用于缓存web前端的服务内容
  

  【5】常见用途和工作流程
  他是一种内存缓存软件,在工作当中经常用来缓存数据库的查询数据,数据被缓存
  在事先预分配的memcache管理的内存中,可以通过api或者命令的的方式存取内存中缓存的这些数据,memcache服务内存中缓存
  的数据就像一张巨大的hash表,每条数据都是以key-value对的形式存在
  【6】网站读取memcache数据时的工作流程:
  memcache 用来缓存查询到的数据库中的数据,逻辑上当程序员访问后端的数据库获取数据时会有限访问
  memcache缓存,如果缓存中有数据没有命中,程序在去读取后端的数据库读取数据,读取需要的数据后,
  把数据返回客户端,同时还会把读取到的数据缓存到memcache内存中,这样客户端用户在请求相同的额数据就会直接读取memcache缓存的数据,这样
  减轻了后端数据库的压力
  【7】memcache在企业中的应用场景:
  1完整数据缓存
  不会经常变动的数据,事先放到memcache里,然后对外提供数据访问,这个过程
  被称之为“数据预热”用户读取数据的时候只需读取缓存里面的书库,减少了数据库的压力
  2数据做成静态化文件,然后通过在前端的web缓存或者
  使用cdn加速效果更好
  3 热点数据缓存
  

  用户更新数据后网站程序一般先把数据写入数据库一份,同时再把这部分数据放入
  memcache ,下一次访问的时候就直接从memcache中访问数据了,这种方法用来缓存
  网站热点的数据,
  4 作为集群节点sesson会话共享存储
  即把客户端用户请求多个前端应用服务集群产生的session会话信息
  统一存储到一个memcache缓存中
  由于session会话数据是存储在内存中的,所以很快
  会话保持一般在后端不在前端保持会话,会话在前端的话,
  会造成负载均衡不太均衡,数据会抛到同一个机器
  

  【8】memcache作为高并发 高性能的缓存服务
  1 协议简单
  memcache的协议实现简单,采用基于文本行的协议,能通过teleneet
  nc等命令直接操作memcache服务存取数据
  2 支持epoll、kqueue异步io模型,使用libevent作为时间处理通知机制
  3key/value 键值数据类型
  被缓存的数据以key/value键值形式存在
  oldboy---36  key=oldboy,value=36
  oldgirl--28  key=oldgirl  value=28
  通过oldboy key 可以获取到36值,同理通过oldgirlkey可以获取28值3
  3 全内存缓存 效率高
  mem管理内存的方式非常高效,全部的数据都存放于mem服务事先
  配好的内存中,无持久化存储的设计,和系统物理内存一样重启后数据消失
  当内存中缓存的数据容量达到服务启动时这顶的内存值时,就自动使用LRU算法删除过期的缓存数据
  也可以在存放数据时对存储的数据设置过期时间,而是在访问的时候查看key的时间戳判断是否过期
  如果希望重启后数据依然能保留,那么就可以采用redis这样持久性内存缓存系统
  4 可支持分布式集群
  分布式mem集群的不同服务器之间是互不通信的,每一个节点都是独立存储数据,并且数据之间的内容也是不一样的,
  mem服务器本省不会监控数据的过期,但是每条数据插入的时候会设置过期时间
  1 利用web点程序实现mem分布式的简单代码
  【10】memcache安装过程:
  yum install libevent libenent-devel nc telnet -y安装依赖
  rpm -qa libevent libevent-devel nc telnet   检查依赖
  yum install -y memcached                  安装memcache
  【11】
  1查看memcache的路径
  which memcached
  2 查看memcache的相关参数:
  memcached -h
  3启动memcached:
  mremcached -m 16m -p 11211 -d -u root -c 8000
  -m:使用多大内存 默认是64m  -p:指定端口参数 默认11211  -d:后台运行  -u 指定用户  -c 最大并发链接数
  ps -ef |grep mem  查看一下启动没有:
  root        659      2  0 20:50 ?        00:00:00 [vmmemctl]
  root       1295      1  0 21:14 ?        00:00:00 memcached -m 16m -p 11211 -d -u root -c 8000
  root       1317   1200  0 21:27 pts/0    00:00:00 grep mem
  [root@root ~]#
  4 mem也有多实例 只要改变一下端口就ok
  mremcached -m 16m -p 11212 -d -u root -c 8000
  

  【12】mem先关参数
  -d 守护进程运行服务
  -u 指定mem的用户
  -p 指定mem服务监听tcp端口号
  -m指定服务缓存数据的端口号
  -P 设置保存mem的pid文件
  -M 内存不够时 报错
  -L 启动大内存页,可以降低内存浪费 改进性能
  -c 最大的并发链接数 默认是1024
  -t 线程数 默认是4
  【13】mem的语句结构:
  mysql的insert语句       memcache的set命令
  mysql的select语句       memcache的get命令
  MySQL的delete语句       memcache的delete命令
  memcache相关命令详细说明:
  

  set 无论如何都进行写入数据,会覆盖老数据
  add 只有对应数据不存在时才添加数据
  repalce 只有数据存在时进行替换数据
  append 往后追加
  prepend 往前追加
  cas 按版本号更改
  

  key  普通字符串 小于250个字符
  flags 客户端用来标识数据格式的数值
  exptime  存活时间  0为永远
  bytes 字节数
  

  

  telnet 127.0.0.1 11211  telnet 连接
  例子:【1】
  1
  set user01 0 0 7
  oldgirl
  STORED
  get user01
  VALUE user01 0 7
  oldgirl
  END
  

  2
  set user02 0 0 6
  oldboy
  STORED
  get user02
  VALUE user02 0 6
  oldboy
  END
  

  

  3 最后的数字7 必须和要插入数据的字节相同要不就不成功
  set user03 0 0 7
  oldboy
  

  

  

  【2】删除数据删除key键
  delete user02
  DELETED
  get user02
  END
  

  【3】退出  删除错误的输入 ctrl+u
  quit
  

  

  nc命令测试:
  printf "set key1 0 0 3\r\old\r\n"|nc 127.0.0.1 11211  插入数据
  printf "get key1\r\n"|nc 127.0.0.1 11211              查看数据
  printf "delete key1\r\n"|nc 127.0.0.1 11211           删除数据
  printf "get key1\r\n"|nc 127.0.0.1 11211              查看数据
  未完待续




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655448-1-1.html 上篇帖子: memcached配置过程 下篇帖子: Memcached 安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表