
Jedis
通过 Jedis 可以连接 Redis 服务器。
通过 Maven 引入 Jedis 依赖。
xml
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.2.0</version>
</dependency>
连接 Redis 服务器。
这里设置了 ssh 端口转发,将本地的 8888 端口转发到远程的 6379 端口。
还需修改 Redis 的配置文件:
- 将 bind 的地址改为 0.0.0.0
- 将 protected-mode 改为 no
Java
public class RedisCon {
public static void main(String[] args) {
try (JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
Jedis jedis = jedisPool.getResource()) {
String pong = jedis.ping(); // 测试连接
System.out.println(pong);
}
}
}
通用命令
GET、SET
Java
private static void getAndSet(Jedis jedis) {
jedis.flushAll(); // TODO 清除所有键避免影响操作
jedis.set("k1", "111");
System.out.println(jedis.get("k1"));
SetParams params = new SetParams(); // ? 设置额外参数
params.ex(1);
params.nx();
jedis.set("k2", "222", params); // ? 相当于设置了 1s 过期时间和添加方式为 NX
// Thread.sleep(2000);
System.out.println(jedis.get("k2"));
}
输出:
bash
111
222 | null
EXISTS、DEL
java
private static void existsAndDel(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "111");
jedis.set("k2", "111");
long trueExists = jedis.exists("k1", "k2"); // ? 这里的参数为变长参数
System.out.println(trueExists);
long successDel = jedis.del("k2", "k3");
System.out.println(successDel);
}
输出:
bash
2
1
KEYS
java
private static void keys(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "111");
jedis.set("k2", "111");
jedis.set("k3", "111");
jedis.set("k4", "111");
Set<String> keys = jedis.keys("*");
System.out.println(keys);
}
输出:
bash
[k1, k2, k3, k4]
EXPIRE、TTL
java
private static void expiresAndTTL(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "111");
jedis.expire("k1", 10);
long time = jedis.ttl("k1");
System.out.println(time);
}
输出:
bash
10
type
java
private static void type(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "111");
System.out.println("type:" + jedis.type("k1"));
jedis.lpush("k2", "111");
System.out.println("type:" + jedis.type("k2"));
jedis.hset("k3", "f1", "v1");
System.out.println("type:" + jedis.type("k3"));
jedis.sadd("k4", "111");
System.out.println("type:" + jedis.type("k4"));
jedis.zadd("k5", 30, "m1");
System.out.println("type:" + jedis.type("k5"));
}
输出:
bash
type:string
type:list
type:hash
type:set
type:zset
string 类型
MSET、MGET
java
private static void msetAndMget(Jedis jedis) {
jedis.flushAll();
jedis.mset("k1", "111", "k2", "222", "k3", "你好");
List<String> mgetRes = jedis.mget("k1", "k2", "k3", "k4");
System.out.println(mgetRes);
}
输出:
bash
[111, 222, 你好, null]
SETRANGE、GETRANGE
java
private static void setrangeAndGetrange(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "hello world");
String getrangeRes = jedis.getrange("k1", 6, 10);
System.out.println(getrangeRes);
jedis.setrange("k1", 6, "redis");
System.out.println(jedis.getrange("k1", 0, -1));
}
输出:
bash
world
hello redis
APPEND
java
private static void append(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "It's MyGO");
long appendRes = jedis.append("k1", "!!!!!");
System.out.println(appendRes);
System.out.println(jedis.get("k1"));
}
输出:
bash
10
It's MyGO!!!!!
INCR、DECR
java
private static void incrAndDecr(Jedis jedis) {
jedis.flushAll();
jedis.set("k1", "100");
long incrRes = jedis.incr("k1");
System.out.println(incrRes);
jedis.set("k2", "100");
long decrRes = jedis.decr("k2");
System.out.println(decrRes);
}
输出:
bash
101
99
list 类型
LPUSH、LRANGE
java
private static void lpushAndLrange(Jedis jedis) {
jedis.flushAll();
jedis.lpush("k1", "111", "222", "333");
List<String> lrangeRes = jedis.lrange("k1", 0, -1);
System.out.println(lrangeRes);
}
输出:
bash
[333, 222, 111]
RPUSH
java
private static void rpush(Jedis jedis) {
jedis.flushAll();
jedis.rpush("k1", "111", "222", "333");
List<String> lrangeRes = jedis.lrange("k1", 0, -1);
System.out.println(lrangeRes);
}
输出:
bash
[111, 222, 333]
LPOP、RPOP
java
private static void lpopAndRpop(Jedis jedis) {
jedis.flushAll();
jedis.rpush("k1", "111", "222", "333");
String res = jedis.lpop("k1");
System.out.println(res);
res = jedis.lpop("k1");
System.out.println(res);
res = jedis.lpop("k1");
System.out.println(res);
res = jedis.lpop("k1");
System.out.println(res);
jedis.rpush("k1", "111", "222", "333");
res = jedis.rpop("k1");
System.out.println(res);
res = jedis.rpop("k1");
System.out.println(res);
res = jedis.rpop("k1");
System.out.println(res);
res = jedis.rpop("k1");
System.out.println(res);
}
输出:
bash
333
222
111
null
333
222
111
BLPOP、LLEN
java
private static void blpopAndLlen(Jedis jedis) {
jedis.flushAll();
List<String> blpopRes = jedis.blpop(100, "k1");
System.out.println("key:" + blpopRes.get(0));
System.out.println("val:" + blpopRes.get(1));
long len = jedis.llen("k1");
System.out.println(len);
}
输出:
bash
key:k1
val:111
2
set 类型
SADD、SMEMBERS、SCARD
java
private static void saddAndSmembersAndScard(Jedis jedis) {
jedis.flushAll();
jedis.sadd("k1", "111", "222", "333");
Set<String> smembersRes = jedis.smembers("k1");
System.out.println(smembersRes);
long len = jedis.scard("k1");
System.out.println(len);
}
输出:
bash
[111, 222, 333]
3
SISMEMBER、SPOP
java
private static void sismemberAndSpop(Jedis jedis) {
jedis.flushAll();
jedis.sadd("k1", "111", "222", "333");
boolean sismemberRes = jedis.sismember("k1", "111");
System.out.println(sismemberRes);
String spopRes = jedis.spop("k1");
System.out.println(spopRes);
spopRes = jedis.spop("k1");
System.out.println(spopRes);
spopRes = jedis.spop("k1");
System.out.println(spopRes);
spopRes = jedis.spop("k1");
System.out.println(spopRes);
}
输出:
bash
true
111
222
333
null
SINTER、SINNTERSTORE
java
private static void sinterAndSinterstore(Jedis jedis) {
jedis.flushAll();
jedis.sadd("k1", "111", "222", "333");
jedis.sadd("k2", "111", "222", "444");
Set<String> sinterRes = jedis.sinter("k1", "k2");
System.out.println(sinterRes);
jedis.sinterstore("k3","k1", "k2");
Set<String> res = jedis.smembers("k3");
System.out.println(res);
}
输出:
bash
[111, 222]
[111, 222]
hash 类型
HSET、HGET
java
private static void hsetAndHget(Jedis jedis) {
jedis.flushAll();
jedis.hset("k1", "f1", "111");
Map<String, String> fv = Map.of("f2", "222", "f3", "333");
jedis.hset("k1", fv);
String hgetRes = jedis.hget("k1", "f2");
System.out.println(hgetRes);
}
输出:
bash
222
HEXISTS、HDEL
java
private static void hexistsAndHdel(Jedis jedis) {
jedis.flushAll();
Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");
jedis.hset("k1", fv);
boolean hexistsRes = jedis.hexists("k1", "f1");
System.out.println(hexistsRes);
long hdelRes = jedis.hdel("k1", "f1", "f2", "f3", "f4");
System.out.println(hdelRes);
}
输出:
bash
true
3
HKEYS、HVALS
java
private static void hkeysAndHvals(Jedis jedis) {
jedis.flushAll();
Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");
jedis.hset("k1", fv);
Set<String> hkeysRes = jedis.hkeys("k1");
System.out.println(hkeysRes);
List<String> hvalsRes = jedis.hvals("k1");
System.out.println(hvalsRes);
}
输出:
bash
[f1, f2, f3]
[111, 222, 333]
HMSET、HMGET
java
private static void hmsetAndHmget(Jedis jedis) {
jedis.flushAll();
Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");
jedis.hmset("k1", fv);
List<String> hmgetRes = jedis.hmget("k1", "f1", "f2", "f3", "f4");
System.out.println(hmgetRes);
}
输出:
bash
[111, 222, 333, null]
Zset 类型
ZADD、ZRANGE
java
private static void zaddAndZrange(Jedis jedis) {
jedis.flushAll();
jedis.zadd("k1", 10.0, "zhangsan");
Map<String, Double> ms = Map.of("lishi", 20.0, "wangwu", 30.0);
jedis.zadd("k1", ms);
List<String> zrangeRes = jedis.zrange("k1", 0, -1);
System.out.println(zrangeRes);
List<Tuple> membersWithScores = jedis.zrangeWithScores("k1", 0, -1);
System.out.println(membersWithScores);
System.out.println(membersWithScores.get(0).getElement());
System.out.println(membersWithScores.get(0).getScore());
}
输出:
bash
[zhangsan, lishi, wangwu]
[[zhangsan,10.0], [lishi,20.0], [wangwu,30.0]]
zhangsan
10.0
ZCARD、ZREM
java
private static void zcardAndZrem(Jedis jedis) {
jedis.flushAll();
Map<String, Double> ms = Map.of("zhangsan", 10.0, "lishi", 20.0, "wangwu", 30.0);
jedis.zadd("k1", ms);
long zcardRes = jedis.zcard("k1");
System.out.println(zcardRes);
long zremRes = jedis.zrem("k1", "zhangsan", "lishi", "zhaoliu");
System.out.println(zremRes);
}
输出:
bash
3
2
ZSCORE、ZRANK
java
private static void zscoreAndZrank(Jedis jedis) {
jedis.flushAll();
Map<String, Double> ms = Map.of("zhangsan", 10.0, "lishi", 20.0, "wangwu", 30.0);
jedis.zadd("k1", ms);
Double zscoreRes = jedis.zscore("k1", "zhangsan");
System.out.println(zscoreRes);
Long zrankRes = jedis.zrank("k1", "lishi");
System.out.println(zrankRes);
}
输出:
bash
10.0
1
Spring Boot 集成 Redis
在创建 spring-boot 项目时,选择 Redis 依赖。
在 application.yml 中配置 Redis 连接信息。
这里配置了端口转发,正常输入服务器的公网 IP 地址和 6379 端口即可。
yaml
spring:
data:
redis:
port: 8888
host: 127.0.0.1
string 类型
Java
@RestController
public class StringController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/string")
public String string() {
// TODO 先清除数据库
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForValue().set("k1", "111");
Map<String, String> kv = Map.of("k2", "222", "k3", "333");
redisTemplate.opsForValue().multiSet(kv);
return redisTemplate.opsForValue().get("k1");
}
}
输出:
bash
111
list 类型
java
@RestController
public class ListController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/list")
public List<String> list() {
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForList().leftPush("k1", "111");
redisTemplate.opsForList().leftPushAll("k1", "222", "333", "444");
redisTemplate.opsForList().leftPop("k1");
return redisTemplate.opsForList().range("k1", 0, -1);
}
}
输出:
JSON
[
"333",
"222",
"111"
]
set 类型
java
@RestController
public class SetController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/set")
public Set<String> set() {
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForSet().add("k1", "111", "222", "333", "444");
Long size = redisTemplate.opsForSet().size("k1");
System.out.println("size:" + size);
Boolean isMember = redisTemplate.opsForSet().isMember("k1", "222");
System.out.println("isMember:" + isMember);
Long remove = redisTemplate.opsForSet().remove("k1", "444");
System.out.println("remove:" + remove);
return redisTemplate.opsForSet().members("k1");
}
}
输出:
bash
size:3
isMember:true
remove:1
JSON
[
"111",
"222",
"333"
]
hash 类型
java
@RestController
public class HashController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/hash")
public Map<Object, Object> hash() {
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForHash().put("k1", "f1", "v1");
Map<String, String> fv = Map.of("f2", "v2", "f3", "v3", "f4", "v4");
redisTemplate.opsForHash().putAll("k1", fv);
Long size = redisTemplate.opsForHash().size("k1");
System.out.println("size:" + size);
Boolean hasKey = redisTemplate.opsForHash().hasKey("k1", "f1");
System.out.println("hasKey:" + hasKey);
Long delete = redisTemplate.opsForHash().delete("k1", "f4");
System.out.println("delete:" + delete);
return redisTemplate.opsForHash().entries("k1");
}
}
输出:
bash
size:4
hasKey:true
delete:1
JSON
{
"f1": "v1",
"f3": "v3",
"f2": "v2"
}
zset 类型
java
@RestController
public class ZsetController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/zset")
public Set<ZSetOperations.TypedTuple<String>> zset() {
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForZSet().add("k1", "zhangsan", 10.0);
redisTemplate.opsForZSet().add("k1", "lishi", 20.0);
redisTemplate.opsForZSet().add("k1", "wangwu", 30.0);
redisTemplate.opsForZSet().add("k1", "zhaoliu", 40.0);
Long remove = redisTemplate.opsForZSet().remove("k1", "wangwu");
System.out.println("remove:" + remove);
Long rank = redisTemplate.opsForZSet().rank("k1", "lishi");
System.out.println("rank:" + rank);
Long size = redisTemplate.opsForZSet().size("k1");
System.out.println("size:" + size);
return redisTemplate.opsForZSet().rangeWithScores("k1", 0, -1);
}
}
输出:
bash
remove:1
rank:1
size:3
[lishi=20.0, zhangsan=10.0, zhaoliu=40.0]
JSON
[
{
"value": "zhangsan",
"score": 10.0
},
{
"value": "lishi",
"score": 20.0
},
{
"value": "zhaoliu",
"score": 40.0
}
]