云捕Redis实战

比特织云人
• 阅读 1301

本文由作者余宝虹授权网易云社区发布。

Redis是一个支持丰富数据结构的分布式key-value系统,Redis在云捕系统的地位相当重要,碰到的问题也比较多,最近才解决了一个遗留的老大难问题。由于15年的时候才接触到Redis,使用过程中姿势存在比较大的问题。在这里列举下面几个问题:

大Set问题
云捕中每天,每小时崩溃数,启动数的统计是通过Storm实时统计,将计算结果存到Redis中实现去重,然后定期将Redis中的数据汇总持久化到数据库中。

最初的实现方式是每个产品的崩溃,启动数都使用一个set来实现统计,set中存储的是设备ID。随着数据量的增加,这个set会变得非常大,会达到单机内存的极限,无法分散到多个节点,不利于扩容,最初云捕使用的物理机内存是32GB,经常会收到内存使用率的报警。分析大对象可以使用 --bigkeys 命令,NCR不支持。

当内存使用量到达maxmemory之后就会执行响应的缓存替换策略,默认是allkey-lru,所以当用于统计数据的set被删除后,就会出现崩溃数从0开始 统计的情况,出现统计数据丢失的问题。

改造前效果:

云捕Redis实战

为了使用NCR的扩容能力,就需要消除掉对大Set的依赖,改造后,采用的方法是:对每个设备ID生成一个key,计数增加之前会判断对应的设备ID key是否存在。采用这种方式后就会出现大量的key,所以在key的命名上也应该尽量简短。

protected void add(Jedis jedis, String key, String deviceId, long expireTime) {

expireTime /= 1000;
String value ="";
String member=key+":"+deviceId;    if (jedis.setnx(member, value) == 1) {
    jedis.incr(key);
  }
jedis.expireAt(member, expireTime);
jedis.expireAt(key, expireTime);

}
改造后效果:

云捕Redis实战

云捕Redis实战

CPU抖动
云捕存储在Redis中的统计数据具有时效性,每天的凌晨会将前一天的数据持久化到数据库,所以前一天的key都可以删掉。问题是如果大量的key都突发在同一时间失效的话,就会导致CPU使用率剧增,而且大Set删除时耗时更长,所以改进后key的失效时间采用随机化,分批的方式。

具体可以见DBA同学的文章 redis cpu 抖动问题分析 ,redis-faina redis性能问题诊断利器

应用自检
产品的崩溃数每天都是波动的,不利于发现系统的问题,所以云捕开启了一个定时发送崩溃数据的任务,每小时发送1000条,然后通过观察这个App的数据统计就可以感知到整个系统是否稳定。云捕Redis实战

重复写
将Redis中的数据持久化到数据库的过程中可能会出现网络波动,写入失败的情况,为了保证写成功,云捕中采用每小时重复写4次的策略,一方面重复写数据库比读取Redis重试的逻辑要简单,另一方面当出现网络问题的时候重试有可能反而会加剧这种情况。

更多网易技术、产品、运营经验分享请访问网易云社区。

文章来源: 网易云社区

点赞
收藏
评论区
推荐文章
把帆帆喂饱 把帆帆喂饱
2年前
Redis入门
Redis1、Redis概述Redis介绍Redis是一个开源的keyvalue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset–有序集合)和
Stella981 Stella981
3年前
Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
第1章redis存储系统1.1redis概述REmoteDIctionaryServer(Redis)是一个基于keyvalue键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务软件很像,但是redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列
Stella981 Stella981
3年前
Django 之redis的应用
redis概述redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表队列和栈,set集合,sortedset有序集合,hash(hash表))
Stella981 Stella981
3年前
Redis简介
Redis简介Redis是完全开源免费的,遵守BSD协议,是一个高性能的keyvalue数据库Redis与其他keyvalue缓存产品有以下三个特点:◆Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载使用。◆Redis不仅仅支持简单的keyvalue类型的数据,同时还提供list,set,z
Wesley13 Wesley13
3年前
ubuntu 下搭建redis和php的redis的拓展
系统环境:腾讯云服务器,ubuntu16.0.4.4,php7.0一.安装redis服务sudoaptgetinstallredisserver安装好的redis目录在/etc/redis\也可使用命令whereisredis查找\启动:sudoserviceredisserverst
Stella981 Stella981
3年前
Spring Boot(十二):看完这篇,Redis你就入门了
一、Redis简介1、Redis(RemoteDictionaryServer远程字段服务)是一个开源的使用ANSIC语言编写、支持网络、科技与内存亦可持久化的日志型、keyvalue数据库,并提供多种语言的API。2、Redis是一个keyvalue存储系统,它支持存储的value类型相对更多,包括string、list、set
Stella981 Stella981
3年前
Spring Boot 之 Redis详解
Redis是目前业界使用最广泛的内存数据存储。Redis支持丰富的数据结构,同时支持数据持久化。Redis还提供一些类数据库的特性,比如事务,HA,主从库。REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的keyvalue存储系统。!(http://img3.imgtn.
Stella981 Stella981
3年前
Redis快速入门,学会这15点,真的够用了!
1、Redis简介REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的keyvalue存储系统。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、KeyValue数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值
Stella981 Stella981
3年前
Redis的简介
Redis简介Redis是一个高性能的keyvalue数据库。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储...Redis是一个nosql,非关系型数据库。Redis与其他keyvalue缓存产品有以下几个特点:Reids是基于内存
天翼云分布式缓存服务(Redis)的几个核心概念
天翼云官方网站的Redis产品服务的定义如下:天翼云分布式缓存服务(DistributedCacheService,CTDCS)是天翼云打造的分布式keyValue数据库服务,兼容Redis协议,主要用于持久化数据的存储或缓存数据的存储。Redis本质上是一个KeyValue类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库
Redis 高可用方案
本文分享自天翼云开发者社区《》,作者:芋泥麻薯一、常见使用方式Redis的几种常见使用方式包括:•Redis单副本;•Redis多副本(主从);•RedisSentinel(哨兵);•RedisCluster;•dynomite;二、各种使用方式的优缺点1
比特织云人
比特织云人
Lv1
就算步伐很小,也要步步前进。
文章
4
粉丝
0
获赞
0