avatar

muzi

积分:643
收藏问题: 0
入驻时间: 1个月前
muzi答案的问题
muzi 2周前 答案了 muzi 创建的问题 › 对于大流量的网站,应该用什么方法来解决访问量?
  1. 首先确认服务器硬件是否满足支持当前的流量
  2. 优化数据库的访问
  3. 禁止外部盗链
  4. 控制大文件下载
  5. 使用不同的主机分流
  6. 使用流量分析统计
  7. 启用缓存
  8. 启用CDN
muzi 1个月前 答案了 trumpx 创建的问题 › Apache 和 Nginx 有什么区别?

共同点:

  1. 都是内存数据库
  2. 都可以做一主多从的分布式集群

区别:

  1. Redis支持hash、list、set、sorted set等多种数据,Memcache 仅支持字符串键值数据。
  2. Redis 只使用单核;Memcache可使用多核多线程。所以100K以下数据Redis性能好,以上Memcache性能好。
  3. Redis 数据可以持久化到磁盘;Memcache 不支持数据持久化,关闭后数据随之消失
  4. Redis 单个key(变量)存放的数据有1GB的限制;Memcache 单个key(变量)存放的数据有1M的限制。
  5. Redis 利用单线程模型提供了事务的功能;Memcached提供了cas命令来保证数据一致性。
  6. redis 支持master-slave复制模式做分布式;memcache可以使用magent的一致性hash做分布式。

CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;
CAS原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作

muzi 1个月前 答案了 trumpx 创建的问题 › 事务的四大特性是什么?
  1. 持久性
  2. 原子性
  3. 一致性
  4. 隔离性
muzi 1个月前 答案了 trumpx 创建的问题 › 悲观锁和乐观锁是什么?

悲观锁和乐观锁都是为保证一致性的一种锁。

1 悲观锁

在 MySQL 中,使用:

  1. 关闭autocommit=0;
  2. 在事务中使用 select .. from ... where ... for update;给行加排他锁
  3. select命中的行必须有索引,否则会锁表

优点:

  1. 保守策略,所以数据安全性高

缺点:

  1. 有加锁等额外开销,效率低
  2. 可能引起死锁
  3. 降低并行行,数据被锁住后其他事物必须等待

二、乐观锁

使用:

  1. 表中增加版本号或时间戳数据列
  2. 读取数据时同时读取版本号
    select num, version from t where id = 1;
  3. 更新数据时添加版本号为条件,同时版本号增加1
    update t set num = num - 1, version = version + 1 where id = 1 and version = 99;
  4. 如果更更新失败,提示用户

优点:

  1. 没有锁,效率高
  2. 不会引起死锁

缺点:

  1. 这里是列表文本遇到两个事务统一时间读取一行数据时,会引起问题
muzi 1个月前 答案了 trumpx 创建的问题 › MySQL 有哪些存储引擎?
  1. InnoDB:默认存储引擎,行锁,支持事务,使用最广泛。
  2. MyISAM:表锁,不支持事务。
  3. Archive:适合日志和数据采集类应用。
  4. Memory:适合访问速度快,数据丢失也没有关系的场景。
  5. CSV:将普通csv保存再MySQL中,主要用于数据交换。

此外还有:BlackholeFederatedMergeNDB等存储引擎。

muzi 1个月前 答案了 trumpx 创建的问题 › PHP json_decode() 函数如何返回关联数组?

指定第二个参数为true

echo json_decode($str, true);
muzi 1个月前 答案了 trumpx 创建的问题 › POST 和 GET 有什么区别?

本质上来说,GET用于查询,POST用于修改

  1. GET参数通过URL传递,POST放在请求Body中。
  2. GET请求在URL中传送的参数是有长度限制的,而POST通过Body传送数据,长度没有限制。
  3. POST比GET更安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  4. GET在浏览器回退时是无害的,而POST会再次提交请求。
  5. GET产生的URL地址可以被保存为书签,而POST不可以。
  6. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  7. GET请求只能进行url编码,而POST支持多种编码方式。
  8. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  9. GET产生一个TCP数据包,POST产生两个TCP数据包
muzi 1个月前 答案了 trumpx 创建的问题 › vim 查找和替换命令

查找

/abc<回车>     #查找abc
/ abc <回车>   #查找abc单词(注意前后的空格)

使用了查找命令之后,使用如下两个键快速查找:

  • n:按照同一方向继续查找
  • N:按照反方向查找

替换

:s/abc/efg/     #替换当前行第一个 abc 为 efg
:s/abc/efg/g    #替换当前行所有 abc 为 efg
muzi 4周前 答案了 trumpx 创建的问题 › Linux 如何删除当前目录下及其子目录下所有名为 .git 的文件和目录?
find ./ -name ".git" | xargs rm -rf
muzi 4周前 答案了 trumpx 创建的问题 › 如何查看 Nginx 使用哪个端口?

用下面命令查出Nginx master进程的PID:

$ ps aux | grep nginx
1234 root 0:00 nginx: master process nginx -g daemon off;
5678 nginx 0:00 nginx: worker process

然后根据PID查看Nginx使用的端口:

$ netstat -anp | grep 1234
tcp 0 0 127.0.0.11:43489 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx: master pro

可以看到PID为1234的Nginx使用本地的80端口