一、键值设计

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. [转] SQL datediff (时间差)

    DATEDIFF 函数 [日期和时间] 功能 返回两个日期之间的间隔. 语法 DATEDIFF ( date-part, date-expression-1, date-expression-2 ) ...

  2. php面试专题---7、文件及目录处理考点

    php面试专题---7.文件及目录处理考点 一.总结 一句话总结: 用脑子:基本文件操作和目录操作了解一波,不必强求 1.不断在文件hello.txt头部写入一行“Hello World”字符串,要求 ...

  3. UCenter 与 DIscuz 通信失败的解决方法

    问题状况:Discuz 用户无法成功修改头像且帖子中上传的图片无法保存.进入 Discuz 后台检查,一切正常:进入 UCenter 检查后发现在"应用管理"中与 Discuz 论 ...

  4. memcpy复制字符串的注意事项/memcpy不能用来拷贝类类型

    strcpy复制src到dst,最后将dst的下一个位置置为'\0',所以dst是以'\0'结尾的字符串 ] = "abcde"; cout << c1 << ...

  5. jdk (Java Development Kit)

    JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JD ...

  6. Mac009--Axure RP安装

    Mac--Axure RP安装 一.下载Axure RP8.0 下载网址:https://www.axure.com/download  (下载mac版本) Axure RP说明: Axure RP是 ...

  7. MySQL-第八篇MySQL内置函数

    1.根据函数对多行数据的处理方式,可以分为: 1>单行函数:对每行输入值进行单独计算,每行得到一个计算结果返回给用户.  2>多行函数:聚集函数.分组函数,主要用于完成一些统计功能.对多行 ...

  8. 【洛谷p1217】回文质数

    回文质数[题目链接] 始终要记得凌云壮flag(真香) 说是个搜索,其实感觉更像是一个暴力: 这个题的难度并不是特别大,因为下面的提示太明显了qwq,(而且之前培训也讲过)首先是构造回文数,构造回文数 ...

  9. vmware linux root密码破解

    centOS: 1.开机过程按上下箭头键,让系统不要进入到引导程序中, 2.按 'e' 进入到编辑模式 3.找到linux16开始的首行,在末尾加入'rw init=/bin/sh' (会出现修改密码 ...

  10. 使用jdbc查询防止出现中文乱码的方法

    在使用mysql创建数据库及表格,在navicat中可以正常查询出中文,但使用jdbc查询的结果中,中文为乱码. 网上查到资料,为了能够彻底一劳永逸的解决这个问题,需要修改mysql下配置文件my.i ...