《我的敏捷软件项目管理实践》

Redis使用规范

第五章 如何做好设计 / 数据库设计规范

1.拒绝bigkey
          value不应超过1MB。其中string类型的值应控制在10KB以内,hash,list,set,zset元素个数不应超过5000个且单个元素应非常小。

2.控制key的生命周期
          key应设置过期时间。最好可以设置不同的过期时间,防止集中过期引起的缓存雪崩。
          缓存雪崩:大量key在同一时间段失效,大量请求直接到达存储层。

          (补充:

                      缓存穿透:访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。

                      缓存击穿:一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。)

3.hash,list,set,zset存储元素过多优化
          可将这些元素进行拆分

4.禁用命令keys,flushall,flushdb

5.Redis事务功能较弱,不建议过多使用

6.使用批量操作提高效率
          redis客户端执行一条命令的过程:发送命令->命令排队→命令执行→返回结果
          批量操作是为了节省执行命令的时间。
          原生命令:mget,mset(原子性)
          非原生命令:pipeline(非原子性,多条命令组成一组去执行)
          (注意控制一次性操作的元素个数和元素的字节数)