java使用Lettuce客户端连接redis学习基本redis指令

关注我,精彩文章第一时间推送给你

公众号.jpg

java使用Lettuce客户端连接redis学习基本redis指令

  • 参考try.redis.io进行以下几种存储类型的指令学习

  • string、list、set、zset、hash

由于Springboot 2.0 中redis客户端使用了Lettue,所以没使用jedis进行学习,依赖由于项目中引入了以下依赖,所以就不用别的了。


   org.springframework.boot
   spring-boot-starter-data-redis



   org.apache.commons
   commons-pool2

操作基本指令代码如下:

/**
 * @author yunqing
 * @description 参考 try.redis.io
 * @date 2020/6/3 16:08
 */
@SpringBootTest
@Slf4j
public class LettuceTest {

    RedisClient redisClient;
    StatefulRedisConnection redisConnection;
    RedisCommands sync;

    /**
     * @BeforeEach 注解在非静态方法上,所有测试方法之前执行
     * @BeforeAll 注解在静态方法上,所有测试方法之前执行
     */
    @BeforeEach
    void connRedisByLettuce() {
        RedisURI redisUri = RedisURI.builder()
            .withHost("127.0.0.1")
            .withPort(6379)
            .withTimeout(Duration.of(10, ChronoUnit.SECONDS))
            .build();
        redisClient = RedisClient.create(redisUri);
        redisConnection = redisClient.connect();
        sync = redisConnection.sync();
    }

    /**
     * 关闭连接
     */
    @AfterEach
    void closeConn() {
        redisConnection.close();
        redisClient.shutdown();
    }

    /**
     * string类型set get
     * ttl 返回-1永不超时
     * ttl 返回-2不存在此key
     */
    @Test
    void string() {
        log.info(sync.set("k1", "v1"));
        sync.expire("k1", 1000); //设置1000秒超时
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info(sync.ttl("k1").toString()); //获取剩余超时时间
        log.info(sync.get("k1"));
    }

    /**
     * redis 列表,相当于链表
     * lpush 左侧添加,是可变参数,可同时追加多个
     * rpush 右侧添加,是可变参数,可同时追加多个
     * lrange key 0 -1 获取列表第一到最后一个
     * lpop key 删除列表左侧第一个
     * rpop key 删除列表右侧第一个
     * llen key 获取当前列表长度
     */
    @Test
    void redisList() {
        sync.rpush("friends", "Tom", "yunqing");
        sync.rpush("friends", "Bob", "kkk");
        sync.lpush("friends", "peter");
        log.info(sync.llen("friends").toString());
        List friends = sync.lrange("friends", 0, -1);
        friends.forEach(System.out::println);
        sync.lpop("friends");
        sync.rpop("friends");
        List friends2 = sync.lrange("friends", 0, -1);
        friends2.forEach(System.out::println);
        log.info(sync.llen("friends").toString());
        sync.expire("friends", 10);//设置1000秒过期
    }

    /**
     * redis  set集合
     * 测试
     */
    @Test
    void redisSet() {
        sync.sadd("names", "yunqing", "kkk", "tom", "tom", "a", "c", "b");
        log.info("输出set集合[{}]", String.valueOf(sync.smembers("names")));
        log.info("测试是否存在---------[{}]", sync.sismember("names", "yunqing"));
        log.info("删除结果1成功,0失败---------[{}}]", sync.srem("names", "tom"));
        log.info("输出集合[{}]", sync.smembers("names"));
        sync.expire("names", 10);
    }

    /**
     * 带排序的set集合
     */
    @Test
    void redisZSet() {
        sync.zadd("names", 1, "yunqing");
        sync.zadd("names", 3, "tom");
        sync.zadd("names", 2, "kkk");
        sync.zadd("names", 10, "tom");
        sync.zadd("names", 5, "peter");
        sync.zadd("names", 5, "bob");
        log.info("查看集合所有[{}]---------", sync.zrange("names", 0, -1));
        log.info("删除一个-----[{}]", sync.zrem("names", "peter"));
        log.info("查看集合所有[{}]---------", sync.zrange("names", 0, -1));
        sync.expire("names", 10);
    }

    /**
     * hash格式存储
     */
    @Test
    void hash() {
        sync.hset("user", "name", "yunqing");
        sync.hset("user", "age", "26");
        log.info("获取所有-----[{}]", sync.hgetall("user"));
        Map map = new HashMap<>();
        map.put("sex", "男");
        map.put("email", "10001");
        sync.hmset("user", map);
        log.info("获取所有-----[{}]", sync.hgetall("user"));
        log.info("获取一个------[{}]", sync.hget("user", "email"));
        sync.expire("user", 10);
    }

}

你可能感兴趣的:(java使用Lettuce客户端连接redis学习基本redis指令)