Redis的Java客户端
- 一.Jedis依赖
- 二.Java客户端上使用redis
-
- 1.连接Jedis服务器
- 2.redis通用命令
- 3.String类型的命令
-
- mset和mget
- getrange和setrange
- [incr、decr 和 append](#incr、decr 和 append)
- 4.List命令
- 5.Set命令
-
- [smembers 和 sadd](#smembers 和 sadd)
- sismember
- scard
- spop
- sinter
- sinterstore
- 6.Hash命令
- 7.ZSet命令
- 三.Spring客户端使用redis
-
- 1.redis的依赖
- 2.yml的配置文件
- [3. String类型命令](#3. String类型命令)
- 4.List类型
- 5.Set类型
- 6.Hash类型
- 7.ZSet类型
一.Jedis依赖
1.引入依赖
在Maven中引入Jedis的依赖,通过Maven中央仓库中进行查找:

java
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.4.2</version>
</dependency>

2.redis端口问题
由于redis的端口号6379默认被云服务器防火墙给进行保护起来了,如果手动关闭防火墙很容易被黑客入侵,所以不能够关闭防火墙。
如果想在Java上访问redis的服务器那么可以按照以下的2个方法:
(1)打包给Linux
把写好的Java代码打包成jar包,然后把jar包上传到Linux服务器上执行,这种方法手动太麻烦了,虽然也有插件,但是不太安全。
(2)配置SSH端口,进行映射
通过 SSH 隧道将本地端口与远程 Redis 服务端口绑定,使 Java 客户端通过本地端口间接访问远程 Redis。
步骤:
查看是否成功打开(成功就是下图):
二.Java客户端上使用redis
1.连接Jedis服务器
java
//连接Redis服务器
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
2.redis通用命令
java
try (Jedis jedis = jedisPool.getResource()) {
//redis各种命令,就对应jedis对象的各种方法
String pong = jedis.ping();
System.out.println(pong);
}
set/get命令
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("get和set的使用");
//此处是进行测试,需要将数据库中的数据线清空
jedis.flushAll();
jedis.set("key1","111");
jedis.set("key2","222");
SetParams params = new SetParams();
params.ex(10);
params.xx();
jedis.set("key1","333",params);
String value = jedis.get("key1");
System.out.println("value: " + value);
}
exists和del
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("exists 和 del 的使用");
//此处是进行测试,需要将数据库中的数据线清空
jedis.flushAll();
jedis.set("key1","111");
jedis.set("key2","222");
jedis.set("key3","333");
jedis.set("key4","444");
boolean result = jedis.exists("key1");
System.out.println(result);
long del = jedis.del("key1");
System.out.println(del);
result = jedis.exists("key1");
System.out.println(result);
//删除多个key
del = jedis.del("key2","key3","key4");
System.out.println(del);
//检查多个key是否存在
long result1 = jedis.exists("key2","key3","key4");
System.out.println(result1);
}
keys
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("keys的使用");
//此处是进行测试,需要将数据库中的数据线清空
jedis.flushAll();
jedis.set("key1","111");
jedis.set("key2","222");
jedis.set("key3","333");
jedis.set("key4","444");
Set<String> keys = jedis.keys("*");
System.out.println(keys);
}
ex、ttl、type
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("ex、ttl 和 type 的使用");
//此处是进行测试,需要将数据库中的数据线清空
jedis.flushAll();
jedis.set("key1","111");
jedis.expire("key1",10);
long time = jedis.ttl("key1");
System.out.println("剩余时间: " + time);
Thread.sleep(3000);
time = jedis.ttl("key1");
System.out.println("剩余时间: " + time);
String s = jedis.type("key1");
System.out.println("类型: " + s);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
3.String类型的命令
mset和mget
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("mget 和 mset的使用");
jedis.flushAll();
jedis.mset("key1","11","key2","22", "key3","33");
List<String> list = jedis.mget("key1","key2","key3");
System.out.println("value: " + list);
}
getrange和setrange
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("getrange 和 setrange的使用");
jedis.flushAll();
jedis.set("key1","asasdsadsaasd");
String value = jedis.getrange("key1",2,5);
System.out.println("value: " + value);
jedis.setrange("key1",2,"123");
String value1 = jedis.get("key1");
System.out.println("value1: " + value1);
}
incr、decr 和 append
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("append 、incr 和 decr 的使用");
jedis.flushAll();
jedis.set("key1","abcdefg");
jedis.append("key1","123456");
String value = jedis.get("key1");
System.out.println("value: " + value);
jedis.set("key2","100");
long result = jedis.incr("key2");
System.out.println("result : " + result);
String value2 = jedis.get("key2");
System.out.println("value2: " + value2);
result = jedis.decr("key2");
System.out.println("result : " + result);
value2 = jedis.get("key2");
System.out.println("value2: " + value2);
}
4.List命令
lpush和lrange
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("lpush 和 lrange 的使用");
jedis.flushAll();
jedis.lpush("key1","111","222","333");
List<String> result = jedis.lrange("key1",0,-1);
System.out.println("result: " + result);
}
rpush
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("lpush 和 lrange 的使用");
jedis.flushAll();
jedis.rpush("key1","111","222","333");
List<String> result = jedis.lrange("key1",0,-1);
System.out.println("result: " + result);
}
lpop
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("lpop 的使用");
jedis.flushAll();
jedis.rpush("key1","111","222","333");
String result = jedis.lpop("key1");
System.out.println("result: " + result);
result = jedis.lpop("key1");
System.out.println("result: " + result);
result = jedis.lpop("key1");
System.out.println("result: " + result);
result = jedis.lpop("key1");
System.out.println("result: " + result);
}
rpop
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("rpop 的使用");
jedis.flushAll();
jedis.rpush("key1","111","222","333");
String result = jedis.rpop("key1");
System.out.println("result: " + result);
result = jedis.rpop("key1");
System.out.println("result: " + result);
result = jedis.rpop("key1");
System.out.println("result: " + result);
result = jedis.rpop("key1");
System.out.println("result: " + result);
}
llen
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("rpop 的使用");
jedis.flushAll();
jedis.rpush("key1","111","222","333");
long result = jedis.llen("key1");
System.out.println("result: " + result);
}
brpop
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("brpop 的使用");
jedis.flushAll();
List<String> result = jedis.brpop(3,"key1");
System.out.println("result[0]: " + result.get(0));
System.out.println("result[1]: " + result.get(1));
}
5.Set命令
smembers 和 sadd
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("sadd 和 smembers 使用");
jedis.flushAll();
jedis.sadd("key1","11","22","33");
Set<String> result = jedis.smembers("key1");
System.out.println("result: " + result);
}
sismember
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("sismember 使用");
jedis.flushAll();
jedis.sadd("key1","11","22","33");
boolean result = jedis.sismember("key1","11");
System.out.println("result: " + result);
}
scard
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("scard 使用");
jedis.flushAll();
jedis.sadd("key1","11","22","33");
long result = jedis.scard("key1");
System.out.println("result: " + result);
}
spop
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("spop 使用");
jedis.flushAll();
jedis.sadd("key1","11","22","33");
String result = jedis.spop("key1");
System.out.println("result: " + result);
}
sinter
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("sinter 使用");
jedis.flushAll();
jedis.sadd("key1","11","22","33");
jedis.sadd("key2","11","22","44");
Set<String> result = jedis.sinter("key1","key2");
System.out.println("result: " + result);
}
sinterstore
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("sinterstore 使用");
jedis.flushAll();
jedis.sadd("key1","11","22","33");
jedis.sadd("key2","11","22","44");
long result = jedis.sinterstore("key3","key1","key2");
Set<String> result1 = jedis.smembers("key3");
System.out.println("result: " + result);
System.out.println("result1: " + result1);
}
6.Hash命令
hget 和 hset
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("hset 和 hget的使用");
jedis.flushAll();
jedis.hset("key1","f1","11");
HashMap<String,String> map = new HashMap<>();
map.put("f2","22");
map.put("f3","33");
jedis.hset("key1",map);
String result = jedis.hget("key1","f1");
System.out.println("result: " + result);
result = jedis.hget("key1","f2");
System.out.println("result: " + result);
result = jedis.hget("key1","f3");
System.out.println("result: " + result);
result = jedis.hget("key1","f4");
System.out.println("result: " + result);
}
hexists
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("hexists 的使用");
jedis.flushAll();
jedis.hset("key1","f1","11");
HashMap<String,String> map = new HashMap<>();
map.put("f2","22");
map.put("f3","33");
jedis.hset("key1",map);
boolean result = jedis.hexists("key1","f1");
System.out.println("result: " + result);
result = jedis.hexists("key1","f1111");
System.out.println("result: " + result);
}
hdel
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("hdel 的使用");
jedis.flushAll();
jedis.hset("key1","f1","11");
HashMap<String,String> map = new HashMap<>();
map.put("f2","22");
map.put("f3","33");
jedis.hset("key1",map);
long result = jedis.hdel("key1","f1");
System.out.println("result: " + result);
result = jedis.hdel("key1","f2","f3");
System.out.println("result: " + result);
result = jedis.hdel("key1","f1111");
System.out.println("result: " + result);
}
hkeys 和 hvals
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("hkeys 和 hvals 的使用");
jedis.flushAll();
jedis.hset("key1","f1","11");
HashMap<String,String> map = new HashMap<>();
map.put("f2","22");
map.put("f3","33");
jedis.hset("key1",map);
Set<String> result = jedis.hkeys("key1");
System.out.println("result: " + result);
List<String> result1 = jedis.hvals("key1");
System.out.println("result1: " + result1);
}
hmget 和 hmset
java
try(Jedis jedis = jedisPool.getResource()) {
System.out.println("hmset 和 hmget 的使用");
jedis.flushAll();
HashMap<String,String> map = new HashMap<>();
map.put("f1","11");
map.put("f2","22");
map.put("f3","33");
jedis.hmset("key1",map);
List<String> result = jedis.hmget("key1","f1","f2","f3");
System.out.println("result: " + result);
}
7.ZSet命令
zadd 、zrange和zrangewithscores
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("zadd 和 zrange 的使用");
jedis.flushAll();
jedis.zadd("key1",10,"zhangsan");
Map<String,Double> map = new HashMap<>();
map.put("lisi",20.0);
map.put("wangwu",30.0);
jedis.zadd("key1",map);
List<String> result = jedis.zrange("key1",0,-1);
System.out.println("result: " + result);
List<Tuple>result1 = jedis.zrangeWithScores("key1",0,-1);
System.out.println("result1: " + result1);
//拆分出来
String member = result1.get(0).getElement();
Double score = result1.get(0).getScore();
System.out.println("member: " +member);
System.out.println("score: " +score);
}
zcard
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("zcard 的使用");
jedis.flushAll();
jedis.zadd("key1",10,"zhangsan");
Map<String,Double> map = new HashMap<>();
map.put("lisi",20.0);
map.put("wangwu",30.0);
jedis.zadd("key1",map);
long result = jedis.zcard("key1");
System.out.println("result: " + result);
}
zrem
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("zrem 的使用");
jedis.flushAll();
jedis.zadd("key1",10,"zhangsan");
Map<String,Double> map = new HashMap<>();
map.put("lisi",20.0);
map.put("wangwu",30.0);
jedis.zadd("key1",map);
long result = jedis.zrem("key1","zhangsan","lisi");
System.out.println("result: " + result);
List<Tuple> result1 = jedis.zrangeWithScores("key1",0,-1);
System.out.println("result1: " + result1);
}
zscore
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("zscore 的使用");
jedis.flushAll();
jedis.zadd("key1",10,"zhangsan");
Map<String,Double> map = new HashMap<>();
map.put("lisi",20.0);
map.put("wangwu",30.0);
jedis.zadd("key1",map);
Double result = jedis.zscore("key1","zhangsan");
System.out.println("result: " + result);
}
zrank
java
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("zrank 的使用");
jedis.flushAll();
jedis.zadd("key1",10,"zhangsan");
Map<String,Double> map = new HashMap<>();
map.put("lisi",20.0);
map.put("wangwu",30.0);
jedis.zadd("key1",map);
long result = jedis.zrank("key1","lisi");
System.out.println("result: " + result);
}
三.Spring客户端使用redis
1.redis的依赖

