redis

前面有简单学习过redis,此处扩展之.. 阿里云redis开发规范

redis工具

数据同步:redis-port

big-key搜索

参考:工具汇总

命令行

redis-cli --bigkeys

find_bigkeys.py

阿里云基于python工具,按key值长度

python find_bigkey.py host port password

rdb_bigkeys

基于go实现的分析rdb文件查找big-key工具

big-key删除

//1、Hash删除: hscan + hdel
public void delBigHash(String host, int port, String password, String bigHashKey) {
    Jedis jedis = new Jedis(host, port);
    if (!StringUtils.isBlank(password)) { jedis.auth(password); }
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<Entry<String, String>> scanResult = jedis.hscan(bigHashKey, cursor, scanParams);
        List<Entry<String, String>> entryList = scanResult.getResult();
        if (entryList != null && !entryList.isEmpty()) {
            for (Entry<String, String> entry : entryList) { jedis.hdel(bigHashKey, entry.getKey()); }
        }
        cursor = scanResult.getStringCursor();
    } while (!"0".equals(cursor));

    jedis.del(bigHashKey); //删除bigkey
}
//2、List删除: ltrim
public void delBigList(String host, int port, String password, String bigListKey) {
    Jedis jedis = new Jedis(host, port);
    if (!StringUtils.isBlank(password)) { jedis.auth(password); }
    long llen = jedis.llen(bigListKey);
    int counter = 0, left = 100;
    while (counter < llen) {
        jedis.ltrim(bigListKey, left, llen); //每次从左侧截掉100个
        counter += left;
    }
    jedis.del(bigListKey); //最终删除key
}
//3、Set删除: sscan + srem
public void delBigSet(String host, int port, String password, String bigSetKey) {
    Jedis jedis = new Jedis(host, port);
    if (!StringUtils.isBlank(password)) { jedis.auth(password); }
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<String> scanResult = jedis.sscan(bigSetKey, cursor, scanParams);
        List<String> memberList = scanResult.getResult();
        if (memberList != null && !memberList.isEmpty()) {
            for (String member : memberList) { jedis.srem(bigSetKey, member); }
        }
        cursor = scanResult.getStringCursor();
    } while (!"0".equals(cursor));

    jedis.del(bigSetKey);//删除bigkey
}
//4、SortedSet删除: zscan + zrem
public void delBigZset(String host, int port, String password, String bigZsetKey) {
    Jedis jedis = new Jedis(host, port);
    if (!StringUtils.isBlank(password)) { jedis.auth(password); }
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<Tuple> scanResult = jedis.zscan(bigZsetKey, cursor, scanParams);
        List<Tuple> tupleList = scanResult.getResult();
        if (tupleList != null && !tupleList.isEmpty()) {
            for (Tuple tuple : tupleList) { jedis.zrem(bigZsetKey, tuple.getElement()); }
        }
        cursor = scanResult.getStringCursor();
    } while (!"0".equals(cursor));
 
    jedis.del(bigZsetKey); //删除bigkey
}

UNLINK
Redis 4.0.0已提供UNLINK命令异步删除大key
命令行:UNLINK key [key ...]

热点key搜索

命令行

redis-cli --hotkeys

monitor

redis-faina

posted @ 2020-08-16 09:47  万箭穿心,习惯就好。  阅读(138)  评论(0编辑  收藏  举报