Redis 笔记之 Java 操作 Redis(Jedis)

环境准备

引入依赖

<!--引入jedis连接依赖-->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.9.0</version>
</dependency>

创建 jedis 对象

Centos 7 关闭防火墙:

systemctl stop firewalld.service

开启远程连接:详见 Redis入门之Redis安装、配置及常用指令

/**
 * 测试 Redis 连接
 */
public class TestRedis {
    public static void main(String[] args) {
        // 1.创建 jedis 对象
            // redis服务必须关闭防火墙
            // redis服务必须开始远程连接
        Jedis jedis = new Jedis("192.168.3.65", "6379");
        // 2.执行相关操作
        jedis.select(0); // 选择操作的数据库, 默认0号
        // ......
        // 3.释放资源
        jedis.close();
    }
}

操作 Key 相关 API

DEL 指令

  • 语法 : DEL key [key ...]
  • 作用 : 删除给定的一个或多个 key,不存在的 key 会被忽略。
  • 可用版本: >= 1.0.0
  • 返回值: 被删除 key 的数量。

EXISTS 指令

  • 语法: EXISTS key
  • 作用: 检查给定 key 是否存在。
  • 可用版本: >= 1.0.0
  • 返回值: 若 key 存在,返回1 ,否则返回0。

EXPIRE 指令

  • 语法: EXPIRE key seconds
  • 作用: 为给定 key 设置生存时间(秒),当 key 过期时(生存时间为 0),它会被自动删除。
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 返回值:设置成功返回 1 。

KEYS 指令

  • 语法 : KEYS pattern
  • 作用 : 查找所有符合给定模式 pattern 的 key 。
  • 语法:
    KEYS *:匹配数据库中所有 key 。
    KEYS h?llo:匹配 hello ,hallo 和 hxllo 等。
    KEYS h*llo:匹配 hllo 和 heeeeello 等。
    KEYS h[ae]llo: 匹配 hello 和 hallo ,但不匹配 hillo 。特殊符号用 \ 隔开
  • 可用版本: >= 1.0.0
  • 返回值: 符合给定模式的 key 列表。

MOVE 指令

  • 语法 : MOVE key db
  • 作用 : 将当前数据库的 key 移动到给定的数据库 db 当中。
  • 可用版本: >= 1.0.0
  • 返回值: 移动成功返回 1 ,失败则返回 0 。

PEXPIRE 指令

  • 语法 : PEXPIRE key milliseconds
  • 作用 : 这个命令和 EXPIRE 命令的作用类似,但是它以 毫秒 为单位设置 key 的生存时间
    EXPIRE 以秒为单位)
  • 可用版本: >= 2.6.0
  • 时间复杂度: O(1)
  • 返回值:设置成功,返回1。key 不存在或设置失败,返回0

PEXPIREAT 指令

  • 语法 : PEXPIREAT key milliseconds-timestamp
  • 作用 : 这个命令和 EXPIREAT 命令类似,但它以 毫秒 为单位设置 key 的过期 unix 时间戳(EXPIREAT 以秒为单位)
  • 可用版本: >= 2.6.0
  • 返回值:如果生存时间设置成功,返回 1 。当 key 不存在或没办法设置生存时间时,返回 0 。
    (查看EXPIRE 命令获取更多信息)

TTL 指令

  • 语法 : TTL key
  • 作用 : 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
  • 可用版本: >= 1.0.0
  • 返回值:
    当 key 不存在时,返回 -2 。
    当 key 存在但没有设置剩余生存时间时,返回 -1 。
    否则,以秒为单位,返回 key 的剩余生存时间。
  • Note : Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

PTTL 指令

  • 语法 : PTTL key
  • 作用 : 这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间
    (TTL 以秒为单位)
  • 可用版本: >= 2.6.0
  • 返回值: 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。
  • 否则,以毫秒为单位,返回 key 的剩余生存时间。
  • 注意 : Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

RANDOMKEY 指令

  • 语法 : RANDOMKEY
  • 作用 : 从当前数据库中随机返回(不删除) 一个 key 。
  • 可用版本: >= 1.0.0
  • 返回值:当数据库不为空时,返回一个 key 。当数据库为空时,返回 nil

