Linux命令行&连接Linux服务器&数据库优化&MyISAM和InnerDB&redis&memcache

Linux

长时间运行稳定的操作系统,当成服务器(web、db、app)。有C编译环境,有一些软件(Redis、nginx)没有软件包,需要在Linux编译获得软件包。

常用命令

pwd:获取当前路径
cd:跳转到目录
su-u:切换到管理员
ls或ll:列举目录

  • 文件操作命令
    • 文件
      • 查看 Tail
      • 删除 rm-rf
      • vi
    • 文件夹
      • 创建mkdir
      • 删除rm-rf

怎么连接远程Linux服务器

需依赖于Linux服务器安装SSH服务器、SFTP服务器,SSH服务的端口为22,SFTP服务器端口为25,使用SSH客户端连接,Xshell、Putty
使用SFTP客户端,上传和下载文件(上传安装包,修改配置文件上传)Winscp、XFTP
putty+winscp
xshell+xFTP =>xmanager

云主机

云主机就是云服务运营商(阿里、华为、新浪、西部数码等)提供远程服务器功能付费租用对应服务器。

数据库优化

  1. 定位:查找、定位慢查询、并优化
  2. 创建索引:在索引中查询,直接找到对应记录
  3. 分表:当表中数据比较多或默写字段的值比较多但很少使用时,采用水平分表和垂直分表
  4. 读写分离:一台服务器不满足需求是,用读写分离的方式进行集群。
  • 主从同步:数据库将数据持久化到磁盘上,每个数据库服务器的数据一致。修改操作在主数据库写,其他数据库同步数据。使用负载均衡实现写操作往主数据库取,读往从数据库取。
  1. 缓存:使用redis来进行缓存

查找、定位慢查询

在项目自验后转测试,启动数据库开启慢查询,并且把执行慢的调用语句写到日志中,在运行一定的时间后,通过查看日志,找到相应的慢查询语句。
使用explain慢查询语句,详细分析语句的问题

show variables like ‘log_slow_queries’;
开启 set global log_slow_queries = on;

数据库优化遵循范式

首先符合1NF,才能满足2NF,才能满足3NF
1NF:表中列具有原子性,不能再分解
2NF:表中记录唯一,主键
3NF:外键,表中不要有冗余数据
反三范式

数据库优化创建索引

  • 普通索引:允许重复值出现
  • 唯一索引:唯一,不能有重复值
  • 主键索引:唯一且不为null,根据主键创建索引
  • 全文索引:根据文本域(varchar、char、text)进行索引—>sphinx
    explain select * from articles where match(title,body) against(‘database’);
    • 索引占用磁盘空间、对DML(数据操纵语言SELECT、UPDATE、INSERT、DELETE)操作变慢
    • 使用场景:
      1.在where条件经常使用
      2.字段内容不是唯一的几个值
      3.字段内容不频繁变化
    • 具体技巧
    1. 创建多列索引(复合索引),不使用第一部分就不会使用索引。
    2. 用like查询时,前面使用通配符%不会用索引,即关键字不能使用%或_,反之亦然。只能‘aaa%’\G
    3. 条件有or,有条件中没有使用索引,其他条件也不能用。要求每个字段单独使用时能索引
    4. 列类型是字符串时,在条件中用引号引用起来
    5. 使用全表扫描比使用索引快,不使用索引

数据库优化之分表

水平分表和垂直分表
表数据达到百万级,查询效率低,容易造成表锁。(垂直分表)表中字段的值多(长文本、二进制),而且只在少数情况下查询,可将字段单独放在一个表中,用外键连接。

  • 水平分表
    1. 按时间分表:数据时效性强
    2. 按区间范围分表:自增ID需求
    3. Hash分表:通过原始ID或名称按hash算法计算出数据存储表的表名

数据库优化选择合适的存储引擎

myisam/innerDB/memory
MYISAM:表对事务要求不高,以查询和添加为主,
INNERDB:对事务要求高,保存的都是重要数据,
MEMORY:数据变化频繁,不需要入库,有繁忙的查询和修改,速度快

MyISAM和InnerDB的区别!!!

  1. 事务安全:MyISAM不支持事务,innerDB支持
  2. 添加和查询速度:myisam不用考虑同步锁,查询和添加速度快
  3. 全文索引:myisam支持
  4. 锁机制:myisam支持表锁,innerDB支持行锁
  5. 外键:myisam不支持外键,InnerDB支持外键

数据库优化之缓存

在持久层(dao层)与数据库(db)之间添加一个缓存层,减少数据库服务器压力,减少访问时间。
Hibernate的二级缓存(SessionFactory),但是他不能完成分布式缓存,中央缓存用redis、memcache

数据库优化之语句优化

  • DDL(Data definition Language)优化:
    1. 导入数据时,禁用索引
    2. 关闭唯一校验 set unique_checks = 0//关闭
    3. 修改事务提交方式 set autocommit=0,将多次提交变为一次
  • DML优化(data manipulation操纵 language):将多次提交变为一次
  • DQL优化:
    1. order by—多用索引排序、普通结果排序Filesort
    2. group by:使用order by null取消默认排序
    3. or优化,or两边都用索引性能好
连接阿里云服务器创建的数据库

创建数据库

实现批量插入几百万条数据

  • 原理:变多次提交为一次,使用批量操作。

redis

key-value的nosql数据库,先存到内存中,根据策略持久化到磁盘上,断电也不会丢失数据,支持的数据类型多。

  • 作用:做缓存数据库和web集群时当中央缓存存放session
  • 使用场景:经常查询、很少修改的数据存放到内存中,减少访问时间、减轻压力。
  • redis中计数器时原子性的内存操作,可解决库存溢出问题
  • session缓存服务器:web集群时作为session的缓存服务器
  • 缓存队列

redis和memcache

mysqlredismemcache
类型关系型非关系型非关系型
存储位置磁盘磁盘和内存内存
存储过期不支持支持支持
读取性能非常高非常高

redis对象保存方式

JSON字符串:需要将对象转换为JSON字符串,当做字符串处理,直接使用get、set使用。设置和获取简单,但没有提供专门的方法将对象转换为JSON。(JSONlib)字段不多用本方式
字节流:需要做序列化为字节保存,数据量大采用本方式

redis的淘汰机制

设置最大使用内存:server.maxmemory
内存大小有限,需要保存有效数据

  • noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
  • allkeys-lru:在主键空间中,优先移除最近未使用的key。
  • volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。最近最少
  • allkeys-random:在主键空间中,随机移除某个key。
  • volatile-random:在设置了过期时间的键空间中,随机移除某个key。
  • volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

Java访问Redis

  1. 使用jedis java客户端访问redis服务器
  2. 使用spring集群时,可使用spring data访问redis,二次封装

redis集群

当一台数据库服务器无法满足需求时,用redis集群处理,采用读取分离。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值