首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis 如何存储上亿级别用户状态?

1 ---- 前段时间,在网上看到一道面试题: 如何用redis存储统计1亿用户一年的登陆情况,并快速检索任意时间窗口内的活跃用户数量。 觉得很有意思,就仔细想了下 。...用来存储一些对核心业务弱影响的用户状态信息还是非常不错的。 对于这题,有2个重要的点需要考虑: 1.如何用合适的数据类型来存储1亿用户的数据,用普通的字符串来存储肯定不行。...因为bitmap的每一位只占据1bit的空间 ,所以利用这个特性我们可以把每一天作为key,value为1亿用户的活跃度状态。假设一个用户一天内只要登录了一次就算活跃。...把用户Id作为偏移量(offset)。这样我们一个key就可以存储1亿用户的活跃状态。 ? 我们再来算下,这样一个位图结构的值对象占据多少空间。每一个位是1bit,一亿用户就是一亿bit。...O(1)] 如果要统计某一天的所有的活跃用户数,使用bitcount命令,bitcount可以统计1的个数,也就是活跃用户数: bitcount 2019-01-01 [时间复杂度为O(N)] 如果要统计某一段时间内的活跃用户

1.2K40

Redis 如何存储上亿级别用户状态?

前段时间,在网上看到一道面试题: 如何用redis存储统计1亿用户一年的登陆情况,并快速检索任意时间窗口内的活跃用户数量。 觉得很有意思,就仔细想了下 。并做了一系列实验,自己模拟了下 。...用来存储一些对核心业务弱影响的用户状态信息还是非常不错的。 对于这题,有2个重要的点需要考虑: 1.如何用合适的数据类型来存储1亿用户的数据,用普通的字符串来存储肯定不行。...因为bitmap的每一位只占据1bit的空间 ,所以利用这个特性我们可以把每一天作为key,value为1亿用户的活跃度状态。假设一个用户一天内只要登录了一次就算活跃。...把用户Id作为偏移量(offset)。这样我们一个key就可以存储1亿用户的活跃状态。 我们再来算下,这样一个位图结构的值对象占据多少空间。每一个位是1bit,一亿用户就是一亿bit。...O(1)] 如果要统计某一天的所有的活跃用户数,使用bitcount命令,bitcount可以统计1的个数,也就是活跃用户数: bitcount 2019-01-01 [时间复杂度为O(N)] 如果要统计某一段时间内的活跃用户

61520
您找到你想要的搜索结果了吗?
是的
没有找到

Redis 如何存储上亿级别用户状态?

1 ---- 前段时间,在网上看到一道面试题: 如何用redis存储统计1亿用户一年的登陆情况,并快速检索任意时间窗口内的活跃用户数量。 觉得很有意思,就仔细想了下 。...用来存储一些对核心业务弱影响的用户状态信息还是非常不错的。 对于这题,有2个重要的点需要考虑: 1.如何用合适的数据类型来存储1亿用户的数据,用普通的字符串来存储肯定不行。...因为bitmap的每一位只占据1bit的空间 ,所以利用这个特性我们可以把每一天作为key,value为1亿用户的活跃度状态。假设一个用户一天内只要登录了一次就算活跃。...把用户Id作为偏移量(offset)。这样我们一个key就可以存储1亿用户的活跃状态。 ? 我们再来算下,这样一个位图结构的值对象占据多少空间。每一个位是1bit,一亿用户就是一亿bit。...O(1)] 如果要统计某一天的所有的活跃用户数,使用bitcount命令,bitcount可以统计1的个数,也就是活跃用户数: bitcount 2019-01-01 [时间复杂度为O(N)] 如果要统计某一段时间内的活跃用户

62230

理解系统建模:概念级别、逻辑级别和技术级别

通常,系统建模会涉及三个主要的抽象级别:概念级别、逻辑级别和技术级别。这三个级别各有特点,互有联系,为系统的全面分析和实现提供了完整的视角。...工具和方法 用例图(Use Case Diagrams) 需求文档 业务流程图(Business Process Diagrams) 示例 假设我们要开发一个电商平台,概念级别的模型可能包括用户需求(如购物...、支付、评价等),商业目标(如提高销售额、增加用户粘性等)以及约束条件(如安全性、数据保密性等)。...、订单、用户等数据模型,以及购物车操作、支付流程等功能模型。...技术级别(Technical Level) 定义 技术级别是关于系统的“用什么”和“怎么实现”。这一级别涉及到具体的技术选型、实现细节和部署方案。

21710

隔离级别

什么是隔离级别? 隔离级别定义了一个事务可能受其他并发事务影响的程度。隔离级别的设置决定了数据库系统在并发环境下维持数据一致性的方式以及可能出现的问题(如脏读、不可重复读和幻读)。 2....为什么需要隔离级别? 隔离级别的需求源于事务处理的并发性和一致性之间的矛盾。较高的隔离级别可以提供更好的数据一致性保障,但可能会降低并发性能。较低的隔离级别则允许更高的并发,但可能导致数据一致性问题。...因此,需要根据应用的业务逻辑和性能需求来选择合适的隔离级别。 3. 隔离级别的实现原理? 不同的隔离级别通过使用锁定机制和时间戳技术(如 MVCC)来实现。...隔离级别的使用示例 以下 SQL 语句演示了如何设置隔离级别: -- 设置隔离级别为 READ COMMITTED SET TRANSACTION ISOLATION LEVEL READ COMMITTED...隔离级别的使用注意事项 业务需求分析:选择合适的隔离级别前,需要 分析业务逻辑对数据一致性的要求。

