1 键值对的建议
1.1、key名建议;
建议key name设计:业务名:表名:id
比如:
set school:student:1 martin
要求:不包含特殊字符
1.2、string 类型控制在10 KB以内,hash、list、set、zset元素个数不要超过5000;
1.3、控制key的过期时间;
使用expire设置key的过期时间,防止Redis中残留大量废弃的数据,Redis不是垃圾桶,内存很贵的。
当然,同一个Redis里面的key过期时间也尽量错开,集中过期,可能会导致缓存雪崩
2 禁用一些高危命令
2.1、危险命令直接禁用;
比如:
keys *flushallflushdb
当然,可以考虑直接在配置中禁用这些命令
在配置文件中增加
rename-command flushall ""rename-command flushdb ""rename-command keys ""
或者创建一个ACL用户
ACL SETUSER martin on >martin123 +@all -@dangerous ~*
解释
+@all 所有的命令
-@dangerous 表示禁用危险命令
~* 表示授权所有的key
dangerous危险命令包括:FLUSHALL, MIGRATE, RESTORE, SORT, KEYS, CLIENT, DEBUG, INFO, CONFIG, SAVE, REPLICAOF
2.2、尽量不全量操作Hash、Set等集合结构;
如果单个集合结构里有多个元素,单次操作过多的元素,效率可能会很低,并且可能把网卡流量打满。
3 设计规范
3.1、不同场景合理使用不同的数据结构;
比如排行榜可以使用zset;
地理位置,可以用GEO;
队列可以用list;
计数器可以用string类型。
3.2、不要将所有的数据都放Redis里面;
建议Redis只做热数据缓存,冷数据放到MySQL或者其他数据库里。
一方面,内存是比较贵的,可以节约成本;
另一方面,放到关系型数据库中,数据很难丢失。