记一些最近踩的Redis的坑

发布时间:April 6, 2018 // 分类:代码 // 暂无评论

# Redis再快也不能当内存用,特别是在分布式环境中

原理:当应用服务器与Redis的网络延迟在0.01ms的时候,可能不会有什么感觉。但当延时打到1.5ms的时候,滥用redis就会产生意想不到的结果。

场景:项目中有一些用户列表类接口,拼凑数据时使用逐个用户get的方式获取用户资料。假设列表为300,get300次至少就会发生0.45s的延迟。这显然是不能接受的。

解决:其实大多数时候直接用mget批量获取即可。

# 千万别用KEYS、HGETALL之类的操作

原理:KEYS会扫描Redis中所有键,且因为Redis的单线程操作,期间会阻塞所有其他操作

场景:当键值很少的时候,并不会有任何感觉。但当键值数量达到十万级时,问题就会逐渐暴露出来。

解决:所以要么在设计上尽量避免KEYS类操作,使用诸如set集合结构代替。要么使用scan、hscan这类非阻塞操作。这一点在Redis官方文档里面其实已经有重点说明。 (我自己没看文档能怪谁呢科科)
详见:(1)Redis官方文档 KEYS (2)Redis命令参考(中文版) KEYS

# 使用slowlog get命令查看阻塞redis的命令

当Redis性能下降时,可以使用redis命令查看慢查询日志。譬如

slowlog get 100

得到100条类似于下列结构的日志:

...

 21)    1)   "18416045"    // 日志ID
  2)   "1523026632"        // 日志时间戳
  3)   "35859"             // 执行时间(微秒)
  4)      1)    "KEYS"     // 所执行的命令
   2)    "xx:xx:xxxx:xxxxxxxxxxx*"


 22)    1)   "18416044"
  2)   "1523026632"
  3)   "35473"
  4)      1)    "KEYS"
   2)    "xx:xx:xxxxx:xxxxxx:*"


 23)    1)   "18416043"
  2)   "1523026632"
  3)   "31829"
  4)      1)    "HGETALL"
   2)    "xx:xx:xxxxx:xxxxx"

...

通过对慢日志的分析,可以找出当前程序到底被什么操作所拖累。


未完待续

本文固定链接
https://www.ywlib.com/archives/138.html

标签
redis, 性能,

添加新评论 »

分类
随机文章
最新文章
最近回复
  • box: 好棒b( ̄▽ ̄)d
  • mi: /data/opkg update
  • alen chen: 我的是小米路由器mini ROM:開發版2.19.40
  • alen chen: 你好,看到你的文章如獲至寶,一舉解決了我多年想在小米路由器mini裡面安裝dlna的心願。一路...
  • hiicy: windows上最有效 最简单明了的方法!打电话!!
  • 梁兴健: 楼上好像都搞定了,只有我一个人报错吗,我是放在post.php文章下面,想显示随机文章的,Fa...
  • Jordan: Thanks!!!
  • Kent: 这一块我也只是玩一玩。。高深的都不懂其实哈哈哈
  • 紫色: 博主,有没有联系方式?邮箱QQ什么的,我最近在做人脸识别的课题,想请教一些问题。
  • Kent: 哈哈哈哈哈哈哈