155100

Java对象级别与类级别的同步锁

对象级别的锁可以防止多个线程在运行时同时进入当前(或某一个)实例化对象的 synchronized代码块中。 1....对象级别的同步锁 对象级别的同步锁:当我们想要在多线程环境下同步执行一个非静态方法或非静态代码块时,在类的方法或代码块加上synchronized关键字,可以保证对象实例级别数据的线程安全。...(比较后文的类级别的同步锁,回头来理解这句话) 对象级别的加锁的代码如下,如:在方法上加锁,锁对象为当前类的实例化对象 public class DemoClass{ public synchronized...类级别的同步锁 类级别的锁可以防止多个线程在运行时进入该类所有实例化对象的 "synchronized块中。...为了保障静态数据线程安全,应该使用类级别的锁定。我们知道static关键字将方法的数据关联到类的级别上,所以在静态方法上使用锁。

1.3K20

mysql设置隔离级别_修改mysql事务隔离级别

Mysql默认的事务隔离级别是可重复读(Repeatable Read),那互联网项目中Mysql也是用默认隔离级别,不做修改么?...也就是说,我们该纠结都只有一个问题,究竟隔离级别是用读已经提交呢还是可重复读? 接下来对这两种级别进行对比,讲讲我们为什么选读已提交(Read Commited)作为事务隔离级别!...而在RC隔离级别下,不存在间隙锁,其他事务是可以插入数据! ps:在RC隔离级别下并不是不会出现死锁,只是出现几率比RR低而已! 缘由二:在RR隔离级别下,条件列未命中索引会锁表!...Oracle的默认隔离级别就是RC,你们改过Oracle的默认隔离级别么? 在RC级别下,主从复制用什么binlog格式? OK,在该隔离级别下,用的binlog为row格式,是基于行的复制!...总结 互联网项目请用:读已提交(Read Commited)这个隔离级别! 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

2.6K10

PHP爬虫源码:百万级别知乎用户数据爬取与分析

本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能访问。...当我们在浏览器的页面中点击一个用户头像链接进入用户个人中心页面的时候,之所以能够看到用户的信息,是因为在点击链接的时候,浏览器帮你将本地的cookie带上一齐提交到新的页面,所以你就能进入到用户的个人中心页面...可以看到,用户关注了的页面的url是: 不同的用户的这个url几乎是一样的,不同的地方就在于用户名那里。...因此就想到了使用Redis缓存来保存已经处理好的用户以及待抓取的用户。...这样每次执行完的时候都把用户push到一个already_request_queue队列中,把待抓取的用户(即每个用户的关注者和关注了的用户列表)push到request_queue里面,然后每次执行前都从

2.5K82

MySQL默认事物隔离级别_sqlserver事务隔离级别

mysql数据库事务的隔离级别有4个,而默认的事务处理级别就是【REPEATABLE-READ】,也就是可重复读。...下面本篇文章就来带大家了解一下mysql的这4种事务的隔离级别,希望对大家有所帮助。 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。...低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。...Oracle等多数数据库默认都是该级别 (不重复读) 3、可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。...视频教程推荐:《mysql教程》 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

3.2K20

事物隔离级别

事务隔离级别: @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(会出现脏读, 不可重复读) 基本不使用 @Transactional...Isolation.SERIALIZABLE):串行化 1.READ UNCIMMITTED(未提交读) 事务中的修改,即使没有提交,其他事务也可以看得到,比如说上面的两步这种现象就叫做脏读,这种隔离级别会引起很多问题...2.READ COMMITTED(提交读) 大多数数据库系统的默认隔离级别是READ COMMITTED,这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的...这种级别会出现读取旧数据的现象 例子:还是小明小华销售员,余票3张,A来小华那里请求3张订票单,小华接受订单,要卖出3张票,上面的销售步骤执行中的时候,B也来小明那里买票,由于小华的销售事务执行到一半,...,由于他大量加上锁,导致大量的请求超时,因此性能会比较底下,再特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别 脏读 :所谓的脏读,其实就是读到了别的事务回滚前的脏数据。

1.1K00

MySQL隔离级别

MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommitted) 是 是 是 不可重复读(read-committed) 否 是 是 可重复读(repeatable-read...但是在应用程序中,我们得代码可能会把18700提交给用户了,如果你一定要避免这情况小概率状况的发生,那么就要采取下面要介绍的事务隔离级别“串行化” mysql> select sum(balance)...serializable时会锁表,因此不会出现幻读的情况,这种隔离级别并发性极低,开发中很少会用到。...事务隔离级别为读提交时,写数据只会锁住相应的行 事务隔离级别为可重复读时,如果有索引(包括主键索引)的时候,以索引列为条件更新数据,会存在间隙锁间隙锁、行锁、下一键锁的问题,从而锁住一些行;如果没有索引...事务隔离级别为串行化时,读写数据都会锁住整张表 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。

1.9K10
领券