51Testing软件测试论坛

标题: 数据库Redis的简单实践 [打印本页]

作者: lsekfe    时间: 2021-3-19 09:57
标题: 数据库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基本操作命令

  根据前言中的参考博客所述,通过 cmd 打开 redis 服务,可以在命令行中练习以上操作命令,以求掌握,这里就不贴图做演示了。
  Java使用Redis
  使用IDEA搭建Redis项目
  使用 IDEA创建 Redis 项目分为六步:
  创建一个新项目
  选择“Maven”
  填写项目路径
  检查项目信息
  等待项目构建成功
  导入相关依赖
  首先,我们打开 IDEA,创建一个新项目。

  在左侧选择“Maven”,Project SDK选择为自己的 JDK安装目录,勾选“Create form archetype”,选择“quickstart”快速启动的工程,点击 next。

  然后我们填写项目名称,选择自己喜欢的路径,点击 next。

  接着我们要检查项目信息,看看包名什么的是否需要修改。这里一般都是采用默认设置,直接 finish 即可。

  等待项目加载完成。如果IDEA界面的右下角弹出提示 Maven项目需要导入,选择“Enable Auto-Import”让其自动导入。

  如果项目加载完成后看到了如下警告,可以忽略不管,这不会影响到项目的使用。

  项目构建完成,我们打开 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 代码会报错。

  接着我们新建一个 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 方法,可以看到,我们已经成功插入了键值对,删改查也成功实现。

  使用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 方法,可以看到,我们已经成功实现了对象的存取。






欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2