RENAME 指令

  • 语法 : RENAME key newkey
  • 作用 : 将 key 改名为 newkey 。
    当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
    当 newkey 已经存在时,RENAME 命令将覆盖旧值。
  • 可用版本: >= 1.0.0
  • 返回值: 改名成功时提示OK ,失败时候返回一个错误。

TYPE 指令

  • 语法 : TYPE key
  • 作用 : 返回 key 所储存的值的类型。
  • 可用版本: >= 1.0.0
  • 返回值:
    none:key 不存在
    string:字符串
    list:列表
    set:集合
    zset:有序集
    hash:哈希表
public class TestKeys {
    private Jedis jedis;
    @Before
    public void before() {
    	// 连接开启了redis服务的虚拟机
        jedis = new Jedis("192.168.3.65", 6379);
    }
    @After
    public void after() {
        jedis.close();
    }
    @Test
    public void testKeys() {
        // 删除一个key
        jedis.del("name");
        // 删除多个key
        jedis.del("name", "age");

        // 设置一个key
        jedis.set("age", "hello");

        // 判断一个key是否存在
        Boolean name = jedis.exists("name");
        System.out.println(name);

        // 设置一个key超时时间
        Long age = jedis.expire("age", 100);
        System.out.println(age);

        // 获取一个key超时时间
        Long ttl = jedis.ttl("age");
        System.out.println(ttl);

        // 随机获取一个key
        String s = jedis.randomKey();

        // 修改key名称
        jedis.rename("age", "newage");

        // 查看对应值的类型
        String type1 = jedis.type("name");
        System.out.println(type1);
        String type2 = jedis.type("maps");
        System.out.println(type2);
    }
}

操作 String 相关 API

命令说明
set设置一个key/value
get根据key获得对应的value
mset一次设置多个key value
mget一次获得多个key的value
getset获得原始key的值,同时设置新值
strlen获得对应key存储value的长度
append为对应key的value追加内容
getrange 索引0开始截取value的内容
setex设置一个key存活的有效期(秒)
psetex设置一个key存活的有效期(毫秒)
setnx存在不做任何操作,不存在添加
msetnx原子操作(只要有一个存在不做任何操作)可以同时设置多个key,只要有一个存在都不保存
decr进行数值类型的-1操作
decrby根据提供的数据进行减法操作
incr进行数值类型的+1操作
incrby根据提供的数据进行加法操作
incrbyfloat根据提供的数据加入浮点数
public class TestString {
    private Jedis jedis;
    @Before
    public void before() {
        jedis = new Jedis("192.168.3.65", 6379);
    }
    @After
    public void after() {
        jedis.close();
    }
    @Test
    public void testString() {
        jedis.set("name", "zhenyu"); // set

        String name = jedis.get("name"); // get
        System.out.println(name);

        jedis.mset("content", "好人", "address", "苏州市"); // mset

        List<String> mget = jedis.mget("name", "content", "address"); // mget
        mget.forEach(v -> System.out.println("v = " + v));

        String set = jedis.getSet("name", "yusael");
        System.out.println(set);

        // ...
    }
}

操作 List 相关 API

命令说明
lpush将某个值加入到一个key列表头部
lpushx同lpush,但是必须要保证这个key存在
rpush将某个值加入到一个key列表末尾
rpushx同rpush,但是必须要保证这个key存在
lpop返回和移除列表左边的第一个元素
rpop返回和移除列表右边的第一个元素
lrange获取某一个下标区间内的元素
llen获取列表元素个数
lset设置某一个指定索引的值(索引必须存在)
lindex获取某一个指定索引位置的元素
lrem删除重复元素
ltrim保留列表中特定区间内的元素
linsert在某一个元素之前,之后插入新元素
public class TestList {
    private Jedis jedis;
    @Before
    public void before() {
        jedis = new Jedis("192.168.3.65", 6379);
    }
    @After
    public void after() {
        jedis.close();
    }
    @Test
    public void testList() {

        jedis.flushDB(); // 清除当前数据库

        jedis.lpush("names1", "1", "2", "3", "4", "5"); // lpush
        jedis.rpush("names1", "a", "b", "c", "d", "e"); // rpush

        List<String> names1 = jedis.lrange("names1", 0, -1);
        names1.forEach(v -> System.out.println("name = " + v));

        String name = jedis.lpop("names1"); // lpop rpop
        System.out.println(name); // 5

        System.out.println(jedis.llen("names1")); // llen

        // names1 中 2 左边插入一个 world
        Long linsert = jedis.linsert("names1", BinaryClient.LIST_POSITION.BEFORE, "2", "world");// linsert
        System.out.println("linsert: " + linsert);
        names1 = jedis.lrange("names1", 0, -1);
        names1.forEach(v -> System.out.println("name = " + v));

        // ...
    }
}

