文章目录
命令使用
【推荐】 O(N)命令关注N的数量
例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。
【推荐】 禁用命令
禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的
方式渐进式处理。
【推荐】合理使用select
redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。
【推荐】使用批量操作提高效率
原生命令:例如mget、mset。
非原生命令:可以使用pipeline提高效率
但要注意控制一次批量操作的元素个数(例如500以内,实际也和元素字节数有关)。
pipeline vs 原生命令
- 原生的命令是原子操作,pipeline是非原子操作。
- pipeline可以打包不同的命令,原生做不到
- pipeline需要客户端和服务端同时支持
【建议】Redis事务功能较弱,不建议过多使用,可以用lua替代
客户端使用
【推荐】 避免多个应用使用一个Redis实例
正例:不相干的业务拆分,公共数据做服务化。