首页 > 数据库 >redis 规则设置

redis 规则设置

时间:2023-12-05 09:44:37浏览次数:35  
标签:解释 设置 ops redis Redis appapi key 规则

  1. 必须明确应用场景,1)作为缓存还是存储;2)数据丢失对应用的影响
    1. 解释:与持久化关系数据库(MySQL通过Redo可保证数据不丢)不同,Redis在故障时会丢失分钟级别数据,业务必须确保不会受到影响
  2. 禁止命令:keys、flushall、flushdb;针对大key禁止命令:hgetall,hkeys,smembers,lindex 0 -1
    1. 解释1:Redis为单线程服务,上述命令会造成实例阻塞,业务高峰时可能引发雪崩
    2. 解释2:flushall、flushdb命令会造成数据彻底丢失,无法恢复
  3. 不允许频繁访问的大key存在:单条数据不超过100KB,避免网卡被打满
    1. 解释:历史真实线上故障,单个key接近1MB,促销时ops超过100,生产千兆网卡(1000Mbps = 128MBps)机器流量直接被打满
  4. 对于超过100KB但必须使用的低频key(后台管理操作、低峰worker),必须在业务前缀前增加标识
    1. 实例:bigkey.appapi.xxxxxx
  5. list/set/hash 等类型数据,item/member/field个数需限制在10万以下
    1. 解释:此类key占用内存大,无论查询数、删除还是TTL自动超时,都可能造成实例阻塞
    2. 建议:将field数目超过10万的hash按照field拆分成多个key,以便水平扩展,并规避hgetall流量风险
  6. 为key设置TTL,建议TTL不应超过3个月
    1. 解释:Redis是内存DB,成本很高,应该只用于存取『临时热数据』,不经常访问的数据必须可以自动过期
  7. Java程序直接通过官方Jedis客户端连接,不建议使用Sharded Jedis
    1. 解释:生产上遇到的一例线程池阻塞问题可能是Sharded Jedis相关bug引起
  8. 通过(域名:端口号)访问集群,禁止直接使用(ip:端口号)
    1. 示例:rm6381.jxq.db.dmall.com:6381
    2. 解释:Redis高可用是通过切换域名来实现的
  9. Redis性能很高,建议单个应用实例连接池最大连接数配置不超过16
    1. 解释:相同IDC单次ops一般1ms内,一个连接可以输出1000 ops,16个连接保守估计可以输出15000以上ops,可以满足绝大多数业务需求
    2. 其他推荐参数配置:
      1. testOnBorrow=false
      2. testOnReturn=false
      3. testWhileIdle=true
  10. 可读性和可管理性:key必须包含可识别的业务前缀,以方便统计、订正数据,推荐使用『.』或『_』或『:』与业务key隔开
    1. 示例:appapi.xxxxxx 或者 appapi_xxxxxx 或者 appapi:xxxxxx
    2. 对于bitmap类型,由于redis将其存储为string,建议key中隐含类型,比如:MEDUSA:BITMAP:PAY_ORDER_USER:20180327
  11. Redis的多数据库较弱,禁止使用select命令切换db
  12. 尽量不使用pub/sub,建议通过MQ来满足生产者/消费者业务场景
    1. 解释:可以持久化的MQ可以提供更高的性能、并持久化数据
    2. 分片集群twemproxy不支持pub/sub
  13. Redis分片集群(Twemproxy)命令支持列表:https://github.com/twitter/twemproxy/blob/master/notes/redis.md

标签:解释,设置,ops,redis,Redis,appapi,key,规则
From: https://www.cnblogs.com/liyanbofly/p/17876538.html

相关文章

  • redisTest
    importjava.util.Map;importredis.clients.jedis.Jedis;publicclassredisTest{/***@paramargs*/publicstaticJedisjedis;publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubjedis=newJedis(&qu......
  • Sentinel——热点规则
    目录热点规则配置热点规则API配置热点规则热点规则热点规则是用于实现热点参数限流的规则。热点参数限流指的是,在流控规则中指定对某方法参数的QPS限流后,当所有对该资源的请求URL中携带有该指定参数的请求QPS达到了阙值,则发生限流。配置热点规则controllerpackagecom.......
  • redis2
    redis为什么这么快1、纯内存操作,避免io操作2、单线程架构(数据读写)避免了线程,进程间切换3、使用了io多路复用网络模型-io模型-同步io-异步io-io多路复用-poll-epoll-select读写都是单线程,不需要锁,不会......
  • 【Azure Redis】中国区Redis在东三区的资源无法在通过门户上与北三区资源之间建立灾备
    问题描述为应用启用灾备管理,在北三区建立了一个AzureRedis,同时,在东三区也建立了一个同样的Prem级Redis服务。但是在建立灾备(DR:DiseaseRecovery)时候,却无法选择东三区的资源。 问题解答目前(2023-12-05),中国Azure的东三区是作为北三区的AvailableZone存在的,普通的用户是......
  • vscode自动保存设置为afterDelay后prettier不生效
    "files.autoSave":"afterDelay""editor.formatOnSave":true这两个配置不能一起使用解决方法:1.将"afterDelay"修改为“onFocusChange"2.设置成onFocusChange或者onWindowChange3.关闭重启vscode 参考文件:files.autoSaveandeditor.formatOnSave  ......
  • Sentinel——授权规则
    授权规则授权规则是一种通过对请求来源进行甄别的鉴权规则。规则规定了哪些请求可以通过访问,而哪些请求则是被拒绝访问的。而这些请求的设置是通过黑白名单来完成的。无论是黑名单还是白名单,其实就是一个请求来源名称列表。出现在来源黑名单中的请求将被拒绝访问,而其它来源的请......
  • java 操作redis更新子节点数据
    1.引入Jedis依赖确保在你的Java项目中引入了Jedis依赖。你可以使用Maven添加以下依赖:<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.11.1</version></dependency>2.示例代码importredis......
  • Sentinel——流控规则
    流控规则流控规则是用于完成服务流控的。服务流控即对访问流量的控制,也称为服务限流。Sentine实现流控的原理是监控应用流量的QPS或并发线程数等指标,当达到指定的值时对再到来的请求进行进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。设置流控规则代码设置......
  • 安装mysql报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (
    @目录当前状态报错解决办法:当前状态目前已经启动好mysql服务:systemctlstartmysqldsystemctlstatusmysqld生成临时密码grep'temporarypassword'/var/log/mysqld.log报错出现了报错:ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpass......
  • C# winform 获取屏幕分辨率缩放率,获取屏幕设置分辨率
    解决问题:1)当需要抓取显示器分辨率的缩放比例时。2)当屏幕显示缩放设置不等于100%,导致分辨率改变,Screen.PrimaryScreen.Bounds抓取不到实际设置的分辨率时。解决方案:使用GetDeviceCaps函数。///<summary>///设备数据函数///</summary>///......