精华内容
下载资源
问答
  • Redis开发规范

    2021-01-04 09:55:00
    英文半角冒号:【强制】不该使用含义不清的key以及特别长的key名【强制】禁止使用Redis保留字命名key【强制】命名规范:业务模块名:业务逻辑含义:其他【推荐】简洁2.value设计【强制】拒绝bigkey【强制】禁止在...


    我基于网络上的资料整理、添加的Redis开发规范。欢迎交流指导:)
    转载请注明出处

    一、键值设计

    1.key名设计

    【强制】以英文字母开头,命名中只能出现小写字母、数字、英文点号.和英文半角冒号:

    【强制】不该使用含义不清的key以及特别长的key名

    【强制】禁止使用Redis保留字命名key

    【强制】命名规范:业务模块名:业务逻辑含义:其他

    1)业务模块名:具体的功能模块
    2)业务逻辑含义段:
    【强制】不同业务逻辑含义使用英文半角冒号(:)分割,
    【强制】同一业务逻辑含义段的单词之间使用英文半角点号 (.)分割,用来表示一个完整的语义

    示例: user:basic.info:1 注:1是用户id

    【推荐】简洁性

    保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:

    user:{uid}:friends:messages:{mid}简化为u:{uid}:fr:m:{mid}
    

    2.value设计

    【强制】拒绝bigkey

    string类型控制在10KB以内,hash、list、set、zset元素个数不要超5000。以防止网卡流量、慢查询。反例:一个包含200万个元素的list。非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞。)

    【强制】禁止在Redis中存储敏感的明文数据

    【推荐】选择适合的数据类型

    例如:
    反例:

    set user:1:name tom
    set user:1:age 19
    set user:1:favor football
    

    正例:

    hmset user:1 name tom age 19 favor football
    

    3.【强制】关于过期时间

    Redis key一定要设置过期时间。要跟自己的业务场景,需要对key设置合理的过期时间。可以在写入key时,就要追加过期时间;也可以在需要写入另一个key时,删除上一个key。
    说明:
    (1)若不设置的话,这些key会一直占用内存不释放,随着时间的推移会越来越大,直到达到服务器的内存上限,导致服务器宕机等重大事故;
    (2)对于key的超时时长设置,可根据业务场景进行评估,设置合理有效期;
    (3)某些业务的确需要长期有效,可以判断即将到期时,重新设置有效期,避免引起热点key问题。

    二、命令使用

    1.【推荐】 O(N)命令关注N的数量

    例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。

    【强制】严禁对 zset 的不设范围操作

    zrange、zrangebyscore等多个操作 zset 的函数,严禁使用 zrange myzset 0 -1 等这种不设置范围的操作。请指定范围,如zrange myzset 0 100。如不确定长度,可使用 zcard 判断长度。

    【强制】严禁对大数据量 key 使用 hgetall

    hgetall会取出相关 HASH 的所有数据,如果数据条数过大,同样会引起阻塞,请确保业务可控。如不确定长度,可使用hlen先判断长度。

    2.【强制】禁用命令

    禁止线上使用keys、flushall、flushdb等,通过Redis的rename机制禁掉命令,或者使用scan的方式渐进式处理。

    反例:使用keys 正则匹配操作查找某个key

    3.【推荐】使用批量操作提高效率

    原生命令:例如mget、mset。
    非原生命令:可以使用pipeline提高效率。
    

    但要注意控制一次批量操作的元素个数(例如500以内,实际也和元素字节数有关)。
    注意两者不同:

    1. 原生是原子操作,pipeline是非原子操作。
    2. pipeline可以打包不同的命令,原生做不到
    3. pipeline需要客户端和服务端同时支持。
    

    注意:Redis-Cluster架构下如需使用pipeline,需要客户端的支持(比如开源的jedis没有提供集群模式下pipeline接口的实现,需要自己改造封装)

    4.【推荐】Redis事务功能较弱,不推荐过多使用

    Redis的事务功能较弱(不支持回滚),而且集群版本要求一次事务操作的key必须在一个slot上(可以使用hashtag功能解决)

    5.【慎用】关于hashtag功能

    hashtag功能可让相关key落位在同一个slot,集中在同一节点,不大推荐使用。
    如果确实需要用,需控制同一hashtag的数量。

    6.【推荐】根据业务场景选择数据类型

    目前Redis支持的数据库结构类型较多:字符串(String),哈希(Hash),列表(List),集合(Set),有序集合(Sorted Set), Bitmap, HyperLogLog和地理空间索引(geospatial)等,需要根据业务场景选择合适的类型。
    在不能确定其它复杂数据结构⼀定优于String类型时,避免使用Redis的复杂数据结构。 每种数据结构都有相应的使⽤场景,String类型是Redis中最简单的数据类型,推荐使用String类型。 但是考虑到具体的业务场景,综合评估性能、存储网络等方面之后使用适当的数据结构。 需要根据业务场景选择合适的类型,常见的如:String可以用作普通的K-V、简单数据类类型等;Hash可以用作对象如用户等,包含较多属性的信息;List可以用作息队列、关注列表等;Set可以用于推荐;Sorted Set可以用于排行等。

    三、客户端使用

    1.【推荐】避免多个应用使用一个Redis实例

    正例:不相干的业务拆分,公共数据做服务化。

    2.【推荐】使用连接池

    使用带有连接池的数据库,可以有效控制连接,同时提高效率,标准使用方式:

    执行命令如下:
    Jedis jedis = null;
    try {
      jedis = jedisPool.getResource();
      //具体的命令
      jedis.executeCommand()
    } catch (Exception e) {
      logger.error("op key {} error: " + e.getMessage(), key, e);
    } finally {
      //注意这里不是关闭连接,在JedisPool模式下,Jedis会被归还给资源池。
      if (jedis != null) 
        jedis.close();
    }
    

    3.【推荐】高流量时做好熔断

    高并发下推荐客户端添加熔断功能(例如netflix hystrix)

    4.【强制】auth访问

    Redis集群应设置密码访问

    5.【推荐】内存策略

    根据自身业务类型,选好maxmemory-policy(最大内存淘汰策略),设置好过期时间。
    默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题。
    其它策略如下:

    • allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。
    • allkeys-random:随机删除所有键,直到腾出足够空间为止。
    • volatile-random:随机删除过期键,直到腾出足够空间为止。
    • volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略。
    • noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error) OOM command not allowed when used memory",此时Redis只响应读操作。

    6.【推荐】注意key的过期时间设置

    在某些业务高峰期(如运营活动时的线上报名),key值过期时间设置过短或者过于集中容易造成缓存穿透,导致大量请求直接打到 MySql数据库。

    7.【慎用】将Redis做为消息队列

    如没有非常特殊的需求,严禁将Redis 当作消息队列使用。Redis 当作消息队列使用,会有容量、网络、效率、功能方面的多种问题。

    四、参考文献

    阿里云Redis开发规范
    技术分享:Redis规范

    展开全文
  • 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正常实现等严重问题; 接口类问题(B类)-指设计、编码中出现的函数...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    umount 命令是mount命令的逆操作,它的参数使用方法mount命令是一样的。Linux挂装CD-ROM后,会锁定CD—ROM,这样就不能用CD- ROM面板上的Eject按钮弹出它。但是,当不再需要光盘时,如果已将/cdrom作为符号链接...
  • 而要实现这一点,应通过系统的开放来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级更新换代。 3、 系统的易用性和...
  • 4.5.5 禁止和启用约束 147 4.5.6 在表创建时使用DEFAULT约束 148 4.5.7 为既有表增加DEFAULT约束 149 4.5.8 从表删除约束 150 4.6 临时表表变量 150 4.6.1 使用临时表在批处理中进行多次查找 151 ...
  • 禁止和允许触发器 触发器应用举例 使用触发器实现审计功能 使用触发器维护数据完整 使用触发器保障数据安全 使用触发器派生字段值 第章安全管理 创建角色语句 删除角色语句 授权语句数据库权限 授权...
  • PLSQL Developer 8.0.3.1510 简体中文绿色破解版

    万次下载 热门讨论 2010-07-15 16:36:07
    PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 (5)PL/SQL Developer主要特性:  PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL帮助、对象描述...
  • Git权威指南PDF完整版

    千次下载 热门讨论 2012-12-25 17:53:55
    19.6 分支里程碑的安全/ 294 第20章 补丁文件交互/ 296 20.1 创建补丁/ 296 20.2 应用补丁/ 297 20.3 StGit Quilt/ 300 20.3.1 StGit/ 300 20.3.2 Quilt/ 304 第4篇 Git协同模型 第21章 经典Git协同模型/ 308...
  • 《visualLISP程序设计(第2版)》具有实用便于教学的特点,既可作为大学本科、专科或继续教育的教材,也可作为从事cad领域工作的工程技术人员的参考书。 3目录 第1章概述 1.1关于lisp 1.2关于autolisp 1.3关于...
  • 按照正确的顺序使用AlarmOnAlarmPrintOff命令 11-61 禁止报警监视 11-61 禁止标签的报警监视 11-61 查看禁止的标签 11-61 使用禁止报警列表 11-62 更多的FactoryTalk View命令 11-62 启动停止报警监视 11-63 在...
  • 会计理论考试题

    2012-03-07 21:04:40
    C、计算机病毒具有破坏 D、计算机病毒具有传染性和破坏 19.系统软件与应用软件的相互关系是 __D___ 。 A、前者以后者为基础 B、每一类都以另一类为基础 C、每一类都不以另一类为基础 D、后者以前者为基础 20....
  • PL/SQL Developer v8.0.zip

    2019-07-17 17:29:59
    PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。     PL/SQL Developer v8.0主要特性: PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL...
  • SQL入门经典(第4版)--详细书签版

    热门讨论 2013-02-05 15:28:04
    每章后面还有针对很强的测验与练习,能够帮助读者更好地理解掌握学习的内容。在最后的附录里还有关于安装mysql的详细介绍、书中用到的关键sql语句、测验练习的答案。.  本书的内容层次清晰,针对强,非常...
  • 全局过滤是创建一个通用的规则来适用于所有应用程序的过滤规则或规范低层的系统级网络活动。 2、防火墙应用 Outpost个人防火墙的特点在于使用简单,安装运行后立刻开始工作,无须用户做复杂的设置工作。Outpost...
  • PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 PL/SQL Developer主要特性:  PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL帮助、对象描述...
  • PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 重要功能 集成调试器  该调试器(要求Oracle 7.3.4或更高)提供您所需要的全部特性:跳入(Step In)、跳过...
  • PL/SQL Developer

    2010-07-01 13:29:22
    PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 PL/SQL Developer主要特性:  PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL帮助、对象描述、...
  • PLSQL Developer 7.1.5

    2009-09-18 11:36:49
    PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 PL/SQL Developer主要特性:  PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL帮助、对象描述、...
  • PLSQLDeveloper下载

    2012-05-04 11:30:27
    PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 目录 简介 背景 主要特性 编程基础知识程序结构 控制结构 变量声明与赋值 SQL基本命令 过程与函数 游标显示游标 ...
  • PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求最高的用户...
  • 多态包括参数化多态性和包含多态。多态语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、...
  • 深入浅出MySQL数据库开发、优化与管理维护

    千次下载 热门讨论 2014-01-21 15:48:01
     20.3.7 InnoDB在不同隔离级别下的一致读及锁的差异   20.3.8 什么时候使用表锁   20.3.9 关于死锁   20.4 小结   第21章 优化MySQLServer   21.1 查看MySQLServer参数   21.2 影响MySQL性能...
  •  PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQLPL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求最高的用户...
  • 6) 修改MYSQL支持库跨静态编译的EXEDLL传递连接句柄记录集句柄无效的BUG(改动较大,可能会产生兼容问题,我们已经仔细测试,也请使用到此库的用户帮助我们多多测试,以便及早发现问题,谢谢) 7) 其它修改 ...
  • PL/SQL Developer侧重于易用、代码品质生产力,充分发挥Oracle应用程序开发过程中的主要优势。 主要特性  登录界面PL/SQL编辑器,具有语法加强、SQLPL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL...
  • java 面试题 总结

    2009-09-16 08:45:34
    多态包括参数化多态性和包含多态。多态语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、...
  • 千里马酒店前台管理系统V7使用手册

    热门讨论 2011-06-16 14:09:38
    千里马V7.2采用MS-SQL SERVER 2000数据库系统,并充分利用了数据索引、查询优化、穿透查询等技术,为酒店业务处理提供了很好的稳定性和性能,保证了酒店在业务繁忙时段高数据吞吐量时仍能使电脑系统的运作保持畅通...
  • 作者Stephen Prata是受人尊敬的作者教育家,他以清晰的语言,对C++做了具有启发的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个...
  • 作者Stephen Prata是受人尊敬的作者教育家,他以清晰的语言,对C++做了具有启发的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个...
  • 作者Stephen Prata是受人尊敬的作者教育家,他以清晰的语言,对C++做了具有启发的、见解深 刻的介绍。本书在解释基本概念的同时,兼顾了C++语言的细节。书中通过大量简短、易于输入的范例,每 次阐述一两个...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

命令性规范和禁止性规范