lsekfe 发表于 2021-3-19 09:57:22

数据库Redis的简单实践

前言
  在进行 Redis 的操作之前,请确保电脑上已经安装了 Redis。
  如果还没有安装 Redis 的,请参考这篇博客进行安装 Win10安装Redis
  Redis简介
  Redis 是一个高性能的 key-value 分布式内存数据库,基于内存运行,并支持持久化的 NoSQL 数据库。
  Redis 是运行在内存中的,所以读写速度非常快,因此 Redis 被广泛应用在缓存方向。
  Redis的优点:
  速度快,因为数据存在内存中
  支持丰富的数据类型,支持 String、list、set、sorted set、hash
  支持事务,操作都是原子性的
  特性丰富,可用于缓存、消息。按 key 设置过期时间,到期自动删除
  支持主从复制,进行读写分离
  支持数据持久化,支持 AOF、RDB 两种方式
  Redis的应用场景:
  热点数据的缓存
  限时业务的应用
  分布式锁
  延时操作
  分页、模糊查找
  ······
  Redis基本操作命令
http://www.51testing.com/attachments/2020/12/15326825_202012081434061A23o.png
  根据前言中的参考博客所述,通过 cmd 打开 redis 服务,可以在命令行中练习以上操作命令,以求掌握,这里就不贴图做演示了。
  Java使用Redis
  使用IDEA搭建Redis项目
  使用 IDEA创建 Redis 项目分为六步:
  创建一个新项目
  选择“Maven”
  填写项目路径
  检查项目信息
  等待项目构建成功
  导入相关依赖
  首先,我们打开 IDEA,创建一个新项目。
http://www.51testing.com/attachments/2020/12/15326825_202012081432282ph8E.png
  在左侧选择“Maven”,Project SDK选择为自己的 JDK安装目录,勾选“Create form archetype”,选择“quickstart”快速启动的工程,点击 next。
http://www.51testing.com/attachments/2020/12/15326825_202012081432283bD52.png
  然后我们填写项目名称,选择自己喜欢的路径,点击 next。
http://www.51testing.com/attachments/2020/12/15326825_202012081432284Othq.png
  接着我们要检查项目信息,看看包名什么的是否需要修改。这里一般都是采用默认设置,直接 finish 即可。
http://www.51testing.com/attachments/2020/12/15326825_202012081432285mY4K.png
  等待项目加载完成。如果IDEA界面的右下角弹出提示 Maven项目需要导入,选择“Enable Auto-Import”让其自动导入。
http://www.51testing.com/attachments/2020/12/15326825_202012081432286zYPw.png
  如果项目加载完成后看到了如下警告,可以忽略不管,这不会影响到项目的使用。
http://www.51testing.com/attachments/2020/12/15326825_202012081432287rAB1.png
  项目构建完成,我们打开 pom.xml 文件,导入 redis 的相关依赖。这里导入了 Jedis 的依赖、阿里的一个 json 处理类

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>



  这两个依赖导入完成后,整个项目就搭建完成了,我们可以开始使用了。
  使用Jedis进行简单增删改查
  Jedis是 Redis 官方推荐的 Java 连接开发工具。对 Jedis的熟练使用可以让我们在 Java 开发中使用好 Redis 中间件。
  我们新建一个 util 目录,在目录下新建一个 RedisUtil 工具类,用于获取 Redis 的连接。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisUtil {
    //定义连接池和对象
    public static JedisPoolConfig poolConfig = new JedisPoolConfig();
    public static JedisPool jedisPool = null;
    public static Jedis jedis = null;

    static {
      //简单配置
      poolConfig.setMaxIdle(50);//最大空闲数
      poolConfig.setMaxTotal(100);//最大连接数
      poolConfig.setMaxWaitMillis(20000);//最长等待时间(毫秒)

      //进行连接
      jedisPool = new JedisPool(poolConfig, "127.0.0.1");
      //获取jedis对象
      jedis = jedisPool.getResource();
    }
}



  因为我们是将 redis 装在了本机电脑上,所以配置连接池时直接使用的是 127.0.0.1 ,如果是装在服务器上的,更换为服务器的IP地址。
  当然,我们需要通过 cmd 窗口启动 redis 的服务,不然运行 java 代码会报错。
