问号字符串是因为字符串里面有不可打印的字符。
举个例子,在 redis-cli 里这么做:
127.0.0.1:6379> setbit bits 7 1
(integer) 0
127.0.0.1:6379> setbit bits 8 1
(integer) 0
127.0.0.1:6379> get bits
"\x01\x80"
这里 \x01\x80 就是不可打印的。但是我们可以解析它。
关键是用 string.byte 把它转换成数字。
在 lua 代码可以这么写:
local redis = require "resty.redis"
local red = redis:new()
red:connect('127.0.0.1', 6379)
local s = red:get('bits')
if s == ngx.null then
return ''
end
for i = 1, #s do
local bit = s:byte(i)
print(bit) -- bit 取值范围 [0, 255]
-- 1
-- 128
end
剩下的就是写个函数,从 bit 转换成对应的 01 字符串。除以16取商和余,抑或用 bit.* 接口,然后查表获取。方法很多,我就不赘述了。
在 2017年1月13日星期五 UTC+8下午8:00:13,任羽飞写道:
我用setbit方法把位数据存入redis了,现在想获取到相应key的值的所有位信息,直接用get方法获取的是一串问号,由于长度不固定,所以按位取也不行。我想获取到的是类似‘1000111000’这种格式的字符串。有什么比较好的方法吗?另外:有没有比较完整的lua-resty-redis的案例?谢谢