第一步:添加依赖
Java操作 Redis 需要添加对应的 Redis 客户端,本攻略我们使用的是 Jedis 客户端,因此需要在项目中添加 Jedis 依赖。
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.0</version>
</dependency>
</dependencies>
第二步:连接 Redis
使用 Jedis 连接 Redis 需要指定 Redis 的主机名、端口号等连接信息。
Jedis jedis = new Jedis("localhost", 6379);
第三步:存储 Map 对象类型的数据
使用 Jedis 客户端可以方便地存储 Map 对象类型的数据,其主要有以下三种方法:
- set 方法
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
jedis.set("map", map.toString());
将 Map 对象转为 String 类型并使用 set 方法存储在 Redis 中。
- hset 方法
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
jedis.hset("map", map);
使用 hset 方法将 Map 对象存储在 Redis 的哈希表中。
- hmset 方法
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
jedis.hmset("map", map);
使用 hmset 方法将 Map 对象存储在 Redis 的哈希表中。与 hset 方法不同的是,hmset 方法可同时存储多个键值对。
第四步:获取 Map 对象类型的数据
获取 Map 对象类型的数据也有以下三种方法:
- get 方法
String value = jedis.get("map");
Map<String, String> map = new HashMap<>();
if (value != null) {
map = (Map<String, String>) JSON.parse(value);
}
使用 get 方法获取 String 类型的数据后,再将其转为 Map 对象类型。
- hget 方法
Map<String, String> map = jedis.hgetAll("map");
使用 hget 方法从 Redis 的哈希表中获取 Map 对象类型的数据。
- hmget 方法
List<String> keys = new ArrayList<>();
keys.add("key1");
keys.add("key2");
List<String> values = jedis.hmget("map", keys.toArray(new String[keys.size()]));
Map<String, String> map = new HashMap<>();
for (int i = 0; i < keys.size(); i++) {
if (values.get(i) != null) {
map.put(keys.get(i), values.get(i));
}
}
使用 hmget 方法从 Redis 的哈希表中获取多个键值对,并将其转为 Map 对象类型。
完整示例代码:
import com.alibaba.fastjson.JSON;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RedisMapExample {
public static void main(String[] args) {
// 连接 Redis
Jedis jedis = new Jedis("localhost", 6379);
// 存储 Map 对象类型的数据
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
jedis.set("map", map.toString());
jedis.hset("map", map);
jedis.hmset("map", map);
// 获取 Map 对象类型的数据
String value = jedis.get("map");
Map<String, String> map1 = new HashMap<>();
if (value != null) {
map1 = (Map<String, String>) JSON.parse(value);
}
Map<String, String> map2 = jedis.hgetAll("map");
List<String> keys = new ArrayList<>();
keys.add("key1");
keys.add("key2");
List<String> values = jedis.hmget("map", keys.toArray(new String[keys.size()]));
Map<String, String> map3 = new HashMap<>();
for (int i = 0; i < keys.size(); i++) {
if (values.get(i) != null) {
map3.put(keys.get(i), values.get(i));
}
}
System.out.println("map1: " + map1);
System.out.println("map2: " + map2);
System.out.println("map3: " + map3);
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java redis存Map对象类型数据的实现 - Python技术站