redis开发使用规范
redis开发使用规范
1、冷热数据分离,不要将所有数据全部都放在Redis中
根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数据可以使用mysql等基于磁盘的存储方式。
不仅节省内存成本,而且数据量小操作时速度更快,效率更高。
2、不同的业务数据要分开存储
不要将不相关的业务数据都放到一个Redis实例中,建议新业务申请新的单独实例。因为Redis为单线程处理,
独立存储会减少不同业务相互操作的影响,提高请求响应速度;同时也避免单个实例内存数据量膨胀过大,
在出现异常情况时可以更快恢复服务!简言之,不同业务数据要分开存储,尽可能的独立使用,
而不是多个业务共享同一redis实例。
3、规范Key的格式
合适的Key,便于查看,统计,排错。
不推荐含义不清的Key和特别长的Key。例如:"平台缩写"+":"+"项目名"+":"+"业务含义"。
例如:CRM:STUDENTS:USERINFO
":" 作为key分隔符,方便客户端工具作为目录分级
保证语义的前提下,控制 key 的长度,当 key 较多时,内存占用也不容忽视。
不要包含特殊字符。例如:包含空格、换行、单双引号以及其他转义字符
另外可参考一下几点说明:
有一套能区分业务归属的命名规范,key前缀是发生内存暴涨,性能问题时的分析定位问题的可行基础,Key的命名规范建议:
第1个字符小写定义数据类型:
string —>s,Hash—>h,Set—>s,Zset —>z,List —>l,Geo—>g
第2,3字符定义公开的业务分类:
第4-10个字符定义部门类的业务线细分
推荐的key中可使用符号.:#
不推荐使用的有:\ ? * {} [] ()
例:hCMappnode.product.detail:1312342
4、value设计时,拒绝 bigkey。
string 类型控制在 10KB 以内,hash、list、set、zset 元素个数不要超过 5000
5、对于必须要存储的大文本数据一定要压缩后存储
6、线上Redis禁止使用Keys正则匹配操作
7、所有的key设置过期时间(比如可设置过期时间10天,特殊要求除外)
8、list的长度最大长度不超过1万,size不超过1G
9、string类型value长度不超过10M
10、不使用多个db,只使用db0,如果要区分业务线,在配置文件里定义各业务线使用的前缀
redis开发使用规范的更多相关文章
- 完整阿里云Redis开发规范
完整阿里云Redis开发规范 原文地址 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 删除bigkey 通过本文的介绍可以减少使用R ...
- 阿里云 Redis 开发规范
阿里云Redis开发规范-阿里云开发者社区 https://developer.aliyun.com/article/531067 https://mp.weixin.qq.com/s/UWE1Kx6 ...
- ASP.NET Redis 开发
文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高 ...
- ASP.NET c# Redis 开发
Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...
- Android开发代码规范(转)
Android开发代码规范 1.命名基本原则 在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...
- java开发命名规范(转载)
java开发命名规范 使用前注意事项: 1. 由于Java面向对象编程的特性, 在命名时应尽量选择名词 2. 驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而 ...
- Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...
- ym——Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下J ...
- 你不可不看的Android开发命名规范
标识符命名法最要有四种: Camel(骆驼)命名法:除首单词外,其余所有单词的第一个字母大写,如:fooBar; Pascal命名法:所有单词的第一个字母大写,如:FooBar: 下划线命名法:单词与 ...
随机推荐
- React-Native中props用法详解
props就是属性,是为了描述一个组件的特征而存在的.它是父组件传递给子组件的. 使用props 通过上一个页面传递 新建一个 PropsTest.js 文件 1 2 3 4 5 exprot def ...
- Day01:对象和类(上)
对象的概念 Java 是面向对象的编程语言,对象就是面向对象程序设计的核心.所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念.对象有以 ...
- python3的base64编解码
使用python3的base64编解码实现字符串的简易加密解密 引言: 在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应 ...
- javascript异步延时加载及判断是否已加载js/css文件
<html> <head> <script type="text/javascript"> /**======================= ...
- scrapy存储mysql
scrapy 数据存储mysql #spider.pyfrom scrapy.linkextractors import LinkExtractor from scrapy.spiders imp ...
- 解决Linux下SSH超时自动断开
title: 解决Linux下SSH超时自动断开 comments: false date: 2019-08-19 19:22:55 description: Linux 下 SSH 超时自动断开?? ...
- 关于React中props与state的一知半解
props props英文翻译是道具的意思,我个人理解为参数,如果我们将react组件看作是一个函数,那么props便是函数接收外部数据所使用的参数.props具有以下特性: 1.不可变(只读性) p ...
- js获取两个经纬度之间的角度(0度-360度)
/** * 获取角度 */mapNumberUtil.getAngle = function(lng_a,lat_a, lng_b, lat_b){ var a = (90 - lat_b) * Ma ...
- Ajax轮询请求
Ajax轮询请求 什么是轮询? 轮询(polling):客户端按规定时间定时向服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. Ajax轮询需要服务器有很快的处理速度与快速响应. ...
- ajax传输数组类型的参数
$.ajax({ type:"post", traditional: true, data:{arr:arr}, url:"${pageContext.request.c ...