memcache与redis杂谈

貂蝉
• 阅读 3560

php项目下的缓存控制

客户端向服务端请求php页面的过程中,服务端是可控的。
可控的才可优化,优化的重点,即是缓存优化。

试想?数据存储在DB中,访问DB就要读取硬盘数据,但如果需要数据的速度>>硬盘最大的读写速度,
就会产生IO瓶颈。

那么,使用内存缓存数据结果集,让用户首先读取缓存,未果则从DB中读取。
如此,就能提高数据响应的速度,也保护了数据源。

php虽开启shmop扩展可管理内存,但所能管理的内存大小是有限的。

才有大为流行的NOSQL:
memcache  高性能的分布式内存缓存服务器   
(分布式配置:1.有多个memcache服务端;2.开启php相应扩展,通过addServer()即可实现。底层通过对key的hash取余来标识服务器,因此代码实现上,不要改变存取前的服务器的顺序,否则可能出现获取不到值的情况)
redis     高性能的内存缓存服务器          
(主从配置:master主服务器执行修改操作,多个slave(只读)连接master,在首次全量复制后,增量更新数据到自身。如果slave断了,重新连接master时,会自动全量复制)

MEMCACHE

  1. 以key-value的方式存储
  2. key可达250B,value可达1M
  3. value是以字符串的形式保存的:

    php标量数据类型,保存时会隐式转换为字符串;
    php其他数据类型, 保存时自动序列化,取出时自动反序列化. //该过程是php的memcache扩展开启后,底层实现的
    
  4. item过期时间是时间戳时,无限制;以s为单位时,不能超过30天的秒数
  5. 不能持久化,要的就是速度

注意事项

  • memcache与redis杂谈
  • memcache与redis杂谈
  • memcache与redis杂谈

memcacheredis,最大区别在于持久化(即数据能否保存在硬盘上).
redis因其多样的数据结构,而满足更多的业务需求,但memcache的读取速度更快些.

REDIS

  1. 支持丰富的数据结构(在此先不展开该方面的讨论)

    常用项:string,hash,list,set,sortedset                //redis本身就实现了双向列表,list还可模拟出队列,堆栈的数据结构
  2. value值可达512M
  3. 可持久化:

    • 快照持久化(SNAPSHOTTING)
      一定时间内一定数量的key值的改变,就会全量复制redis内存管理的数据到硬盘.

    memcache与redis杂谈

    • 精细持久化(AOF)
      用来保存每次执行的命令.开启后,每秒保存一次。见下图的英文注释

    memcache与redis杂谈

    memcache与redis杂谈

注意事项

  • memcache与redis杂谈
  • memcache与redis杂谈
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
分布式id如何生成
1.UUID生成通过网卡、时间、随机数来保证生成的唯一的字符串。优点:(1)本地生成,生成简单(2)速度快(3)高可用;缺点:(1)无序,如果存入mysq,影响B的操作性能,因为B树是需要排序的;(2)占用空间较大(36个
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这