package com.yh; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.params.SetParams; import java.util.HashMap; import java.util.Map; public class TestRedis { private Jedis jedis; @Before public void init() { //连接本地的 Redis 服务 jedis = new Jedis("localhost"); System.out.println("连接成功"); } @Test public void testList() { // 有序,链表结构 System.out.println(jedis.lpush("list1", "v1", "v2", "v3", "v4")); // 4 从左边添加 System.out.println(jedis.rpush("list2", "v1", "v2", "v3", "v4")); // 4 从右边添加 System.out.println(jedis.lrange("list1", 0, -1)); // [v4, v3, v2, v1] System.out.println(jedis.lrange("list2", 0, -1)); // [v1, v2, v3, v4] System.out.println(jedis.rpop("list1")); // v1 删除最后一个元素 System.out.println(jedis.lpop("list2")); // v1 删除第一个元素 } @Test public void testSet() { // 无序,不可重复 jedis.sadd("set1", "v1", "v2", "v3", "v4"); System.out.println(jedis.smembers("set1")); // 获取所有成员 System.out.println(jedis.sismember("set1", "v1")); // 判断是否存在 jedis.sadd("set2", "v1", "v3", "v5", "v7"); System.out.println(jedis.sdiff("set1", "set2")); // 输出第一个有,后面没有的(差集) System.out.println(jedis.sinter("set1", "set2")); // 输出两个都有的(交集) System.out.println(jedis.sunion("set1", "set2")); // 输出两个总和(并集) } @Test public void testZSet() { // 有序集合 Map<String, Double> map = new HashMap<>(); map.put("k1", 20d); map.put("k2", 30d); map.put("k3", 15d); map.put("k4", 25d); System.out.println(jedis.zadd("zset", map)); // 4 System.out.println(jedis.zrange("zset", 0, -1)); // [k3, k1, k4, k2] System.out.println(jedis.zrangeWithScores("zset", 0, -1)); // [[k3,15.0], [k1,20.0], [k4,25.0], [k2,30.0]] } @Test public void testHash(){ Map<String, String> map = new HashMap<>(); map.put("k1", "v1"); map.put("k2", "v2"); map.put("k3", "v3"); System.out.println(jedis.hset("hash", "","")); // 4 System.out.println(jedis.hkeys("hash")); // [k3, k1, k4, k2] System.out.println(jedis.hvals("hash")); // [k3, k1, k4, k2] System.out.println(jedis.hgetAll("hash")); // [k3, k1, k4, k2] } @Test public void testString() { System.out.println(jedis.set("k1", "v1")); // OK System.out.println(jedis.get("k1")); // v1 System.out.println(jedis.del("k1")); // 1 System.out.println(jedis.append("k1", "v12")); // 3 key不存在时,append相当于set System.out.println(jedis.append("k1", "v123")); // 7 System.out.println(jedis.get("k1")); // v12v123 System.out.println(jedis.strlen("k1")); // 7 System.out.println(jedis.mset("k1", "v1", "k2", "v2", "k3", "v3")); // OK 和逐条添加的不同点在于这是原子性操作 System.out.println(jedis.mget("k1", "k2", "k3")); // [v1,v2,v3] System.out.println(jedis.setnx("k1", "v4")); // 0 先判断key是否存在,存在则不创建 System.out.println(jedis.setex("k1", 66, "v4")); // OK 增加过期时间(秒) System.out.println(jedis.ttl("k1")); // 返回距离过期的剩余时间 SetParams setParams = new SetParams(); // 相当于设置一个规范,可应用到其他键值对 setParams.ex(100); // 过期时间100s setParams.nx(); // 创建键值对之前先判断是否存在,存在则不创建 System.out.println(jedis.set("k1", "v1", setParams)); } @Test public void testKey() { System.out.println(jedis.keys("*")); // 查找所有key,参数为正则表达式,不推荐使用 System.out.println(jedis.exists("k1")); // 判断key是否存在 System.out.println(jedis.expire("k1", 60)); // 设值过期时间 System.out.println(jedis.incr("count")); // 相当于++ System.out.println(jedis.decr("count")); // 相当于-- System.out.println(jedis.incrBy("count", 2)); // 相当于+=2 System.out.println(jedis.decrBy("count", 2)); // 相当于-=2 } @After public void close() { jedis.close(); } }