zoukankan      html  css  js  c++  java
  • Redis 学习笔记2(Java 操作Redis)

    Jedis 简介

    Jedis 是 Java 操作 Redis 的驱动架包。在使用前需要先下载好驱动架包jedis.jar

    1. 首先你需要下载驱动包 下载 jedis.jar,确保下载好驱动包。
    2. 在 classpath 中包含该驱动包。

    连接到 redis 服务

    /** 连接 Redis 数据库 */
    @Test
    public void ConnectionRedisTest() {
        // 获取连接
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        System.out.println("连接成功");
        // 查看服务是否运行
        System.out.println("服务正在运行: " + jedis.ping());
        // 关闭连接
        jedis.close();
    }
    

    输出:

    连接成功
    服务正在运行: PONG
    

    Jedis 操作 Redis 中的各种数据结构

    String(字符串)

    /** 操作 Redis String 类型的数据 */
    @Test
    public void OperateStringTest() throws InterruptedException {
        // 获取连接:空参,默认为 "127.0.0.1", 6379
        Jedis jedis = new Jedis();
        // 存储 String 类型的数据
        jedis.set("username", "LeeHua");
        // 获取存储的 String 数据
        System.out.println(jedis.get("username"));
        // 使用 setex() 方法存储数据,可以指定过期时间 ---- key, value
        // 将 checkCode: AbCd 键值对存入 Redis,10秒后删除
        jedis.setex("checkCode", 10, "AbCd");
        System.out.println(jedis.get("checkCode"));
        // 程序停顿10秒
        Thread.sleep(10000);
        System.out.println("停顿10秒后,再获取 checkCode:" + jedis.get("checkCode"));
        // 删除 username
        jedis.del("username");
        // 关闭连接
        jedis.close();
    }
    

    输出:

    LeeHua
    AbCd
    停顿10秒后,再获取 checkCode:null
    

    Hash (哈希)

    /** 操作 Redis Hash 类型的数据 */
    @Test
    public void OperateHashTest() throws InterruptedException {
        // 获取连接:空参,默认为 "127.0.0.1", 6379
        Jedis jedis = new Jedis();
        // 存储 hash
        jedis.hset("user", "name", "LeeHua");
        jedis.hset("user", "age", "21");
        jedis.hset("user", "gender", "male");
        // 获取hash中的一个数据
        System.out.println(jedis.hget("user", "name"));
        System.out.println(jedis.hget("user", "age"));
        System.out.println(jedis.hget("user", "gender"));
        // 获取hash中所有map数据
        Map<String, String> userMap = jedis.hgetAll("user");
        Set<String> users = userMap.keySet();
        Iterator<String> userIterator = users.iterator();
        while (userIterator.hasNext()) {
            String key = userIterator.next();
            String value = userMap.get(key);
            System.out.println(key + ": " + value);
        }
        // 删除 user 中的某个 key: value
        jedis.hdel("user", "name");
        jedis.hdel("user", "age");
        jedis.hdel("user", "gender");
        // 关闭连接
        jedis.close();
    }
    

    输出:

    LeeHua
    21
    male
    gender: male
    name: LeeHua
    age: 21
    

    List(列表)

    /** 操作 Redis List 类型的数据 */
    @Test
    public void OperateListTest() {
        // 获取连接:空参,默认为 "127.0.0.1", 6379
        Jedis jedis = new Jedis();
        // 从 List 的左边存入数据
        jedis.lpush("testList", "1", "2", "3");
        // 从 List 的右边存入数据
        jedis.rpush("testList", "A", "B", "C");
        // 获取 List(列表) 数据
        System.out.println(jedis.lrange("testList", 0, 5));
        // 删除 List(列表) 数据
        // 从左边开始删除
        String leftFirst = jedis.lpop("testList");
        String leftSecond = jedis.lpop("testList");
        String leftThird = jedis.lpop("testList");
        // 从右边开始删除
        String rightFirst = jedis.rpop("testList");
        String rightSecond = jedis.rpop("testList");
        String rightThird = jedis.rpop("testList");
        System.out.println("左边开始删除:" + leftFirst + "、" + leftSecond + "、" + leftThird);
        System.out.println("右边开始删除:" + rightFirst + "、" + rightSecond + "、" + rightThird);
        // 关闭连接
        jedis.close();
    }
    

    输出:

    [3, 2, 1, A, B, C]
    左边开始删除:3、2、1
    右边开始删除:C、B、A
    

    Set(无序集合)

    /** 操作 Redis Set 类型的数据 */
    @Test
    public void OperateSetTest() {
        // 获取连接:空参,默认为 "127.0.0.1", 6379
        Jedis jedis = new Jedis();
        // 存储数据(存储的数据是没顺序的)
        jedis.sadd("BigData",
                "HDFS", "MapReduce", "Spark", "Storm");
        // 获取数据
        Set<String> bigData = jedis.smembers("BigData");
        System.out.println(Arrays.toString(bigData.toArray()));
        // 删除数据
        jedis.srem("BigData", "HDFS", "MapReduce", "Spark", "Storm");
        // 关闭连接
        jedis.close();
    }
    

    输出(无序的):

    [Storm, HDFS, Spark, MapReduce]
    

    Zset(有序集合)

    /** 操作 Redis Set 类型的数据 */
    @Test
    public void OperateSortSetTest() {
        // 获取连接:空参,默认为 "127.0.0.1", 6379
        Jedis jedis = new Jedis();
        // 存储数据(存储的数据是有顺序的,按照 score 进行排序的)
        jedis.zadd("BigData", 10, "HDFS");
        jedis.zadd("BigData", 20, "MapReduce");
        jedis.zadd("BigData", 30, "Spark");
        jedis.zadd("BigData", 1, "Storm");
        // 获取数据
        Set<String> bigData = jedis.zrange("BigData", 0, 3);
        System.out.println(Arrays.toString(bigData.toArray()));
        // 删除数据
        jedis.zrem("BigData", "HDFS", "MapReduce", "Spark", "Storm");
        // 关闭连接
        jedis.close();
    }
    

    输出:

    [Storm, HDFS, MapReduce, Spark]
    

    Jedis 连接池

    Jedis 连接池的使用

    @Test
    public void JedisPoolTest() {
        // 创建Jedis连接池对象
        JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
        // 从 Jedis 连接池中获取 Redis 连接对象
        Jedis jedis = jedisPool.getResource();
        System.out.println("服务正在运行: " + jedis.ping());
        // 将 Redis 连接对象归还到 Jedis 连接池
        jedis.close();
    }
    

    输出:

    服务正在运行: PONG
    

    Jedis 连接池工具类

    • 配置文件:jedis.properties

      # redis服务器的IP
      host=127.0.0.1
      # redis服务器的端口
      port=6379
      # 最大活动对象数
      maxTotal=50
      # 最大能够保持 idel 状态的对象数
      maxIdle=10
      
    • 数据库连接池:JedisPoolUtils.java

      import redis.clients.jedis.Jedis;
      import redis.clients.jedis.JedisPool;
      import redis.clients.jedis.JedisPoolConfig;
      
      import java.io.IOException;
      import java.io.InputStream;
      import java.util.Properties;
      
      public class JedisPoolUtils {
          private static JedisPool jedisPool;
      
          // 读取配置文件
          static {
              // 获取类加载器
              ClassLoader classLoader = JedisPoolUtils.class.getClassLoader();
              // 获取加载配置文件的对象
              Properties properties = new Properties();
              // 获取 jedis.properties 配置文件资源输入流
              InputStream jedisProperties = classLoader.getResourceAsStream("jedis.properties");
              // 加载配置文件
              try {
                  properties.load(jedisProperties);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              // 将加载的配置文件数据,设置到 JedisPoolConfig 中
              JedisPoolConfig config = new JedisPoolConfig();
              config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
              config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
      
              // 初始化jedis连接池对象
              jedisPool = new JedisPool(
                      config,
                      properties.getProperty("host"),
                      Integer.parseInt(properties.getProperty("port"))
              );
          }
      
          /** 获取连接的方法 */
          public static Jedis getJedis() {
              return jedisPool.getResource();
          }
      }
      
    • 测试连接池

      /** 测试 JedisPoolUtils */
      @Test
      public void JedisPoolUtilsTest() {
          // 获取 Jedis 连接对象
          Jedis jedis = JedisPoolUtils.getJedis();
          System.out.println("连接成功");
          // 查看服务是否运行
          System.out.println("服务正在运行: " + jedis.ping());
          // 将 Redis 连接对象归还到 Jedis 连接池
          jedis.close();
      }
      

      输出:

      连接成功
      服务正在运行: PONG
      

    参考文献

    1. Redis 教程| 菜鸟教程
    Good Good Write Bug, Day Day Up
  • 相关阅读:
    贝叶斯思想的实质之我见
    强化学习基础概念理解
    Thinkpad x200用户只能放弃生化危机5(PC版), 希望能全速运行星际争霸2!
    This is it
    今天自己掏腰包去买联通iPhone有几位?
    今天是我的生日:)
    2009已经到来 / 2009 Just the Beginning
    好评如潮的PS3游戏《抵抗2 Resistance2》你玩了吗?
    生化危机5 / BIOHAZARD5 简直就是一款完美的印钞机?(+2009.4.9)
    一部好电影《第九区 District 9》
  • 原文地址:https://www.cnblogs.com/liyihua/p/14482374.html
Copyright © 2011-2022 走看看