redis面试获取缓存键

2019-06-03  本文已影响0人  gzss

        初看这个题目,很自然的想到使用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方式

上一篇 下一篇

猜你喜欢

热点阅读