http://www.51testing.com/attachments/2020/12/15326825_202012081432288ILDo.png
  接着我们新建一个 run 目录, 在目录下新建 JedisTest 类来进行操作

import org.example.util.RedisUtil;
import redis.clients.jedis.Jedis;

public class JedisTest {
    Jedis jedis = RedisUtil.jedis;

    //增
    public void setKeyValue(String key, String value) {
      jedis.set(key, value);
    }

    //查
    public String getKeyValue(String key) {
      return jedis.get(key);
    }

    //删
    public void delKey(String key) {
      jedis.del(key);
    }

    //改
    public void updateKey(String oldKey, String newKey) {
      jedis.rename(oldKey, newKey);
    }

    public static void main(String[] args) {
      JedisTest jedisTest = new JedisTest();
      //设置键值对
      jedisTest.setKeyValue("test1", "hello");
      jedisTest.setKeyValue("test2", "hello2");

      //取值
      String v1 = jedisTest.getKeyValue("test1");
      String v2 = jedisTest.getKeyValue("test2");
      System.out.println("test1:"+v1+"\ntest2:"+v2);
      System.out.println("\n");

      //删除
      jedisTest.delKey("test2");
      String v3 = jedisTest.getKeyValue("test2");
      System.out.println("test2:"+v3);
      System.out.println("\n");

      //改名
      jedisTest.updateKey("test1","mytest");
      String v4 = jedisTest.getKeyValue("test1");
      String v5 = jedisTest.getKeyValue("mytest");
      System.out.println("test1:"+v4+",mytest:"+v5);
    }
}



  运行 main 方法,可以看到,我们已经成功插入了键值对,删改查也成功实现。
http://www.51testing.com/attachments/2020/12/15326825_2020120814322896ZZF.png
  使用Jedis操作对象
  我们之前使用的都是 String 类型,现在我们要通过 jedis 来传入对象。
  新建一个 pojo 目录,在目录下新建 User 类,实现构造函数和 Get and Set 方法。

public class User {
    private String name;
    private String school;
    private int age;

    public User() {
    }

    public User(String name, String school, int age) {
      this.name = name;
      this.school = school;
      this.age = age;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getSchool() {
      return school;
    }

    public void setSchool(String school) {
      this.school = school;
    }

    public int getAge() {
      return age;
    }

    public void setAge(int age) {
      this.age = age;
    }
}



  在 run 目录中新建一个 UserTest 类,实现对象的存储和查询

import com.alibaba.fastjson.JSON;
import org.example.pojo.User;
import org.example.util.RedisUtil;
import redis.clients.jedis.Jedis;

public class UserTest {
    Jedis jedis = RedisUtil.jedis;

    //增
    public void setObject(String key, Object obj) {
      jedis.set(key, JSON.toJSONString(obj));
    }

    //查
    public Object getObject(String key, Class clazz) {
      return JSON.parseObject(jedis.get(key), clazz);
    }

    public static void main(String[] args) {
      UserTest userTest = new UserTest();
      //设置对象
      User user = new User("Bob", "BIT", 20);

      //进行存取
      userTest.setObject("user", user);
      User user2 = (User) userTest.getObject("user", User.class);
      System.out.println("name:"+user2.getName());
      System.out.println("school:"+user2.getSchool());
      System.out.println("age:"+user2.getAge());
    }
}



  这里因为 value 必须是字符串或者是数组,我们要传入对象的话得通过 JSON 的 toJSonString() 方法把对象转换为字符串。同样地,取出的时候也要使用 parseObject() 方法转换成对象才行。
  运行 main 方法,可以看到,我们已经成功实现了对象的存取。
http://www.51testing.com/attachments/2020/12/15326825_2020120814322810akRk.png
页: [1]
查看完整版本: 数据库Redis的简单实践