实训1:PHP常见面试题(1) 2019-01-02 星期三

1. 常用的端口号?

Redis:6379
Memcache:11211
Mysql:3306
Nginx:80
Apache:80
php-fpm:9000
Smtp:465 or 25
Ftp:文件传输协议 21
ssh:安全外壳协议 22

2. memcache或redis雪崩如何解决?

造成原因:

通常,在一个网站里,mysql数据库处理的请求比较少(20%),负载80%,缓存技术处理大多数请求(80%)
如果memcache或redis挂掉,所有请求都会在mysql处理,数据库的处理能力不足会直接宕机。这时候就算重启缓存和mysql也是无济于事的,因为缓存重启后,数据已经丢失,数据请求还是会走mysql,mysql还是会死掉(死循环)

解决方法:

缓存预热
1:先启动缓存,再启动数据库。(但是此时不提供对外服务)
2:通过一个PHP脚本把常用的key写入缓存中
3:开放对外服务【热点数据已经缓存,请求会被缓存处理,减轻mysql压力】

3. Redis持久化的方式?

1:Aof(append only file)
redis执行命令时,会把我们执行的命令通过日志形式进行追加。安全性高,但是影响性能。;

2:Rdb
按照制定规则进行持久化
save 900 1 (900s内1次redis操作 会做一次持久化)
save 300 10 (300s内10次redis操作 会做一次持久化)
save 60 10000 (60s内10000次redis操作 会做一次持久化)
但是可能会存在数据丢失,比如:12:00做过一次持久化,正常的话,12:15会再做持久化,如果12:14缓存死掉,那么14分钟的数据会丢失。不大安全,但是性能比aof好很多

4. 如何获取客户端ip和服务端ip?

客户端:$_SERVER[‘remote_addr’];

服务端:$_SERVER[‘server_addr’];

5. Redis常见的数据类型?

String key->value
Hash 数组 H
Set 集合 S
Sorted set 有序集合 Z
List 列表 队列 I

集合和有序集合的区别:集合和有序集合都有交集和差集。有序集合可以进行排序

6. Redis中常用的命令?

String

set(‘key’,‘val’) 设置一个key
get(‘key’); 获取制定的key的值
incr(‘key’) 把一个key的值自增
decr(‘key’) 把一个key的值自减

集合

sadd(‘key’,‘val’[‘val1’,‘val2’]) 向一个集合中添加一个或多个值
scard(‘key’) 获取集合中成员的个数
smembers(‘key’) 获取集合中所有的成员

有序集合

zadd(‘key’,‘score’,‘val’[‘val1’,‘val2’]) 向一个有序集合中添加一个或多个值,或更新已有成员的分数
zrange(‘key’,‘min’,‘max’) 返回集合中制定区间的成员,0 ,-1则返回所有成员
zrem(‘key’,‘val’) 移除集合中一个成员
zrangeByScore(‘key’,‘min’,‘max’) 返回指定分数区间的成员 分数从低到高
zRevRangeByScore(‘key’,‘min’,‘max’) 返回指定分数区间的成员 分数从高到低

7. MySQL事物?
>概念:是指作为单个逻辑单元执行的一系列操作,要么完全执行,要么完全不执行

四个特性:

原子性:sql语句要么都成功,要么都不成功。把事物当成一个原子操作,不可再分
一致性:执行事物前,数据库是一致性的,执行后,也是一致性的,不会因为执行事务导致不一致
持久性:事物执行对数据库的影响是永久的
隔离性:多个事物互不影响

你可能感兴趣的:(实训)