2.yml的配置文件

3. String类型命令
传递redis的文本数据需要注入一个对象(非常重要):
java
@Autowired
private StringRedisTemplate redisTemplate;
@GetMapping("/testString")
public String testString() {
//redisTemplage将不同类型的方法进行了重新排放
//插入元素
redisTemplate.opsForValue().set("key1","111");
redisTemplate.opsForValue().set("key2","222");
redisTemplate.opsForValue().set("key2","333");
//获取元素
String value = redisTemplate.opsForValue().get("key1");
System.out.println("value: " + value);
return "ok";
}
4.List类型
可以通过execute方法来使用redis原生的命令,在execute方法中再使用RedisCallback的函数接口就可以使用了。
java
@GetMapping("/testList")
public String testList() {
//使用redis原来的命令
redisTemplate.execute((RedisConnection connetion) -> {
//清空数据库中的数据
connetion.flushAll();
return null;
});
//头插数据
redisTemplate.opsForList().leftPush("key","111");
redisTemplate.opsForList().leftPush("key","222");
redisTemplate.opsForList().leftPush("key","333");
//尾删数据
String value = redisTemplate.opsForList().rightPop("key");
System.out.println("value: " + value);
value = redisTemplate.opsForList().rightPop("key");
System.out.println("value: " + value);
value = redisTemplate.opsForList().rightPop("key");
System.out.println("value: " + value);
return "ok";
}
5.Set类型
java
@GetMapping("/testSet")
public String testSet() {
//使用redis原来的命令
redisTemplate.execute((RedisConnection connetion) -> {
connetion.flushAll();
return null;
});
//插入数据
redisTemplate.opsForSet().add("key","111","222","333");
//获取数据
Set<String> value = redisTemplate.opsForSet().members("key");
System.out.println("value: " + value);
//数据是否存在
Boolean exists = redisTemplate.opsForSet().isMember("key","111");
System.out.println("exists: " + exists);
//有几条数据
long result = redisTemplate.opsForSet().size("key");
System.out.println("count: " +result);
//删除数据
redisTemplate.opsForSet().remove("key","111","222");
//获取当前数据个数
value = redisTemplate.opsForSet().members("key");
System.out.println("value: " + value);
return "ok";
}
6.Hash类型
java
@GetMapping("/testHash")
public String testHash() {
//使用redis原来的命令
redisTemplate.execute((RedisConnection connetion) -> {
connetion.flushAll();
return null;
});
//插入数据
redisTemplate.opsForHash().put("key","f1","111");
redisTemplate.opsForHash().put("key","f2","222");
redisTemplate.opsForHash().put("key","f3","333");
//获取数据
String value = (String) redisTemplate.opsForHash().get("key","f1");
System.out.println("value: " + value);
//判断数据是否存在
Boolean exists = redisTemplate.opsForHash().hasKey("key","f1");
System.out.println("exists: " + exists);
//删除数据
redisTemplate.opsForHash().delete("key","f1","f2");
//有几条数据
long result = redisTemplate.opsForHash().size("key");
System.out.println("count: " +result);
return "ok";
}
7.ZSet类型
java
@GetMapping("/testZSet")
public String testZSet() {
//使用redis原来的命令
redisTemplate.execute((RedisConnection connetion) -> {
connetion.flushAll();
return null;
});
//插入数据
redisTemplate.opsForZSet().add("key","zhangsan",10);
redisTemplate.opsForZSet().add("key","lisi",20);
redisTemplate.opsForZSet().add("key","wangwu",30);
//获取数据
Set<String> value = redisTemplate.opsForZSet().range("key",0,-1);
System.out.println("value: " + value);
//获取数据
Set<ZSetOperations.TypedTuple<String>>value1 = redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
System.out.println("value1: " + value1);
//获取member的score
Double result = redisTemplate.opsForZSet().score("key","zhangsan");
System.out.println("count: " +result);
//删除数据
redisTemplate.opsForZSet().remove("key","zhangsan");
//获取数据长度
Long size = redisTemplate.opsForZSet().size("key");
System.out.println("size: " + size);
//获取数据排行
Long rank = redisTemplate.opsForZSet().rank("key","lisi");
System.out.println("rank: " + rank);
return "ok";
}