51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4413|回复: 0
打印 上一主题 下一主题

[转贴] 数据库Redis的简单实践

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-3-19 09:57:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    前言
      在进行 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 方法,可以看到,我们已经成功实现了对象的存取。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 00:29 , Processed in 0.064681 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表