Redis性能优化是有经验面试官经常问到的一个问题,接下来咱们就一起看下面试官是如何通过场景来一步一步挖坑的。
一、说下hash结构如何优化(直接上重点吧!考验业务场景的hash底层理解!)
1、hash的底层有两种结构:hashtable、ziplist(但是日常使用经常忽略底层结构的变换)
2、hashtable、ziplist最大的区别就是内存占用(ziplist内存占用比hashtable少75%以上)
3、核心思想:让你的数据尽最大可能使用ziplist
4、参数控制:hash-max-ziplist-entry:512、hash-max-ziplist-value:64
4、举个实际的业务场景:
点赞业务场景:以用户为维度还是以作品为维度,这个需要着重考虑,因为一个人可能最多对一两百个作品点赞(ziplist),但是一个作品可能会被数万人点赞(hastable),那不同的维度触发的底层数据结构是不一样的。
二、redis的key过期后,会立刻删除吗?(是不是没注意过)
1、两种模式:延迟删除、定期清理
2、延迟删除:再次使用该key的时候,再判断这个key是不是过期了,这时候再去删除
3、定期清理:redis每个100毫秒,取20个过期key进行删除。
三、redis慢查询平常统计过没(这个是不是平常也没怎么注意?)
1、先看命令:slowlog get number 获得最近number条慢查询
2、使用监控工具比如profiler,执行redis-cli bigkeys 获取大的键
3、得到了慢查的key,那接下来就结合业务分析处理即可,该调整结构的调整结构,该清理数据的清理数据等等。
四、redis的淘汰策略
1、allkeys-lru:删除最近最少使用的key
2、allkeys-random:随机删除最近最少使用的key
3、volitile-lru:在设置了过期时间的key中删除删除最近最少使用的
4、volitile-random:在设置里过期时间的key中随机删除
五、redis为什么那么快呢(这个是重点,我先说几个点,后面单独出一集详解)
1、基于内存寻址
2、优化了相关数据结构
3、IO多路复用技术
六、redis key设置策略如何优化
1、避免大key
2、key增加离散度,避免同一时间过期
3、避免将redis用于数据管道,除非你的消费能力达标,不然内存挤压严重
4、key可以预加载数据