redis命令使用-jedis调用(Redis 键命令用于管理 redis 的键)

  |   0 评论   |   0 浏览
package com.songaw.redistest;

import com.alibaba.fastjson.JSON;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
 * @author songanwei
 * @description todo
 * @date 2022/3/17
 */
public class JedisKeyTest {
    public static void main(String[] args) {
        test1();
        // lpushTest();
        // lrangeTest();
    }

    /**
     * 基本使用
     */
    private static void test1() {
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接服务成功");
        //查看服务是否运行
        System.out.println("服务正在运行: "+jedis.ping());
        //1.基本使用
        String testKey="test_key";
        //设置key
        jedis.set(testKey,"test");

        //获取key
        String value=jedis.get(testKey);
        System.out.println("get 获取key:"+testKey+":"+value);

        //删除key
        jedis.del(testKey);
         value=jedis.get(testKey);
        System.out.println("del 删除key:"+testKey+":"+value);

        //序列化key
        //时间复杂度:查找给定键的复杂度为 O(1) ,对键进行序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小。如果序列化的对象是比较小的字符串,那么复杂度为 O(1) 。
        jedis.set(testKey,"test");
         byte[] bytes=jedis.dump(testKey);
        jedis.del(testKey+"1");

        //反序列化给定的序列化值,并将它和给定的 key 关联。 参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。
        String ok=jedis.restore(testKey+"1",0,bytes);
        System.out.println("dump 序列化key:"+new String(bytes)+"--正常值:"+jedis.get(testKey)+" \n restore 反序列化得到的结果:"+ok+" 值:"+jedis.get(testKey+"1"));

        //检查key是否存在
        System.out.println("exists 检查key是否存在: "+testKey+":"+jedis.exists(testKey));

        //为给定 key设置过期时间,以秒计
        jedis.expire(testKey,1);
        System.out.println("expire 为给定 key设置过期时间,检查key是否存在: "+testKey+":"+jedis.exists(testKey));
        try {
            System.out.println("expire 为给定 key设置过期时间,等待1秒");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("expire 为给定 key设置过期时间, 检查key是否存在: "+testKey+":"+jedis.exists(testKey));
//
        //EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
        Long result=jedis.expireAt(testKey,System.currentTimeMillis()/1000L+1);
        System.out.println("expireAt 为给定 key设置过期时间 操作结果"+result+", ttl 返回 key 的剩余过期时间: "+testKey+":"+jedis.ttl(testKey));
        try {
            System.out.println("expireAt 为给定 key设置过期时间,等待1秒");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //Redis TTL 命令以秒为单位返回 key 的剩余过期时间。 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
        System.out.println("expireAt 为给定 key设置过期时间, pttl 返回 key 的剩余过期时间(毫秒): "+testKey+":"+jedis.pttl(testKey));
        System.out.println("expireAt 为给定 key设置过期时间, ttl 返回 key 的剩余过期时间(秒): "+testKey+":"+jedis.ttl(testKey));


        //设置 key 的过期时间以毫秒计。
        jedis.del(testKey);
        jedis.set(testKey,"test");
         result=jedis.pexpire(testKey,1000);
        System.out.println("pexpire 设置 key 的过期时间以毫秒计。"+result+"pttl 返回 key 的剩余过期时间(毫秒): "+testKey+":"+jedis.pttl(testKey));

        //设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
        jedis.del(testKey);
        jedis.set(testKey,"test");
        result=jedis.pexpireAt(testKey,System.currentTimeMillis()+2000);
        System.out.println("pexpireAt 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计。"+result+"pttl 返回 key 的剩余过期时间(毫秒): "+testKey+":"+jedis.pttl(testKey));

        //移除 key 的过期时间,key 将持久保持。
        jedis.persist(testKey);

        System.out.println("persist 移除 key 的过期时间,key 将持久保持。。"+result+"pttl 返回 key 的剩余过期时间(毫秒): "+testKey+":"+jedis.pttl(testKey));

        //查找所有符合给定模式( pattern)的 key 。

       Set<String> keysSet= jedis.keys("test*");
        System.out.println("keys 查找所有符合给定模式( pattern)的 key 。test*: "+keysSet);

        //Redis Move 命令 用于将当前数据库的 key 移动到给定的数据库 db 当中。
        //移动成功返回 1 ,失败则返回 0 。
        //移动一个不存在的 key 到其他数据库 则返回0
        //因为两个数据库有相同的 key,MOVE 失败
        System.out.println("select 0 : "+jedis.select(0));
        System.out.println("move testKey 1 : "+jedis.move(testKey,1));
        System.out.println("exists 0  testKey : "+ jedis.exists(testKey));
        System.out.println("select 1 : "+jedis.select(1));
        System.out.println("exists 1 testKey : "+ jedis.exists(testKey));

        // 从当前数据库中随机返回一个 key 。
        jedis.set(testKey+"2","test2");
        jedis.set(testKey+"3","test3");
        jedis.set(testKey+"4","test4");
        jedis.set(testKey+"5","test5");
        jedis.set(testKey+"6","test6");
        jedis.set(testKey+"7","test7");
        String key= jedis.randomKey();
        System.out.println(key);

        //rename 修改 key 的名称 改名成功时提示 OK ,失败时候返回一个错误。
        //当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。
        String resultStr = jedis.rename(testKey+"2",testKey+"7");
        System.out.println("rename 修改 key 的名称 :"+resultStr+"--"+jedis.get(testKey+"7"));

        //Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。
        //修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。
        result = jedis.renamenx(testKey+"3",testKey+"5");
        Long result2 = jedis.renamenx(testKey+"3",testKey+"8");
        System.out.println("renamenx 修改 key 的名称 :result:"+result+"--"+jedis.get(testKey+"5")+"---result2:"+result2+"--"+jedis.get(testKey+"8"));

        //Redis SCAN 命令 用于迭代数据库中的数据库键。
        //SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
        //SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
        //cursor - 游标。
        //pattern - 匹配的模式。
        //count - 指定从数据集里返回多少元素,默认值为 10 。
        jedis.select(3);
        for(int i=0;i<20;i++){
            jedis.set(testKey+i,"test"+i);
        }
        ScanParams scanParams=new ScanParams();
        scanParams.count(5);
        scanParams.match("test*");
        List<String> keyList=new ArrayList<>();
        String cursor="0";
        ScanResult<String>  stringScanResult=jedis.scan(cursor,scanParams);
        keyList.addAll(stringScanResult.getResult());
        while (!cursor.equals(stringScanResult.getStringCursor())){
            String tempCursor=stringScanResult.getStringCursor();
            stringScanResult=jedis.scan(tempCursor,scanParams);
            keyList.addAll(stringScanResult.getResult());
        }
        Collections.sort(keyList);
        System.out.println(keyList);

        //type key 返回 key 所储存的值的类型。
        jedis.select(0);
        System.out.println("type "+jedis.type(testKey));


    }
}


标题:redis命令使用-jedis调用(Redis 键命令用于管理 redis 的键)
作者:不断努力的青春
地址:http://songaw.com/articles/2022/03/17/1647511946799.html