Redis入门

郎家岭伯爵 2023年04月03日 591次浏览

前言

本文介绍一下 Redis 的入门操作。

实现

安装Redis

Redis 的下载地址

有两种安装方式:

  • 第一种是 MSI 的方式,双击运行后安装;
  • 第二种是免安装,绿色版,只需要把 ZIP 包解压就可以了。

启动 Redis:

打开命令行,进入到当前解压后的目录,输入启动命令:

redis-server redis.windows.conf

还有一些其他的提示信息:

  • Redis 当前的版本号为 5.0.14.1
  • 端口是 6379
  • 进程 ID,也就是 PID 为 7484
  • Redis 官方地址为:http://redis.io

停止 Redis:

Ctrl + C 可以粗暴地停止 Redis 服务。

数据结构

Redis 有 5 种基础数据结构,String、Hash、List、Set、SortedSet,也是学 Redis 必须掌握的。除此之外,还有 HyperLogLog、Geo、Pub/Sub,算是高级数据结构了。

本文以 String 为例。

String 结构使用非常广泛,比如说把用户的登陆信息转成 JSON 字符串后缓存起来,等需要取出的时候再反序列化一次。

Java 的 String 是不可变的,无法修改;但 Redis 的 String 是动态的,可以修改的,两者不同。

关于 Redis 的 String 结构:

Redis 的 String 在内部结构实现上类似于 Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。如上图所示,当前字符串实际分配的空间为 capacity,一般高于实际的字符串长度 len。当字符串长度小于 1M 时,扩容是对现有空间的成倍增长;如果长度超过 1M 时,扩容一次只会多增加 1M 的空间。最大长度为 512M。

客户端操作Redis

Redis 的解压目录下有一个名叫 redis-cli.exe 的文件,这是 Redis 自带的一个客户端工具,可以用来连接之前我们启动好的 Redis 服务。双击启动它。

以下是完整的键值对测试命令:

127.0.0.1:6379> set user-1 langjialing
OK
127.0.0.1:6379> get user-1
"langjialing"
127.0.0.1:6379> exists user-1
(integer) 1
127.0.0.1:6379> exists user-2
(integer) 0
127.0.0.1:6379> del user-1
(integer) 1
127.0.0.1:6379> get user-1
(nil)
127.0.0.1:6379>
  • set 命令用来存储一个键值对,在本例中,name 为 user-1,langjialing 为值。
  • get 命令用来获取一个键值对。
  • exists 命令用来测试一个键值对是否存在,(integer) 1 表示存在,(integer) 0 表示不存在。
  • del 命令用来删除一个键值对,(integer) 1 表示执行成功,(integer) 0 表示执行失败。
  • 当键值对删除后,再通过 get 命令获取时,结果就为 (nil) 。

如果想了解更多 Redis 命令更多的操作命令,可以参考此文档

SpringBoot中使用Redis

  1. 在项目中添加 Jedis(Java 和 Redis 的混拼) 依赖:
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>
  1. 新建 UserInfo(用户信息)类:
public class UserInfo {
    private String name;
    private int age;

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

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

    // getter / setter
}
  1. 在项目中添加 Gson(用于序列化和反序列化用户信息) 依赖:
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
    <scope>compile</scope>
</dependency>
  1. 新建测试类 RedisTest:
public class RedisTest {
    private static final String REDIS_KEY = "user";
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);

        Gson gson = new Gson();
        UserInfo userInfo = new UserInfo("langjialing", 20);

        jedis.set(REDIS_KEY, gson.toJson(userInfo));
        UserInfo getUserInfoFromRedis = gson.fromJson(jedis.get(REDIS_KEY),UserInfo.class);

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

        System.out.println("exists:" + jedis.exists(REDIS_KEY));
        System.out.println("del:" + jedis.del(REDIS_KEY));
        System.out.println("get:" + jedis.get(REDIS_KEY));
    }
}
  • REDIS_KEY 常量为存储用户信息到 Redis 的 key。
  • 在 Jedis 的帮助下,Java 连接 Redis 服务变得非常简单,只需要一行代码:Jedis jedis = new Jedis("localhost", 6379);。参数分别是主机名,端口号。存储键值对用 set() 方法,获取键值对用 get() 方法,判断键值对是否存在用 exists() 方法,删除键值对用 del() 方法。
  • Gson 是谷歌提供的一个开源库,可以将 Java 对象序列化为 JSON 字符串,同样可以将 JSON 字符串反序列化(解析)为匹配的 Java 对象。使用起来也非常简单,toJson() 方法将对象转成 JSON 字符串,fromJson() 方法将 JSON 字符串反序列化对象。

输出结果:

总结

本文简单介绍了一下 Redis 的入门操作,后续将继续介绍一些 SpringBoot 整合 Redis 的用法。