499689317 / notes

note
2 stars 0 forks source link

redis #27

Open 499689317 opened 4 years ago

499689317 commented 4 years ago

redis sort set

redis 使用skiplist(跳表)来实现sort set数据结构 skiplist本质上类似于二叉树等查询结构(一种有序列表),用于解决算法中的查找问题,根据给定的key快速查找到其所在的位置

499689317 commented 4 years ago

redis注意事项


  1. 线上redis禁止使用keys,flushdb,flushall,config等命令,在redis.conf中的rename-command禁用
    rename-command KEYS     ""
    rename-command FLUSHALL ""
    rename-command FLUSHDB  ""
    rename-command CONFIG   ""
  2. O(N)复杂度命令hgetall,smember,zrange等在N很大时使用hscan,sscan,zscan命令渐进式替换
  3. 多使用mget,mset批量操作命令提高效率
  4. 尽量使用expire设置key过期时间,并尽可能打乱过期时间导致数据集中过期
  5. redis不支持事务回滚(rollback)不建议过多使用
  6. 不同业务类型,选好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只响应读操作。
    */