zoukankan      html  css  js  c++  java
  • 团队内部redis使用规范

    团队内部Redis使用约定

    目的

    为了避免再次出现因redis使用不当,而造成异常影响业务,以及方便后期运维,故而经团队内部人员协商,出具redis使用规范,通过规范使用更好、更高效,更安全的使用redis缓存。

    目前情况

    • redis命名不规范,各种命名规则混合使用
    • redis被用于持久化存储数据,redis数据有丢失风险,无重新加载方案
    • redis存储的key,未设置过期时间

    规范定义

    关于文档中「能愿动词」的使用,参考psr使用规范的定义

    为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下:

    • 必须 (MUST):绝对,严格遵循,请照做,无条件遵守;
    • 一定不可 (MUST NOT):禁令,严令禁止;
    • 应该 (SHOULD) :强烈建议这样做,但是不强求;
    • 不该 (SHOULD NOT):强烈不建议这样做,但是不强求;
    • 可以 (MAY) 和 可选 (OPTIONAL) :选择性高一点,在这个文档内,此词语使用较少;

    键值设计

    1. redis key命名应该具有可读性以及可管理行,不该使用含义不清的key以及特别长的key名;
    2. redis key命名必须全部由小写字母、数字、英文点号(.)和英文半角冒号(:)组成,必须以英文字母开头;
    3. redis key命名必须按照模块区分前缀,具体模块定义参照上述模块划分中的内容,逻辑含义段必须使用英文半角冒号(:)分割,单词之间必须使用英文半角点号(.)分割,一定不可使用殊字符(下划线、空格、换行、单双引号以及其他转义字符等);
    4. redis key命名必须以key所代表的value类型结尾,见到key即可知道存储数据类型,以提高可读性;
    5. 总结,命名规范为 业务模块名:业务逻辑含义:其他:value类型
      user:uid:1:string
      

    业务规范

    1. redis应该定位为缓存数据,除特殊需求外,聊天等

    2. redis,应该设置过期时间

    • redis定位为缓存cache使用时,对于存放的key,应该使用expire设置过期时间;
    • 若不设置的话,这些key会一直占用内存不释放,随着时间的推移会越来越大,直到达到服务器的内存上线,导致宕机等恶略影响;
    • 对于key的超时时长设置,可根据业务需求自行评估,并非越长越好;
    • 某些业务的确需要长期有效,可以在每次设置时,设置超时时间,让超时时间顺延;
    1. redis的使用,应该考虑冷热数据分离,不该将所有数据全部放到redis中,对于使用不频繁,且无关的日志等存入mysql,或正常的日志文件系统中

    redis的数据存储全部都是在内存中的,成本昂贵。应该根据业务只将高频热数据存储到redis中,对于低频冷数据可以使用MySQL/MongoDB等基于磁盘的存储方式,不仅节省内存成本,而且数据量小在操作时速度更快、效率更高

    1. redis有数据丢失风险,程序处理数据时,应该考虑丢失后的重新加载过程

    使用redis时,要考虑丢失数据的风险,项目架构时需要考虑到相应解决方案,程序需要处理如果redis数据丢失时重新可进行重新加载

    1. 对于必须要存储的大文本数据应该压缩后存储

    对于大文本写入到Redis时,要压缩后存储。大文本数据存入redis,除了带来极大的内存占用外,在访问量高时,很容易就会将网卡流量占满,进而造成整个服务器上的所有服务不可用,并引发雪崩效应,造成各个系统瘫痪

    1. 线上redis一定不可使用Keys正则匹配操作

    2. 选择合适的数据类型

    • 在不能确定其它复杂数据结构一定优于String类型时,避免使用Redis的复杂数据结构。
    • 每种数据结构都有相应的使用场景,String类型是Redis中最简单的数据类型,建议使用String类型。
    • 但是考虑到具体的业务场景,综合评估性能、存储、网络等方面之后使用适当的数据结构。
    • 需要根据业务场景选择合适的类型,常见的如:String可以用作普通的K-V、简单数据类类型等;Hash可以用作对象如商品、经纪人等,包含较多属性的信息;List可以用作消息队列、医生粉丝/关注列表等;Set可以用于推荐;SortedSet可以用于排行榜等。

    扫码关注有惊喜

    (转载本站文章请注明作者和出处 白贺-studytime

  • 相关阅读:
    集合已修改 ;可能无法执行枚举操作 Dictionary
    net 操作XML小结
    SQL SERVER 2000写存储过程出现列名无效的解决方法
    .net如何获得前一页面的地址
    SQL字符串叠加问题
    c# 保留2位小数
    如何取字符字段的第几个字符,如取name的左边从2位起的2个字符?
    SQL语句复制表的方法
    给页面加上Loading效果最简单实用的办法
    为XMl文档添加子节点,依据淘宝
  • 原文地址:https://www.cnblogs.com/studytime/p/12871044.html
Copyright © 2011-2022 走看看