php面试之Reids篇

一、什么数据可以放缓存

  • 不需要实时更新但是又极其消耗数据库的数据。比如网站上商品销售排行榜,这种数据一天统计一次就可以了,用户不会关注其是否是实时的。
  • 需要实时更新,但是更新频率不高的数据。比如一个用户的订单列表,他肯定希望能够实时看到自己下的订单,但是大部分用户不会频繁下单。

在某个时刻访问量极大而且更新也很频繁的数据。这种数据有一个很典型的例子就是
秒杀,在秒杀那一刻,可能有N倍于平时的流量进来,系统压力会很大。但是这种数据使用的缓存不能和普通缓存一样,这种缓存必须保证不丢失,否则会有大问题。

二、为什么redis这么快

  • 1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
  • 2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
  • 3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  • 4、使用多路I/O复用模型,非阻塞IO;
  • 5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

三、为什么使用缓存

redis缓存,为什么要用缓存呢,举个例子,假如系统中有2千万用户信息,用户信息基本固定,一旦录入很少变动,
那么你每次加载所有用户信息时,如果都要请求数据库,数据库编译并执行你的查询语句,这样效率就会低下很多,针对这种信息不经常变动并且数据量
较大的情况,通常做法,就是把他加入缓存,每次取数前先去判断,如果缓存不为空,那么就从缓存取值,如果为空,再去请求数据库,并将数据加入缓存,
这样大大提高系统访问效率

四、redis特性

  1. 速度快,因为数据存在内存中
  2. 支持丰富数据类型,支持string,list,set,sorted set,hash
  3. 支持事务,操作都是原子性
  4. 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
  5. redis可以持久化其数据

仅记录最近面试他人经常问到已经自己容易忘记的redis概念。

《php面试之Reids篇》

扫码关注我获取更多面试技巧↑↑

    原文作者:Beng
    原文地址: https://segmentfault.com/a/1190000019945463
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