Redis的简单实践

Redis的简单实践

前言

在进行 Redis 的操作之前,请确保电脑上已经安装了 Redis。

如果还没有安装 Redis 的,请参考这篇博客进行安装 Win10安装Redis

Redis简介

Redis 是一个高性能的 key-value 分布式内存数据库,基于内存运行,并支持持久化的 NoSQL 数据库。

Redis 是运行在内存中的,所以读写速度非常快,因此 Redis 被广泛应用在缓存方向

Redis的优点:

  1. 速度快,因为数据存在内存中
  2. 支持丰富的数据类型,支持 String、list、set、sorted set、hash
  3. 支持事务,操作都是原子性的
  4. 特性丰富,可用于缓存、消息。按 key 设置过期时间,到期自动删除
  5. 支持主从复制,进行读写分离
  6. 支持数据持久化,支持 AOFRDB 两种方式

Redis的应用场景:

  • 热点数据的缓存
  • 限时业务的应用
  • 分布式锁
  • 延时操作
  • 分页、模糊查找
  • ······

Redis基本操作命令

命令说明
set KeyName Value设置 key 和 value 的值’
get KeyName获取对应键的值
keys *获取所有的键(注意空格
dbsize获取所有键的数量
exists KeyName检查键是否存在
del KeyName删除键
type KeyName查看键的类型
expire KeyName 60设置键的过期时间为60秒
persist KeyName设置键永不过期
rename KeyName NewKeyName修改键的名字
sadd CollectionName xx1 xx2 xx3创建集合
smembers CollectionName获取集合
sismember CollectionName xx判断集合中是否存在xx元素
scard CollectionName获取集合中元素的个数
srem CollectionName xx删除集合中的xx元素

根据前言中的参考博客所述,通过 cmd 打开 redis 服务,可以在命令行中练习以上操作命令,以求掌握,这里就不贴图做演示了。

Java使用Redis

使用IDEA搭建Redis项目

使用 IDEA创建 Redis 项目分为六步:

  1. 创建一个新项目
  2. 选择“Maven”
  3. 填写项目路径
  4. 检查项目信息
  5. 等待项目构建成功
  6. 导入相关依赖

首先,我们打开 IDEA,创建一个新项目。

r1

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

r2

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

r3

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

r4

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

r5

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

r6

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

r7

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

r8

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

r9

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值