我正在开发用户活动功能,我每天都会跟踪用户的活动。我正在考虑使用位图,因此当天活跃的用户将被设置为1。
SETBIT users:2015:9:30 <userid> 1
我不想为每个用户做GETBIT。我想以二进制形式检索整个值,以便我可以遍历它并找到活动或非活动用户。
我想知道这种方法是否正确以及使用哪个节点模块。
答案 0 :(得分:0)
Redis中的位数组存储为字符串。要获取整个数组,只需执行常规GET并从结果中解析字节。
答案 1 :(得分:0)
要获取bitarray,您应该将return_buffers设置为true,然后对其执行get操作,这将为您提供一个缓冲区对象。将此缓冲区对象转换为十六进制字符串,然后遍历它。
我的解决方案
neoredis = require 'redis'
key = "h"
map =
"0":[]
"1":[3]
"2":[2]
"3":[2,3]
"4":[1]
"5":[1,3]
"6":[1,2]
"7":[1,2,3]
"8":[0]
"9":[0,3]
"a":[0,2]
"b":[0,2,3]
"c":[0,1]
"d":[0,1,3]
"e":[0,1,2]
"f":[0,1,2,3]
usersbufferobject = null
redis = neoredis.createClient(6379,'redis',{return_buffers:true})
redis.get key,(err,res)->
redis.quit()
if not err?
if res?
usersbufferobject = res.toString('hex')
users = []
offset = 0
arr = usersbufferobject.match(/.{1,2}/g)
for i in arr
for j in map[i[0]]
users.push(offset+j)
for j in map[i[1]]
users.push(offset+4+j)
offset+=8
console.log "Active Users",users
else
console.log "No users active"
process.exit()