redis位图巧用,节约内存】的更多相关文章

最近要做一个圣诞抽奖活动,需要记录每天用户签到的记录,以前一般都是用普通的字符串数据类型,每个用户的签到用一个 key // 用户10在活动第一天的签到key为record:1:10 $key = "record:$day:$id"; if ($redis->get($key)) { echo '已签到'; } else { $redis->set($key, 1) } 那么一个用户一天的签到记录就要占一个字节,用户一多就产生非常多的 key,浪费宝贵的内存. 位图 为了解…
序言 资料 https://www.cnblogs.com/luke44/p/12031078.html…
一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库 三.主流解Cache和数据库对比: 从以上各数据可知,对于我们产品最可行的技术方案有两种:          1.Memcached         内存Key-Value Cache          2.Redis                     内存数据库 四,节约内存:Instagram的Redi…
原文:巧用redis位图存储亿级数据与访问 - 简书 业务背景 现有一个业务需求,需要从一批很大的用户活跃数据(2亿+)中判断用户是否是活跃用户.由于此数据是基于用户的各种行为日志清洗才能得到,数据部门不能提供实时接口,只能提供包含用户及是否活跃的指定格式的文本由业务方使用. 存在的挑战 海量数据如何尽可能用小的空间存储 如何能快速获取指定的数据 如何能快速的写入到目标存储 解决思路 由于我的业务中只需要根据某个用户id查询是否是活跃用户,不存在复杂的查询条件,所以用redis很合适. 如此大的…
Instagram可以说是网拍App的始祖级应用,也是当前最火热的拍照App之一,Instagram的照片数量已经达到3亿,而在Instagram里,我们需要知道每一张照片的作者是谁,下面就是Instagram团队如何使用Redis来解决这个问题并进行内存优化的. 首先,这个通过图片ID反查用户UID的应用有以下几点需求: 查询速度要足够快 数据要能全部放到内存里,最好是一台EC2的 high-memory 机型就能存储(17GB或者34GB的,68GB的太浪费了) 要合适Instagram现有…
Instagram可以说是网拍App的始祖级应用,也是当前最火热的拍照App之一,Instagram的照片数量已经达到3亿,而在Instagram里,我们需要知道每一张照片的作者是谁,下面就是Instagram团队如何使用Redis来解决这个问题并进行内存优化的. 首先,这个通过图片ID反查用户UID的应用有以下几点需求: 查询速度要足够快 数据要能全部放到内存里,最好是一台EC2的 high-memory 机型就能存储(17GB或者34GB的,68GB的太浪费了) 要合适Instagram现有…
场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满3天领取奖励1,满5天领取奖励2,满7天领取奖励3……等等. 显示用户某个月的签到次数和首次签到日期. 在日历控件上展示用户每月签到情况,可以切换年月显示……等等. 设计思路 对于用户签到数据,如果每条数据都用Key/Value的方式存储,当用户量大的时候内存开销是非常大的.而位图(BitMap)是…
场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满3天领取奖励1,满5天领取奖励2,满7天领取奖励3--等等. 显示用户某个月的签到次数和首次签到时间. 在日历控件上展示用户每月签到情况,可以切换年月显示--等等. 设计思路 对于用户签到数据,如果每条数据都用K/V的方式存储,当用户量大的时候内存开销是非常大的.而位图(BitMap)是由一组bit…
Redis位图法记录在线用户的状态 位图 Redis官方文档对于位图的介绍如下: 位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合.由于字符串类型是二进制安全的二进制大对象,并且最大长度是 512MB,适合于设置 2^32个不同的位. 位操作分为两组:常量时间单个位的操作,像设置一个位为 1 或者 0,或者获取该位的值.对一组位的操作,例如计算指定范围位的置位数量. 位图的最大优势是有时是一种非常显著的节省空间来存储信息的方式.例如,在一个系统中,不同用户由递增的用户 ID…
Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要. 高效利用Redis内存首先需要理解Redis内存消耗在哪里,如何管理内存,最后才能考虑如何优化内存. 一.内存消耗 有些内存消耗是必不可少的,而有些可以通过参数调整和合理使用来规避内存浪费. 内存消耗可以分为进程自身消耗和子进程消耗. 1.内存使用统计 root@bigjun:~# redis-cli > info memory # Memory used_…