Open 499689317 opened 4 years ago
- 线上redis禁止使用
keys
,flushdb
,flushall
,config
等命令,在redis.conf中的rename-command禁用rename-command KEYS "" rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG ""
- O(N)复杂度命令
hgetall
,smember
,zrange
等在N很大时使用hscan
,sscan
,zscan
命令渐进式替换- 多使用
mget
,mset
批量操作命令提高效率- 尽量使用expire设置key过期时间,并尽可能打乱过期时间导致数据集中过期
- redis不支持事务回滚(rollback)不建议过多使用
- 不同业务类型,选好maxmemory-policy(最大内存淘汰策略),设置好过期时间 默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题(程序申请内存过大,操作系统无法满足,然后抛出OOM异常导致程序自杀)。
/* 其他策略如下: allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。 allkeys-random:随机删除所有键,直到腾出足够空间为止。 volatile-random:随机删除过期键,直到腾出足够空间为止。 volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。 noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error) OOM command not allowed when used memory",此时Redis只响应读操作。 */
redis sort set
O(n)
x
数量节点增加一个指针,指针指向间隔x
数量节点