一、键值设计

1、key名设计

1) 可读性和可管理性:  以业务名或数据库名为前缀,以防key冲突,用冒号分隔,比如业务名:表名:ID

2)简洁性: 保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视。

3)不包含特殊字符: 包含空格、换行、单双引号以及其他转义字符

2、value设计

1) 拒绝bigkey,防止网卡流量、慢查询。 string类型控制在10KB以内,hash、set、zset元素不要超过5000。

非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时注意防止bigkey过期

时间自动删除问题、例如一个200万的zset设置一小时过期,会触发del操作,造成阻塞,而且该操作不会不出现

慢查询中,查找方法和删除方法

2) 选择适合的数据类型。

3) 控制key的生命周期,Redis不是垃圾桶。  建议设置expire设置过期时间,条件允许的话可以打散过期时间,

防止集中过期,不过期的数据重点关注idletime

二、命令使用

1、O(N)命令关注N的数量。 例如hgetall  lrange  smembers   zrange   sinter等并非不能使用,但是需要明确N的值

有遍历的需求可以使用hscan  sscan   zscan代替

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

处理

3、合理使用select。  Redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务数据库实际还是单线程

处理,会有干扰

4、使用批量操作提高效率, 注意一次批量操作的元素个数

5、不建议过多使用Redis事务功能,因为其功能较弱,不支持回滚,而且集群版本要求一次事务操作的key必须在一个slot上

可以使用hashtag功能解决

6、Redis集群版本在使用lua上右特殊要求:

1) 所有key都应该由keys数组来传递,redis.call/pcall里面调用Redis命令,key的位置,必须是keys array,否则直接返回error

2) 所有key,必须在一个slot上,否则直接返回error

7、必要情况下使用monitor命令时,要注意不要长时间使用

三、客户端使用

1、避免多个应用使用一个Redis实例, 不相干的业务拆分,公共数据做服务化

2、使用带连接池的数据库,可以有效控制连接,同时提高效率

3、在高并发下建议客户端添加熔断功能

4、设置合理的密码,如有必要可以使用SSL加密访问

5、根据自身业务列席,选好maxmemory-policy(最大内存淘汰策略),设置好过期时间。 默认策略是volatile-lru,即超过最大内存

后,在过期键中使用LRU算法进行key的剔除,保证不过期数据不被删除,但是可能出现OOM问题。

其他策略如下:

1) allkeys-lru  根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止

2)allkeys-random: 随机删除所有键,直到腾出足够空间为止

3)volatile-random: 随机删除过期键,直到腾出足够空间为止

4) volatile-ttl: 根据键值对象的ttl属性,删除最近将要过期数据,如果没有,回退到noeviction策略

5) noevition: 不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息,此时,Redis只响应读操作

redis开发规范阿里云的更多相关文章

  1. 阿里云 Redis 开发规范

    阿里云Redis开发规范-阿里云开发者社区 https://developer.aliyun.com/article/531067 https://mp.weixin.qq.com/s/UWE1Kx6 ...

  2. 完整阿里云Redis开发规范

    完整阿里云Redis开发规范 原文地址 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 删除bigkey 通过本文的介绍可以减少使用R ...

  3. 一份完整的阿里云 Redis 开发规范,值得收藏!

    来源:yq.aliyun.com/articles/531067 作者:付磊-起扬 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通 ...

  4. 阿里云Redis开发规范

    转自: https://yq.aliyun.com/articles/531067 摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计.命令使用.客户端使用.相关工具等方面进行说明,通过本 ...

  5. Redis系列(十一)--阿里云开发规范

    本文主要介绍阿里云Redis的开发规范,主要从以下几个方面说明: 1.键值设计 2.命令使用 3.客户端使用 4.相关工具 一.键值设计 1.key name设计 1).[建议]:可读性和可管理性 以 ...

  6. 阿里云Redis开发规范[转]

    一.键值设计 1. key名设计 (1)[建议]: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)[建议]:简洁性 ...

  7. 阿里云Redis开发规范(转)

    一.键值设计 1. key名设计 (1)[建议]: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video: (2)[建议]:简洁性 ...

  8. Redis 开发规范

    本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通过本文的介绍可以减少使用Redis过程带来的问题. 一.键值设计 1.key名设计 ...

  9. 2020阿里巴巴官方最新Redis开发规范!

    本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通过本文的介绍可以减少使用Redis过程带来的问题. 一.键值设计 1.key名设计 ...

随机推荐

  1. Django ormmodel模型字段参考文章

    Model 字段参考 (Model field reference)¶ 本文档包含所有 字段选项 (field options) 的内部细节和 Django 已经提供的 field types . 参 ...

  2. Web上传文件的三种解决方案

    第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname =  ...

  3. phpjm解密程序,也适用于其他混淆加密的破解

    <?php $file = 'plugin.php'; //要破解的文件 $fp = fopen($file, 'r'); $str = fread($fp, filesize($file)); ...

  4. 关于Spring中BeanUtils的一次使用问题记录

    1.问题描述:今天在进行前后端联调的时候,发现商品图片不能正常显示: 2.排查过程:查看浏览器控制台,发现调用接口返回的数据关于图片的字段未返回数据:      然后,又跑了一下Dao层的单元测试,从 ...

  5. (转)基于TLS证书手动部署kubernetes集群(下)

    转:https://www.cnblogs.com/wdliu/p/9152347.html 一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已 ...

  6. install mysql firewall

  7. Drone 的插件 - Docker 插件

    Drone 插件市场 Drone 插件文档 原文地址 - Docker 插件的手册 Docker 插件可以用于构建镜像及发布镜像到 Docker registry.下面的 pipeline 配置,就使 ...

  8. php 的定界符 <<<eof 的问题

    PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特 ...

  9. Recurrent Neural Network(2):BPTT and Long-term Dependencies

    在RNN(1)中,我们将带有Reccurent Connection的node依照时间维度展开成了如下的形式: 在每个时刻t=0,1,2,3,...,神经网络的输出都会产生error:E0,E1,E2 ...

  10. apt-get updete以及apt-get upgrade的区别

    You should first run update, then upgrade. Neither of them automatically runs the other. apt-get upd ...