操作 Set 的相关 API

命令说明
sadd为集合添加元素
smembers显示集合中所有元素 无序
scard返回集合中元素的个数
spop随机返回一个元素 并将元素在集合中删除
smove从一个集合中向另一个集合移动元素 必须是同一种类型
srem从集合中删除一个元素
sismember判断一个集合中是否含有这个元素
srandmember随机返回元素
sdiff去掉第一个集合中其它集合含有的相同元素
sinter求交集
sunion求和集
public class TestSet {
    private Jedis jedis;
    @Before
    public void before() {
        jedis = new Jedis("192.168.3.65", 6379);
    }
    @After
    public void after() {
        jedis.close();
    }
    @Test
    public void testSet() {
        jedis.sadd("names","zhangsan", "lisi");

        Set<String> names = jedis.smembers("names");
        names.forEach(v -> System.out.println("v = " + v));

        Boolean sismember = jedis.sismember("names", "zhenyu");
        System.out.println(sismember);
    }
}

操作 ZSet 相关 API

命令说明
zadd添加一个有序集合元素
zcard返回集合的元素个数
zrange 升序 zrevrange 降序返回一个范围内的元素
zrangebyscore按照分数查找一个范围内的元素
zrank返回排名
zrevrank倒序排名
zscore显示某一个元素的分数
zrem移除某一个元素
zincrby给某个特定元素加分
public class TestZSet {
    private Jedis jedis;
    @Before
    public void before() {
        jedis = new Jedis("192.168.3.65", 6379);
    }
    @After
    public void after() {
        jedis.close();
    }
    @Test
    public void testZSet() {
        jedis.zadd("zset", 8, "张三");
        jedis.zadd("zset", 5, "李四");
        jedis.zadd("zset", 7, "王五");
        jedis.zadd("zset", 2, "赵六");
        jedis.zadd("zset", 33, "Win7");
        jedis.zadd("zset", 6, "Win8");
        jedis.zadd("zset",  77, "Win9");

        Set<String> names = jedis.zrange("zset", 0, -1);
        names.forEach(v -> System.out.println("v = " + v +", zscore = " + jedis.zscore("zset", v)));

        Long zcard = jedis.zcard("zset");
        System.out.println(zcard);

        names = jedis.zrangeByScore("zset", "0", "100", 0, 5);
        names.forEach(v -> System.out.println("v = " + v +", zscore = " + jedis.zscore("zset", v)));
    }
}

操作 Hash 相关 API

命令说明
hset设置一个key/value对
hget获得一个key对应的value
hgetall获得所有的key/value对
hdel删除某一个key/value对
hexists判断一个key是否存在
hkeys获得所有的key
hvals获得所有的value
hmset设置多个key/value
hmget获得多个key的value
hsetnx设置一个不存在的key的值
hincrby为value进行加法运算
hincrbyfloat为value加入浮点值
public class TestHash {
    private Jedis jedis;
    @Before
    public void before() {
        jedis = new Jedis("192.168.3.65", 6379);
    }
    @After
    public void after() {
        jedis.close();
    }
    @Test
    public void testHash() {
        jedis.hset("maps","name","zhangsan");

        Map<String, String> map = new HashMap<>();
        map.put("age", "12");
        map.put("content", "好人");
        jedis.hmset("maps", map);

        String maps = jedis.hget("maps", "name");
        System.out.println(maps);
        Map<String, String> all = jedis.hgetAll("maps");
        all.forEach((k, v) -> System.out.println("k = " + k + ", v = " + v));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌宅鹿同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值