所以我为我的Redis实现添加了按键,这样的壁纸视图计数...... (这些值用于演示目的,但整体格式相同)
SADD wallpapers:100:2015-12-31 "127.0.0.1"
SADD wallpapers:100:2016-01-01 "127.0.0.1"
SADD wallpapers:100:2016-01-01 "192.168.1.1"
SADD wallpapers:100:2016-01-02 "127.0.0.1"
这样就应该在关联的集合中添加IP。所以我的问题是,他们是否允许某种基于模式的计数?
SCARD wallpapers:100:2016:01-01
例如,上面的命令将返回" 2",因为集合中存储了两个IP,但有没有办法运行类似下面的命令来获取所有日期的所有计数?
SCARD wallpapers:100:*
答案 0 :(得分:1)
实际上它比你想象的要容易:存储较少的特定集合以便能够得到你想要的东西。
例如,如果您需要wallpapers:100:*
,则表示您只需要一个名为wallpapers:100
的 set ,您可以在其中存储唯一的IP地址。
也就是说,每当您将IP地址添加到其中一个特定集(即每日集)时,也会将其添加到给定壁纸标识符的全局集。
Redis就像使用手动索引一样。以有效使用数据的方式索引数据。就这样!这意味着数据冗余是一种很好的方法。
答案 1 :(得分:0)
EVAL "local total = 0 for _, key in ipairs(redis.call('keys', ARGV[1])) do total = total + redis.call('scard', key) end return total" 0 wallpapers:100:*
此命令返回键wallpapers:100:*
中元素的总数。
如果您想要组合所有键的唯一值总数,
EVAL "return redis.call('SUNIONSTORE', 'wallpapers:temp', unpack(redis.call('keys', ARGV[1])))" 0 wallpapers:100:*
这将返回所有组合键中唯一值的数量,并创建一个键wallpapers:temp
您可以稍后删除此密钥del wallpapers:temp
我使用SUNIONSTORE作为第二个命令。
参考EVAL。