Redis性能问题及解决方案 (速记)

1.因内存交换引起的性能问题

内存使用率是redis最重要的一部分,如果redis实例的内存(used_memory)大于可使用的最大内存,会进行内存互换,就是操作系统把不用的或旧的数据从物理内存写入硬盘中(swap分区),以便腾出新的内存给page.硬盘上的读写操作比在内存上的读写操作慢了五六个数量级,内存(0.1μs)硬盘(10ms)。所以如果出现内存交换会极大的影响redis的性能。

解决方案:减少空间的使用率避免内存交换

a.如果缓存数据较小,使用32为的redis实例,32位实例上的指针大小只有64位的一半。

b.设置key的过期时间

c.尽量使用hash结构存取数据.

d.回收key:内存使用达到设置的最大阀值时,需要选择一种key的回收策略,可在Redis.conf配置文件中修改“maxmemory-policy”属性值

  • volatile-lru:使用LRU算法(挑选最近最少使用的key进行删除)从已设置过期时间的数据集合中淘汰数据。
  • volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。
  • volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。
  • allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。
  • allkeys-random:从数据集合中任意选择数据淘汰
  • no-enviction:禁止淘汰数据

2.命令处理时响应延迟

redis是单线程,客户端发过来的命令都是按顺序执行的,若某些命令因为网络原因有延迟,或者命令本身原因执行慢,也会影响redis的性能。

解决方案

a.使用多参数命令(mset,mget,hmset,hmget)

b.管道命令,几个命令合并一起执行,因为100个命令单独发送给服务端会有100次网络连接开销,使用管道命令会一次性把100个命令结果返回,节约网络延迟造成的时间成本。

c.避免操作大集合慢命令。

猜你喜欢

转载自blog.csdn.net/XiaoLongFight/article/details/88555226