小编典典

在Redis位图上获取操作返回奇怪的输出

redis

我正在redis中进行setbit操作,以标记特定日期哪些用户在线。

我正在做一个redis get操作来获取密钥的值。

coffee> redis.setbit "a",7,1
true
coffee> redis.setbit "d",4,1
true
coffee> redis.setbit "g",1,1
true
coffee> redis.setbit "h",0,1

输出是

coffee> redis.get "a",(err,res)->console.log res.toString().charCodeAt(0)
true
coffee> 1

coffee> redis.get "d",(err,res)->console.log res.toString().charCodeAt(0)
true
coffee> 8

coffee> redis.get "g",(err,res)->console.log res.toString().charCodeAt(0)
true
coffee> 64

coffee> redis.get "h",(err,res)->console.log res.toString().charCodeAt(0)
true
coffee> 65533

我的问题是在“ h”键处设置了第0位1。它应该返回128但返回65533。为什么这样?

我的最终目标是从redis中以二进制形式获取位图,以便我可以确定在特定日期哪些用户处于活动状态。


阅读 256

收藏
2020-06-20

共1个答案

小编典典

发生此错误是由于utf-8编码。当我们将第0位设置为1时,它不遵循utf-8规则。现在,当我们尝试获取它时,我们得到了替换角色

U + FFFD-替换字符,用于替换未知或无法表示的字符

当我们对它执行charCodeAt时,将得到65533。

在此处阅读UTF-8特殊Unicode块

2020-06-20