总结MySQL、Redis的优化措施

目录

一.MySQL数据库优化

二.Redis优化


一.MySQL数据库优化

  1. 遵循MySQL层优化的五个原则: 减少数据访问,返回更少的数据,减少交互次数减少服务器CPU开销,利用更多资源。
  2. 理解SQL优化原理并进行SQL优化,例如避免不走索引的场景,最大化利用索引,尽可能避免全表扫描,减少无效数据的查询等。
  3. 事务日志性能优化:双一设置innodb_flush_log_at_trx_commitsync_binlog两个参数设置,都设置为1就是双1设置。MySQL 默认配置就是双1配置。
  4. 优化MySQL所在服务器内核
  5. 优化数据库参数以提高资源利用率,从而提高MySQL服务器性能。此优化需要进行压力测试来进行参数调整,MySQL服务的配置参数都在my.cnf或myini中,其中一些性能影响较大的参数包括query_cache_size和query_cache_type等

MySQL参数优化

MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看
mysql> show variables like 'max_connections';
查看当前访问Mysql的线程
mysql> show processlist;
设置最大连接数
mysql>set globle max_connections = 5000;
最大可设置16384,超过没用
查看当前被使用的connections
mysql>show globle status like 'max_user_connections'

对MySQL语句性能优化的16条经验

  • 为查询缓存优化查询
  • EXPLAIN 我们的SELECT查询(可以查看执行的行数)
  • 当只要一行数据时使用LIMIT 1
  • 为搜索字段建立索引
  • 在Join表的时候使用相当类型的列,并将其索引
  • 千万不要 ORDER BY RAND ()
  • 避免SELECT *
  • 永远为每张表设置一个ID
  • 可以使用ENUM 而不要VARCHAR
  • 尽可能的使用NOT NULL
  • 固定长度的表会更快
  • 垂直分割
  • 拆分打的DELETE或INSERT语句
  • 越小的列会越快
  • 选择正确的存储引擎
  • 小心 "永久链接"

二.Redis优化

1.避免使用命令keys *这个命令是阻塞的,即操作执行期间,其它任何命令在你的实例中都无法执行。当redis中key数据量小时到无所谓,数据量大就很糟糕了。所以我们应该避免去使用这个命令。可以去使用SCAN,来代替。

2.数据压缩后再存入redisredis为每种数据类型都提供了两种内部编码方式,在不同的情况下redis会自动调整合适的编码方式。

3.设置key的有效期我们应该尽可能的利用key有效期。比如一些临时数据(短信校验码),过了有效期Redis就会自动为你清除 

4.选择回收策略(maxmemory-policy)当Redis的实例空间被填满了之后,将会尝试回收一部分key。根据你的使用方式,强烈建议使用 volatile-lru(默认) 策略——前提是你对key已经设置了超时。但如果你运行的是一些类似于 cache 的东西,并且没有对 key 设置超时机制,可以考虑使用 allkeys-lru 回收机制,具体讲解查看 。maxmemory-samples 3 是说每次进行淘汰的时候 会随机抽取3个key 从里面淘汰最不经常使用的(默认选项)。

1

2

3

4

5

6

7

maxmemory-policy 六种方式 :

volatile-lru:只对设置了过期时间的key进行LRU(默认值)

allkeys-lru : 是从所有key里 删除 不经常使用的key

volatile-random:随机删除即将过期key

allkeys-random:随机删除

volatile-ttl : 删除即将过期的

noeviction : 永不过期,返回错误

5.使用bit位级别操作和byte字节级别操作来减少不必要的内存使用

1

2

bit位级别操作:GETRANGE, SETRANGE, GETBIT and SETBIT

byte字节级别操作:GETRANGE and SETRANGE

6.当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能数据持久化时需要在持久化和延迟/性能之间做相应的权衡

7.想要一次添加多条数据的时候可以使用管道

8.限制redis的内存大小(64位系统不限制内存,32位系统默认最多使用3GB内存) 

 数据量不可预估,并且内存也有限的话,尽量限制下redis使用的内存大小,这样可以避免redis使用swap分区或者出现OOM错误。(使用swap分区,性能较低,如果限制了内存,当到达指定内存之后就不能添加数据了,否则会报OOM错误。可以设置maxmemory-policy,内存不足时删除数据)

9.尽可能使用哈希存储

10.使用lazy free特性: lazy free是Redis 4.0新增的一个功能,它可以理解为惰性删除或延迟删除。意思是在删除时提供异步延时释放键值的功能,把键值释放操作放在BIO(BackgroundI/0)单独的子线程处理中,以减少删除对Redis主线程的阻塞。

你可能感兴趣的:(数据库,mysql,redis)