阿里推荐的Redis使用规范,Redis就要这么用

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

一、键值设计
1、key名设计
可读性和可管理性
以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id
0306D0A6_BF40_4c9e_8636_93F593FEA671
2、value设计
拒绝bigkey
防止网卡流量、慢查询,string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
反例:一个包含200万个元素的list。
非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)),查找方法和删除方法
选择适合的数据类型
例如:实体类型(要合理控制和使用数据结构内存编码优化配置,例如ziplist,但也要注意节省内存和性能之间的平衡)
反例:
2751C162_BC96_4adc_9C4A_F4F5DBB00F7E
控制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、使用批量操作提高效率
原生命令:例如mget、mset。
非原生命令:可以使用pipeline提高效率。
但要注意控制一次批量操作的元素个数(例如500以内,实际也和元素字节数有关)。
注意两者不同:
原生是原子操作,pipeline是非原子操作。
pipeline可以打包不同的命令,原生做不到
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 that the script uses should be passed using the KEYS arrayrn" 2、所有key,必须在1个slot上,否则直接返回error, "-ERR eval/evalsha command keys must in same slotrn"
7、monitor命令
必要情况下使用monitor命令时,要注意不要长时间使用。

三、客户端使用

1、避免多个应用使用一个Redis实例
不相干的业务拆分,公共数据做服务化。
2、使用连接池
可以有效控制连接,同时提高效率,标准使用方式:

9A215956_4773_426d_B5AE_B7AC9B443542

3、熔断功能
高并发下建议客户端添加熔断功能(例如netflix hystrix)
4、合理的加密
设置合理的密码,如有必要可以使用SSL加密访问(阿里云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只响应读操作。
四、相关工具
1、数据同步
redis间数据同步可以使用:redis-port
2、big key搜索
redis大key搜索工具
3、热点key寻找
内部实现使用monitor,所以建议短时间使用facebook的redis-faina 阿里云Redis已经在内核层面解决热点key问题
五、删除bigkey
下面操作可以使用pipeline加速。
redis 4.0已经支持key的异步删除,欢迎使用。
1、Hash删除: hscan + hdel

2CA43C10_7E87_4332_8D2C_55243D482150
9FAC244D_0AD5_4165_8128_26784BA61D1F
E213D929_9C67_4ad7_8367_8D608141E9EB
6E7C71EC_A092_4e0f_8194_8CB0D58C6E1E

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-28
本文作者:Java微服务
本文来自:“互联网架构师 微信公众号”,了解相关信息可以关注“互联网架构师

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
缓存 NoSQL Linux
面试必备:一线大厂Redis设计规范与性能优化
本文梳理了在使用Redis过程需要遵循的一些最佳实践,包括针对架构维度的一些深入性能优化的知识,如果面试官问你:"说下在使用Redis的过程中,需要注意哪些规范?",如果你按照本文的思路回答,肯定能让面试官眼前一亮,offer自然就到手了。
78 0
面试必备:一线大厂Redis设计规范与性能优化
|
1月前
|
存储 NoSQL Java
阿里面试官问我Redis怎么实现分布式锁
分布式锁一般有三种实现方式:
60 0
|
1月前
|
缓存 监控 NoSQL
|
1月前
|
缓存 运维 NoSQL
Redis 很屌,不懂使用规范就糟蹋了
Redis 很屌,不懂使用规范就糟蹋了
85 0
|
1月前
|
缓存 NoSQL Java
互联网疯传的Redis学习笔记:收藏达到30W,阿里P7评论我很需要
Redis作为目前的主流NoSql数据库,不会是不可能的,在面试中也是非常高频的,一定不能在这个环节丢分,不管是学习,还是面试,以下知识点,都有必要掌握。
|
6月前
|
存储 NoSQL 中间件
阿里技术专家亲码:满干货“Redis核心笔记”,全篇无尿点
Redis(Remote DictionaryService)是互联网技术领域使用最为广泛的存储中间件,也就是「远程字典服务」。Redis以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。
|
8月前
|
缓存 运维 NoSQL
“阿里味”的「Redis核心实践全彩手册」给你,还学不会就转行吧
面过大厂资深技术岗的人都知道,Redis 基本上是必考点。比如: · Redis 常见的性能问题有哪些?该如何解决?——性能相关 · Redis 缓存的雪崩、击穿、穿透到底是什么意思?如何应对?——缓存相关 · Redis 主从集群常见的问题有哪些?该如何解决?——可用性相关 · 现有 Redis 实例,保存数量 6GB,未来预计会扩展到 32GB,请你提供一个解决方案,并分析它优点和潜在问题?——可扩展性相关
|
8月前
|
消息中间件 缓存 NoSQL
硬核!GitHub置顶102W字Redis高手心法笔记,阿里竟第一时间收藏
天下武功,⽆坚不可摧,唯快不破! 学习⼀个技术,通常只接触了零散的技术点,没有在脑海⾥建⽴⼀个完整的知识框架和架构体系,没有系统观。这样会很吃⼒,⽽且会出现⼀看好像⾃⼰会,过后就忘记,⼀脸懵逼。
|
8月前
|
缓存 NoSQL Java
吹爆!阿里最新开源的这份Redis全栈小册,涵盖了Redis的所有操作
前言 Redis这玩意不用多说,Java后端打工人就没有没接触过的,现在出去面试基本上是必问项;而且在工作中在项目中还能起很大的作用。它不仅能减少数据库的操作、并且你还可以利用redis的一些数据结构如set sorted set 解决一些特定的问题、利用单线程实现分布式锁、一些简单的订阅发布等等。 当然,这些你都会的话,那说明你只是停留在会用的阶段。如果你想要精通redis,并想在面试的中凭借Redis俘获面试官的芳心的话。除了会用以外,还要去掌握redis一些基本的原理如压缩表、跳跃表、哨兵模式、集群、高可用,这样可以让你更好的使用redis,保证缓存利用最大化、资源最优化。掌握这些你在
103 0
|
9月前
|
缓存 NoSQL Java
阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂
前言: 金九银十刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及我在这方面学习的经验。 阿里微服务面试真题 1.单片,SOA 和微服务架构有什么区别? 单片 SOA 和微服务之间的比较 – 微服务访谈问题 单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密封装。 一个面向服务的架构是一种相互通信服务的集合。通信可以涉及简单的数据传递,也可以涉及两个或多个协调某些活动的服务。 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型
76 0