理解 Redis setbit
2014-03-20 18:49
411 查看
初看这个指令有点疑惑。以下是相关的学习笔记,希望有用。
这个http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ 是一个使用场景,国内也有翻译的。
setbit
给这个key分配0-n个bit。N取决于最大的offset值。后面就可以在任意位置上读取或者设定位值。N最大值是2的32次方-1,也就是4G。实现的时候,每个位置对于一个位,4G个位空间需要4G/8个字符串位置,也就是512m内存空间来做这个事情J. 灵活运用这个特性可做些特别的事情。比如统计活跃用户:我们不需要单独为每个用户id存一个char(0或者1)—redis只需要一个bit就行。这样,能直接知道任意用户是否是活跃的。当然,如果只是关心总数而不是每个用户的具体情况,value部分直接维护一个int值即可。通过INCR指令即可实现。
为避免服务的过程中因内存申请造成服务器阻塞,可考虑预先执行一下给可能的最大值设0来进行预热。
问题回答
这个http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ 是一个使用场景,国内也有翻译的。
setbit
给这个key分配0-n个bit。N取决于最大的offset值。后面就可以在任意位置上读取或者设定位值。N最大值是2的32次方-1,也就是4G。实现的时候,每个位置对于一个位,4G个位空间需要4G/8个字符串位置,也就是512m内存空间来做这个事情J. 灵活运用这个特性可做些特别的事情。比如统计活跃用户:我们不需要单独为每个用户id存一个char(0或者1)—redis只需要一个bit就行。这样,能直接知道任意用户是否是活跃的。当然,如果只是关心总数而不是每个用户的具体情况,value部分直接维护一个int值即可。通过INCR指令即可实现。
为避免服务的过程中因内存申请造成服务器阻塞,可考虑预先执行一下给可能的最大值设0来进行预热。
问题回答
相关文章推荐
- C#中接口的理解
- 对第一范式(1NF) 第二范式(2NF) 第三范式(3NF)的理解
- 从生产线到生产岛:理解敏捷开发中的设计与测试活动
- 对于递归的个人理解(1)
- 理解Javascript的闭包
- css行高line-height的一些深入理解及应用
- jsvm代码理解
- Android源码分析-全面理解Context
- Android中pendingIntent的深入理解
- 理解SVG坐标系统和变换: transform属性
- (转)深刻理解Linux进程间通信(IPC)
- 彻底理解Gradle的任务
- 深入理解HTTP协议、HTTP协议原理分析
- 深入理解学习Git工作流
- (转)十步完全理解 SQL
- Android设计模式——Builder模式 -- 助于理解所有 类似NotificationCompat.Builder [*.Builder] 模式调用
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
- 深入理解java异常处理机制
- 一些插值法及理解
- 深入理解awgn函数如何向信号中添加高斯白噪声