【Redis教程0x02】入门:Redis的最基本操作&Java中使用Redis

注意,本篇博客是Redis的最入门教程,不会过多深入介绍Redis的数据结构原理和应用场景。只是简单介绍Redis的基本操作,以及如何在Java中使用Redis。有关Redis的进阶知识后面会持续更新。

Redis的数据类型

Redis提供了丰富的数据类型,最常见的5种基本数据类型为:

  • String:字符串;
  • Hash:哈希;
  • List:列表;
  • Set:集合;
  • Zset:有序集合;

随着Redis版本的更新,后面又支持了四种数据类型:

  • BitMap:位图;
  • HyperLogLog:用于"统计基数"的数据结构;
  • GEO:存储地理位置信息;
  • Stream:消息队列;

关于各种数据类型及其背后的实现源码不在本篇博客的讨论范围(后面会专门写博客讨论)。

作为入门教程,我们以String为例进行简单的介绍。在Redis中,String数据类型是动态的(这区别于Java,Java中String是不可变的)。Redis的String内部结构类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。如下图所示,分配的实际空间capacity一般高于实际字符串长度len。当字符串长度小于 1MB时,扩容是成倍增长;当长度超过1MB,每次扩容增加1MB,最大长度为512MB。
image.png

Redis实战

在后台启动Redis服务端,忘记怎么启动的见【Redis教程0x01】。进入redis-cli命令行客户端,这个客户端是有智能提示的,输入命令,会有相应的提示。以下是完整的键值对测试命令,大伙可以按照格式实战一下:

127.0.0.1:6379> set name iq50
OK
127.0.0.1:6379> get name
"iq50"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>

1)set 命令用来存储一个键值对,在本例中,name 为 key,iq50 为值。
2)get 命令用来获取一个键值对。
3)exists 命令用来测试一个键值对是否存在,(integer) 1 表示存在,(integer) 0 表示不存在。
4)del 命令用来删除一个键值对,(integer) 1 表示执行成功,(integer) 0 表示执行失败。
5)当键值对删除后,再通过 get 命令获取时,结果就为 (nil) 。
那么什么是nil呢?

它是 Objective-C、Swift、Ruby、Lua 等编程语言中的一个关键字。nil 是一种类型,它只有一个值 nil,它的主要功能是用于区别其他任何值,就像之前所说的,一个全局变量在第一次赋值前的默认值就是 nil,将 nil 赋予一个全局变量等同于删除它,Lua 将 nil 用于表示一种“无效值(non-value)”的情况,即没有任何有效值的情况。

Java中使用Redis

首先,需要在pom中导入依赖:

<!-- 用于连接Redis; Jedis = Java + Redis -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.2.0</version>
</dependency>

<!-- 用于序列化和反序列化 -->
<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.6</version>
  <scope>compile</scope>
</dependency>

编写测试类测试:

package org.example;

import com.google.gson.Gson;
import org.junit.Test;
import redis.clients.jedis.Jedis;

public class RedisTest {
    // 常量USER_KEY用于存储用户信息的key
    private static final String USER_KEY = "user";
    
    @Test
    public void demo001(){
        // 借助Jedis,只需一行代码就能连接到Redis
        // 参数为主机名、端口号
        Jedis jedis = new Jedis("localhost",6379);
        // 初始化一个用于序列化、反序列化的gson类(google json)
        Gson gson = new Gson();

        User user = new User("IQ50zzz",24);
        // 存储键值对用set方法
        jedis.set(USER_KEY,gson.toJson(user));
        // 读取键值对用get方法
        User userFromRedis = gson.fromJson(jedis.get(USER_KEY), User.class);

        System.out.println("get:" + userFromRedis);

        System.out.println("exists:" + jedis.exists(USER_KEY));
        System.out.println("del:" + jedis.del(USER_KEY));
        System.out.println("get:" + jedis.get(USER_KEY));
    }
}

class User {
    private String name;
    private int age;

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

    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // getter & setter
}

output:
get:UserInfo{name='IQ50zzz', age=24}
exists:true
del:1
get:null

代码中已经给了比较详细的注释了,就不多加赘述。

结语

本篇博客为大家简单介绍了Redis的数据类型,以及在Java中如何连接Redis。后面我们将继续深入研究Redis。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值