前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何保证redis里都是热点数据呢&&Memcache与Redis的区别

如何保证redis里都是热点数据呢&&Memcache与Redis的区别

作者头像
名字是乱打的
发布2021-12-22 15:06:34
5130
发布2021-12-22 15:06:34
举报
文章被收录于专栏:软件工程

MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略

redis 提供 6种数据淘汰策略: 大体上:是可以从设置过期时间数组集里挑选最少使用的或者将要过期的或者任意数据淘汰,也可以禁止淘汰 具体的:

  • voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据

二 。如果某个key太特码热了怎么办?

假设某个key太热了,比如iphone旗舰款手机发布了,我们上架了,大家都查这个手机信息,那么在多master结构中,这个key一直打到统一redis里,可能有个几十万并发,妈的,即使从库用来读,那从库不够redis也扛不住啊。

怎么办呢?业内有哪些常规方案?

2.1如何发现热key?

  • 方法一:业务评估 比如根据商品品类,或者其他智能打标算法,提前设置好商品的热度
  • 方法二:在客户端进行收集(比如trace统计热搜) 这个方式就是在操作redis之前,加入一行代码进行数据统计。那么这个数据统计的方式有很多种,也可以是给外部的通讯系统发送一个通知信息。缺点就是对客户端代码造成入侵。
  • 方法三:在Proxy层做收集

有些集群架构是上面这样的,Proxy可以是Twemproxy,是统一的入口。可以在Proxy层做收集上报,但是缺点很明显,并非所有的redis集群架构都有proxy。

  • 方法四:用redis自带命令 (1)monitor命令,该命令可以实时抓取出redis服务器接收到的命令,然后写代码统计出热key是啥。当然,也有现成的分析工具可以给你使用,比如redis-faina。但是该命令在高并发的条件下,有内存增暴增的隐患,还会降低redis的性能。 (2)hotkeys参数,redis 4.0.3提供了redis-cli的热点key发现功能,执行redis-cli时加上–hotkeys选项即可。但是该参数在执行的时候,如果key比较多,执行起来比较慢。
  • 方法五:自己抓包评估 Redis客户端使用TCP协议与服务端进行交互,通信协议采用的是RESP。自己写程序监听端口,按照RESP协议规则解析数据,进行分析。缺点就是开发成本高,维护困难,有丢包可能性。

以上五种方案,各有优缺点。根据自己业务场景进行抉择即可。那么发现热key后,如何解决呢

2.2 发现热key后如何解决热key问题?

  • 利用二级缓存,对热key做本地缓存
  • 路由热key,对热key进行每个redis的同步,然后取数据进行加随机数然后hash到结点上
  • 热key单独开服务器,热key数量少,读请求多,我们就多搞从库让他使劲读去

上面第二节热key问题发现方案来自https://www.cnblogs.com/rjzheng/p/10874537.html

三 .Memcache与Redis的区别都有哪些?

1)、存储方式

Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。

Redis有部份存在硬盘上,这样能保证数据的持久性

2)、数据支持类型

Memcache对数据类型支持相对简单。

Redis有复杂的数据类型。

3)、使用底层模型不同

它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。

Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4),value大小

redis最大可以达到1GB,而memcache只有1MB

redis相比memcached有哪些优势?

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

(2) redis的速度比memcached快很多

(3) redis可以持久化其数据

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/9/10 上,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
  • 二 。如果某个key太特码热了怎么办?
    • 2.1如何发现热key?
      • 2.2 发现热key后如何解决热key问题?
      • 三 .Memcache与Redis的区别都有哪些?
      相关产品与服务
      云数据库 Redis®
      腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档