阿里云Redis的规范:键值设计、命令使用、客户端使用、相关工具.docx
《阿里云Redis的规范:键值设计、命令使用、客户端使用、相关工具.docx》由会员分享,可在线阅读,更多相关《阿里云Redis的规范:键值设计、命令使用、客户端使用、相关工具.docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、阿里云Redis的规范:键值设计、命令使 用、客户端使用、相关工具本文主要介绍在使用阿里云Redis的开发规范,从下面几个 方面进行说明。键值设计命令使用客户端使用相关工具通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1、key名设计可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔, 比方业务名:表名:idugc:video:1简洁性保证语义的前提下,控制key的长度,当key较多时,内存 占用也不容忽视,例如:user: (uid): friends:Messages: id筒化为u: uid :fraid*不要包含特殊字符反例:包含空格、换行、单
2、双引号以及其他转义字符2、value 设计拒绝bigkey防止网卡流量、慢查询,string类型控制在10KB以内,hash、 list、set、zset元素个数不要超过5000。反例:一个包含200万个元素的listo非字符串的bigkey,不要使用del删除,使用hscan、sscan zscan方式渐进式删除,同时要注意防止bigkey过期时间自 动删除问题(例如一个200万的zset设置1小时过期,会触发 del操作,造成阻塞,而且该操作不会不出现在慢查询中 (latency可查),查找方法和删除方法选择适合的数据类型例如:实体类型(要合理控制和使用数据结构内存编码优化 配置,例如zi
3、plist,但也要注意节省内存和性能之间的平衡) 反例:set user:1:tonset user:1:age 19set user:1:favor football hvset user: 1 name toi age 19 favor football控制key的生命周期redis不是垃圾桶,建议使用expire设置过期时间(条件允许 可以打散过期时间,防止集中过期),不过期的数据重点关 注 idletime o二、命令使用1、O(N)命令关注N的数量例如 hgetall、 lrange smembers zrange sinter 等并非不能 使用,但是需要明确N的值。有遍历的需求可以
4、使用hscan、 sscan zscan 代替。2、禁用命令禁止线上使用 keys、flushall、flushdb 等,通过 redis 的 rename 机制禁掉命令,或者使用scan的方式渐进式处理。3、合理使用selectredis的多数据库较弱,使用数字进行区分,很多客户端支持 较差,同时多业务用多数据库实际还是单线程处理,会有干 扰。4、使用批量操作提高效率原生命令:例如mget mseto非原生命令:可以使用pipeline提高效率。但要注意控制一次批量操作的元素个数(例如500以内,实 际也和元素字节数有关)。注意两者不同:原生是原子操作,pipeline是非原子操作。pipe
5、line可以打包不同的命令,原生做不到 pipeline需要客户端和服务端同时支持。5、不建议过多使用Redis事务功能Redis的事务功能较弱(不支持回滚),而且集群版本(自研和 官方)要求一次事务操作的key必须在一个slot上(可以使用 hashtag功能解决)6、Redis集群版本在使用Lua上有特殊要求1、所有key都应该由KEYS数组来传递,redis.call/pcall里 面调用的redis命令,key的位置,必须是KEYS array,否那么 直接返回 error, -ERR bad lua script for redis cluster, all the keys tha
6、t the script uses should be passed using the KEYS arrayrnn 2、所有key,必须在1个slot上,否那么直接返回error, -ERR eval/evalsha command keys must in same slotrnn。 另 夕卜, 搜索公众号顶级科技后台回复“API接口”,获取一份惊喜礼 包。7、monitor 命令必要情况下使用monitor命令时,要注意不要长时间使用。三、客户端使用1、防止多个应用使用一个Redis实例不相干的业务拆分,公共数据做服务化。2、使用连接池可以有效控制连接,同时提高效率,标准使用方式:执行命
7、令如下:jedis jedis = null;try (jedis jedi$PoolgetResource();/ /畲.jedis.executeCommand() catch (Exception e) logger.error(Mop key error: + e.getMessage()j key, e);J finally注意这里不是关闭连接,在ledisPool模式下,Jedis会被归还给资源池.if (jedis != null)jedis.close();3、熔断功能高并发下建议客户端添加熔断功能(例如netflix hystrix)4、合理的加密设置合理的密码,如有必要可以
8、使用SSL加密访问(阿里云Redis支持)色色隹色珍色牛逼啊!接私活必备的N个开源工程!赶快收藏吧5、淘汰策略根据自身业务类型,选好maxmemory-policy(最大内存淘汰 策略),设置好过期时间。默认策略是volatile-lru,即超过最大内存后,在过期键中使 用Iru算法进行key的剔除,保证不过期数据不被删除,但 是可能会出现OOM问题。其他策略如下:allkeys-lru:根据LRU算法删除键,不管数据有没有设置超 时属性,直到腾出足够空间为止。allkeys-random:随机删除所有键,直到腾出足够空间为止。 volatile-random:随机删除过期键,直到腾出足够空间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 阿里 Redis 规范 键值 设计 命令 使用 客户端 相关 工具
限制150内