Redis使用常见问题 Redis中有哪些可以替代KEYS命令这样的慢操作,实现对键值对的模糊查询呢? 当我们利用KEYS命令查询时,如果数据过大,KEYS操作会阻塞后续的读写请求。Redis提供了SCAN,以及针对集合类型的SSCAN、HSCAN等可以根据设定的数量参数,返回固定指定的数量,可以避免像KEYS命令一样同时返回所有匹配的数据,不会导致Redis变慢。 如何查找Redis的bigkey? 在应用中,我们需要尽量避免使用bigkey,因为Redis主线程在操作bigkey时,会被阻塞,但是如果业务中我们使用了bigkey,那么应该如何排查呢?Redis可以执行rediscli命令时带上bigkeys选项(rediscli h p a bigkeys。),执行该命令后,它会对整个数据库中的键值大小进行统计分析,会输出每种数据类型中最大的bigkey信息,比如String类型,会输出最大的字节长度的bigKey,而对于集合类型来说,会输出最多元素个数的bigkey。但需要注意的是:对于集合类型的bigkey来说,元素最多的集合,不一定是占用内存最大的集合。 此外也可以通过redisrdbtools(Redis RDB快照文件分析的开源工具)来分析实例中所有key的内存占用情况。 如何查找Redis的hotkey? Redis 4.0版本起,rediscli客户端提供了hotkeys参数(rediscli h p a hotkeys)来查询分析当前运行期间的热key。注:使用hotkeys参数的前提是需要redis实例使用LFU内存淘汰策略。 如何判断是否存在内存碎片? Redis是内存数据库,内存利用率的高低关系到redis运行效率,为了能监控到实时的内存使用情况,redis提供了info memory命令,可以查询内存的使用情况,其中memfragmentationratio指标展示的就是内存碎片率,这个内存碎片率是usedmemoryrss和usedmemory相除的结果,其中一个用户实际使用的内存大小,另一个是已经分配的内存大小,例如一个key实际使用了6个字节的内存空间,但是redis内存机制是分配了8字节的大小。控制台在指标监控中有展示内存碎片率指标,可以支持查询历史内存碎片率。