当前位置: 首页 > 后端技术 > PHP

memcache与redis杂谈

时间:2023-03-29 16:15:27 PHP

php项目下memcache和redis谈缓存控制在客户端向服务端请求一个php页面的过程中,服务端是可控的。只有可控的才能优化,优化的重点是缓存优化。想象一下?数据存储在DB中,访问DB需要读取硬盘数据,但是如果要求数据速度>>硬盘的最大读写速度,就会出现IO瓶颈。然后,使用内存缓存数据结果集,让用户先读取缓存,如果失败再从DB中读取。这样既可以提高数据响应的速度,又可以保护数据源。虽然php启用了shmop扩展来管理内存,但是可以管理的内存大小是有限的。只有非常流行的NOSQL:memcache高性能分布式内存缓存服务器(分布式配置:1.有多个memcache服务器;2.打开php对应的扩展,可以通过addServer()实现。底层传递keyhash的剩余部分用于标识服务器,所以在代码实现上,访问前不要改变服务器的顺序,否则可能取不到值)redis高性能内存缓存服务器(主从配置):master主服务器执行修改操作,多个slave(只读)连接master,在第一次全量拷贝后,增量更新数据给自己。如果slave掉线,重新连接master时,会自动全量复制。)MEMCACHE以key-value的形式存储key,最大250B,value最大1M。value以string的形式保存:php标量数据类型,保存为string时将被隐藏;对于php中的其他数据类型,保存时自动序列化,取出时自动反序列化。//这个过程是在启用php的memcache扩展时,底层实现的item过期时间是时间戳,没有限制;以s为单位时,不能持久化不能超过30天的秒数。最重要的是速度的考量∧memcache和redis,最大的区别就是持久化(就是数据能不能存到硬盘上)。Redis由于数据结构多样,满足更多的业务需求,但是memcache的读取速度更快。∨REDIS支持丰富的数据结构(这方面这里不讨论)常用项:string,hash,list,set,sortedset//redis本身实现了一个双向链表,链表也可以模拟一个队列。栈的数据结构的值可以达到512M。持久化:快照持久化(SNAPSHOTTING)在一定时间内改变一定数量的键值,并将redis内存管理的数据全量复制到硬盘。FinePersistence(AOF)用于保存每次执行的命令。开启后每秒保存一次。见下图英文注意事项及注意事项