[redis]使用规范

前言

个人整理~主要是参考《redis深度历险》-钱文品 里面的各种章节~零散的提到了一点东西

里面提到好多有用的点~

感谢大佬的书

禁止事项:

  • 严格禁止超大Key(Value值超过10KB)
  • 禁止大量key设置同一时间失效,否则可能会同时过期,影响到redis线上服务卡顿(因为同时过期还会让redis 定时扫描策略,会循环多次扫描过期字典,直到过期的key变得稀疏,会导致线上读写操作出现明显的卡顿)
  • 禁止戒指用del删除大对象,因为删除大对象,比如一个上千万的hash,那么就会造成卡顿,应该使用unlink,后台异步回收线程(建议手动删除元素)(集合类key value,集合规模超过5000都应该这样)
  • 避免同一时间大量key过期,参考Redis监控的ExpireKeys指标(单集群ExpireKeys监控指标小于 30k/s )
  • 所有的缓存类信息(源数据存储在DB)都必须有防止穿透逻辑
  • 严禁异步刷新缓存(这样可能导致缓存更新失败之类的 很坑的问题)
  • 涉及到定时初始化的数据要考虑初始化任务失败的可能性, 要有兜底方案
  • 不允许使用Redis事务/Lua功能(分布式锁可以)

推荐:

  • 1.每个key都推荐要有过期时间,而且要加上一个随机值
  • 2.使用Redis组合命令, 避免使用单独的原生命令(比如将SET+PEXPIRE合并为SETEX)(因为组合命令是一次性执行完,可以有原子性 比如set nx)
  • 3.超大的hash类型尽量使用hscan, 避免大数据量返回造成Redis拥塞, 同时需要控制hscan同时使用的数量(hscan会占用一个Redis连接)
  • 例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。
  • 4.Redis Key应该有统一的业务标识前缀, 避免共用Redis的情况下造成问题, 同时要求RedisKey字符控制在50个以内 大key也是不可取的)
  • 5.有类似For循环操作Redis的情况下使用批量操作, 如Mget/pipeline等操作(更建议使用pipeline) → 禁止在pipeline中使用RPC/IO操作, mget参数数量要求少于100个
  • 使用pipeline 来做批量操作

    注意两者不同:

    原生是原子操作,pipeline是非原子操作。

    pipeline可以打包不同的命令,原生做不到

    pipeline需要客户端和服务端同时支持。

    https://blog.csdn.net/pmdream/article/details/107410445

  • 6.给key携带版本号, 加减字段之后升级版本号防止访问报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值