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(非原子性,多条命令组成一组去执行)
(注意控制一次性操作的元素个数和元素的字节数)