前言
本文介绍一下 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
- 在项目中添加 Jedis(Java 和 Redis 的混拼) 依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
- 新建 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
}
- 在项目中添加 Gson(用于序列化和反序列化用户信息) 依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
<scope>compile</scope>
</dependency>
- 新建测试类 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 的用法。