一、键值设计

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. Redirecting to /bin/systemctl restart mysql. service Failed to restart mysql.service: Unit not found.

    使用如下命令操作mysql即可: systemctl restart mysqld.service systemctl start mysqld.service systemctl stop mysq ...

  2. 关于SQL Server系统数据库详解

    介绍这里我们介绍SQL Sever内部的系统数据库的作用和用户数据库之间联系,关于SQL Sever如何管理用户数据库的原理,对于每个数据库开发人员和DBA都是必须掌握的. SQL Sever系统数据 ...

  3. js 和jquery

    1. js 全称 javascript 是 web客户端 运行的 解释性语言.. 2. jquery 只不过是 js 封装 简化了 ajax 和 dhtml 的 一款js 框架而已. 简单来说 Jqu ...

  4. python保存selenium的cookies写入和读出

    def write_cookie(self, cookie): try: with open("cookies%s" % self.uid, "wb+") as ...

  5. IBatis.Net 下使用SqlBulkCopy 大批量导入数据 问题解决

    SQLBulkCopy是继承SQLClient空间下的一个特殊类,它可以帮助我们以映射的方式把DataTable和DataReader数据大批量导入到数据库对应表中 public void Inert ...

  6. Codeforces 86D Powerful array (莫队)

    D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input standard i ...

  7. python判断list中是否包含某个元素

    python判断list中是否包含某个元素 theList = ['a','b','c'] if 'a' in theList: print 'a in the list' if 'd' not in ...

  8. UML 类图快速入门

    UML 图形 官方定义 UML 类图(Class Diagram) UML 时序图(Sequence Diagram) 领域 UML 类图和实现 UML 类图 领域 UML 类图 实现 UML 类图 ...

  9. 11 (H5*) js第1天 基本数据类型、变量

    目录 1:  js的介绍 2:写js代码注意的地方 3:变量 4:变量的命名和作用 5:变量的类型 6:Number类型 7:string类型 8:类型转换 9:操作符号 复习 <script& ...

  10. 机器学习实战_基于Scikit-Learn和Tensorflow读书笔记

    第一部分 机器学习基础 第二部分 神经网络和深度学习 第9章 运行Tensorflow 分布式系统:分布式系统的定义是这个系统建立在网络的操作系统,具有高度的内聚性和透明性,它与网络的区别在于高层软件 ...