初看这个题目,很自然的想到使用redis的keys命令即可得到缓存中键的值,但是如果更进一步如果缓存中的键过大时会不会产生问题,以及解决方式是怎样的?
我们简单分析下这个问题点,首先缓存的键比较大或者说比较多的情况,因为redis是单线程模型,缓存过大时使用keys命令会使redis出现卡顿现象。此时使用keys来获取键的值就不是一个好的方式。这种情况我们可以使用scan命令来获取。
scan是采用迭代的方式来获取缓存中键的值,每次查询的数量不一定,但是可以设置一个参数在控制每次查询的数量接近于这个数,即当你设置查询的数量为10时,那每次查询出来的数量可能是8,7,11,反正就接近于这个数,所以在数据量大的时候使用scan,当数据量小时可以使用keys。
具体使用方式如下简单代码:
public classTest{
public static void main(String[] args) {
Set<String> test = RedisClientManagement.getInstance().scan(new Key("test"), 1000, "test:*");
RedisClientManagement.getInstance().scan(new Key("test"), 1000, "test:*", (result) -> {
for (String rs : result) {
// .... }
return true;
});
}
}
分为两种方式
1、一次性返回scan结果
2、使用callback方式
网友评论