【第四讲,Redis的开发规范和常见问题】
讲师:晓翌,阿里云NoSQL内核工程师;
课程内容:为什么要制定开发规则;阿里内部系统的开发规约;Redis的常见问题处理。答疑汇总:特感谢班委@张鹏 同学
1. Redis 无法实现弹性扩容的功能吗?
可以弹性扩容,如果增加分片数,需要重新分配 slot 及数据迁移,做一次resharding。如果只增加内存,无需其它操作。
2. 一台主机能部署多套 Redis 吗?
可以。为了降低宕机带来的影响,不推荐一台主机部署多套 Redis。如果有两个副本,至少要把主备副本分开,部署在不同主机。
3. 大排行榜在什么量级会有明显性能问题?
大 key 取值复杂度在 O(n) 级别且数据量比较大的时候会带来比较明显的影响。如果只取其中的几项或者复杂度为O(logn) 或O(1) 级别,这种影响不大。尽量不要做大范围的 range, 不要做O(n) 级别的操作。
4. 什么时候讲场景中如何使用 Redis ,比如:秒杀、钉钉打卡。
请关注第六讲《Redis 的高并发实战:抢购系统 --浅奕》
https://developer.aliyun.com/article/783041
5. 云 Redis 中实时发现 bigKey 是怎样实现的?
实时采样统计计算,上线之后可以试用一下。
6. RT 是什么意思?
请求的延时,Response Time
7. 每个用户记录一条数据,把 Redis 当缓存用,一种是给所有 key 设置过期时间,一种是不设置过期时间,让 Redis 在达到内存上限时,做LRU 清理,哪种方案比较合理?
可以看下 阿里云Redis 官网过期key的清理策略,Redis 在达到内存上限时,做 LRU 清理其实是不可控的,不好控制哪些 key 被清理;此外如果内存用的比较满,在请求量较大时动态内存快速上涨,有OOM的风险,不建议内存用满。
配置过期时间是可控的,是比较好的,可以自行配置每一批key的失效时间,也可以从控制台主动清理全部过期key,加速清理。目前官网maxmemory-policy默认配置了volatile-lru,内存用满后key设置了过期时间才会逐出,key不设置过期时间的话,内存达到最大客户端是会报错的。
8. Redis 有什么漏洞,平时如何防范攻击?
阿里云一般是部署在 vpc 里边,做了网络隔离,是很有保障的。如果开了公网,要把密码设置的复杂一些。
9. Redis 和 Mysql 如何配合使用?
Redis 当缓存使用,Mysql 来持久化数据。典型的模式有Cache Aside。
10. Redis Lua 脚本建议使用吗?性能如何?
不太建议使用,Lua 脚本从编译到运行大量消耗 CPU。
11. 建议什么场景下使用 Lua 脚本?
不建议使用。
12. Redis 企业版和社区版的主要区别是什么?性能差异大吗?
性能差别比较大,性能增加了2到3倍,连接数增加到3倍左右。社区版连接数上限是1万,连接数比较多建议使用企业版。单分片热点超过 10万QPS,也建议用企业版。
13. Redis 中存了项目所有用户的信息,第一个方案是讲对象进行了 hashset 的方式存储,另一个方案是将对象序列化后存入,取的时候再转对象,哪种方法比较好?
这两种方法,推荐hashset的用法,因为将对象序列化存进去后,如果要更新某个字段,只能将对象整体取出后再整体更新,而hashset可以做到部分更新字段,消耗的网络流量方面会有数据量的差距。此外,hashset的部分更新字段只适用于一层对象结构,如果对象有多层,hashset也没有那么方便,还需要再次将二层对象序列化后处理,这里推荐Redis企业版TairDoc Module,可以处理Json形式的结构,多层也可以做到部分更新字段,性能比较强。
14. 所有的 key 都带过期时间会不会给 Redis 带来性能开销问题?
Redis 后台会起一个线程,定时的去扫,随机删除一些过期的 key。对性能没有什么影响。
15. Redis 如何与其它 NoSql 数据库配合使用?
比如和mongodb 配合进行冷热数据存储。Tair 本身可以进行冷热数据配合存储。
16. Lua 耗CPU是耗 Redis 主进程的CPU 还是其它 CPU?
Lua 耗的 CPU 就是主进程的 CPU。