当前位置:   article > 正文

Redis使用规范_redis 规范

redis 规范

Redis的使用规范

key规范

  • 以业务名为key前缀,用冒号隔开,以防止key冲突覆盖
  • 确保key语义清晰额度情况下,长度尽量小
  • key禁止宝航特殊字符,如空格、换行、单双引号以及转义符
  • key尽量设置ttl,以保证不使用的key能够清除

value规范

  • 如果大量存储bigKey是会有问题的,会导致慢查询,内存增长过快
  • 要选择适合的数据类型。
  • 给Key设置过期时间,同时注意不同业务的key,尽量过期时间分散一点
  • 建议使用批量操作提高效率(Pipeline pipe = redis.pipelined())

Redis的坑

慎用O(n)复杂度命令
慎用Redis的monitor命令
生产环境不能使用 keys指令
禁止使用flushall、flushdb
注意使用del命令
如果是List类型,你可以执行lpop或者rpop,直到所有元素删除完成。
如果是Hash/Set/ZSet类型,你可以先执行hscan/sscan/scan查询,再执行hdel/srem/zrem依次删除每个元素。
避免使用SORT、SINTER等复杂度过高的命令

缓存设计

数据不一致

如果服务对耗时不是特别敏感可以增加重试;如果服务对耗时敏感可以通过异步补偿任务来处理失败的更新,或者短期的数据不一致不会影响业务,那么只要下次更新时可以成功,能保证最终一致性就可以。

避免缓存穿透

数据库中未查询到的数据,可在 Redis 中设置特殊标识,以避免因缓存中无数据而导致每次请求均到达数据库。缓存穿透的解决方案,有以下两种:

对不存在的用户,在缓存中保存一个空对象进行标记,防止相同 ID 再次访问 DB。不过有时这个方法并不能很好解决问题,可能导致缓存中存储大量无用数据。
使用 BloomFilter 过滤器,BloomFilter 的特点是存在性检测,如果 BloomFilter 中不存在,那么数据一定不存在;如果 BloomFilter 中存在,实际数据也有可能会不存在。

避免缓存雪崩

当大量缓存集中在某一个时间段失效,这样在失效的时候也会给数据库带来很大压力。对于缓存雪崩的解决方案有以下两种:

搭建高可用的集群,防止单机的 redis 宕机。
设置不同的过期时间,防止同一时间内大量的 key 失效。

避免缓存击穿

某个 key 的缓存过期后,同一时间内有大量的请求均访问该 key,由于缓存过期,大量的请求均会访问数据库,并重建缓存;重建缓存的过程加锁,保证只有一个人执行,其他人等待。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/389630
推荐阅读
相关标签
  

闽ICP备14008679号